1.29每日总结
Spark特点
运行速度快:Spark使用DAG执行引擎,支持循环数据流与内存计算
容易使用:Spark支持使用Scala、Java、Python和R语言进行编程;Spark Shell进行交互式编程
通用性:Spark提供了完整而强大的技术栈。包括SQL查询,流式计算,机器学习和图算法组件
运行模式多样
Spark生态系统
同时支持批处理,交互式查询和流数据处理
Spark Core
Spark Core包含Spark最基础和最核心的功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等,主要面向批数据处理。
Spark Core建立在统一的抽象RDD之上
Spark SQL
用于结构化数据处理的组件
Spark Streaming
一种流计算框架
Structured Streaming
流处理引擎
MLlib
提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等
GraphX
Spark用于图计算的API
Sprak应用场景
应用场景 时间跨度 Spark生态系统中的组件
复杂的批量数据处理 小时级 Spark Core
基于历史数据的交互式查询 分钟级、秒级 Spark SQL
基于实时数据流的数据处理 毫秒、秒级 Spark Streaming、Structured Streaming
基于历史数据的数据挖掘 – MLlib
图结构数据的处理 – GraphX
Spark运行架构
指Spark Core的运行架构
1、一些名词
RDD(Resilient Distributed Dataset)弹性分布式数据集,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型
DAG(Directed Acyclic Graph),反映RDD之间的依赖关系
Executor,是运行在Worker Node上的一个进程,负责运行任务,并为应用程序存储数据
Application,用户编写的Spark应用程序
Task,运行在Executor上的工作单元
Job,一个作业包含多个RDD及作用于相应RDD上的各种操作
Stage,作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,也被称为“任务集”
2、架构设计
集群资源管理器Cluster Manager
工作节点Worker Node
每个应用的任务控制节点Driver Program
每个工作节点上负责具体任务的执行进程Executor
主从架构:一个Driver和若干个Worker
脑海中有那张结构图
第二张图
An Application = A Driver + Some Jobs
A Job = Some Stages
A Stage = Some Tasks
3、Spark的基本运行流程
第三张图
Driver创建SparkContext对象
SparkContest与ClusterManager交互
ClusterManager根据SparkContext启动Executor,ClusterManager与Executor交互
SparkContest根据RDD的依赖关系构建DAG,交给DAGScheduler
DAGScheduler将DAG分解成多个Stage,每个阶段都是一个任务集,并计算各个Stage之间的依赖关系,把一个个任务集提交给底层的TaskScheduler进行处理
Executor向SparkContest申请任务,TaskScheduler将任务分发给Executor运行,同时,SparkContext将应用程序代码发放给Executor
任务在Executor上运行,把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源
4、RDD的设计与运行原理
RDD设计背景
RDD提供了一个抽象的数据架构,我们不必关注底层数据的分布式特性,只需将具体的应用逻辑表达为一系列转换处理,不同RDD之间的转换操作形成依赖关系,可以实现管道化,从而避免了中间结果的存储,大大降低了数据赋值、磁盘I/O和序列化开销。
RDD概念
一个RDD是一个分布式对象集合,本质上是一个只读的分区记录集合。
RDD典型的执行过程
RDD读入外部数据源(或内存中的集合)进行创建
RDD经过一系列的“转换”操作,每一次都会产生不同的RDD,供给下一个“转换”使用
最后一个RDD经Action操作进行处理,并输出到外部数据源
惰性调用
血缘关系(Lineage) DAG拓扑排序的结果
采用惰性调用的机制后,通过学院关系连接起来的一系列RDD操作就可以实现管道化(Pipeline),避免了多次转换操作之间数据同步的等待。(类比TensorFlow)
Hello World例子
from pyspark import SparkConf, SparkContext
#创建SparkContest对象,执行上下文
conf = SparkConf().setMaster("local").setAppName('My App')
sc = SparkContext(conf = conf)
#从HDFS文件(外部数据源)中读取数据创建fileRDD对象
fileRDD = sc.textFile("hdfs://localhost:9000/examplefile")
#构建fileRDD和filterRDD之间的依赖关系,形成DAG图,这时候并没有发生真正的计算,只是记录转换的轨迹,也就是记录RDD之间的依赖关系
filterRDD = fileRDD.filter(lambda line: "Hello World" in line)
#Action,这时才会触发真正的计算
filterRDD.count()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
RDD特性
高容错性 RDD设计中,数据只读,不可修改
中间结果持久化到内存
存放的数据可以是Java对象,避免了不必要的对象序列化和反序列化开销
RDD之间的依赖关系
Shuffle操作(查词典字面意思是***洗牌***)
对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程。
Narrow Dependency And Wide Dependency
以是否包含Shuffle操作为判断依据
如果父RDD的一个分区只被一个子RDD的一个分区所使用就是窄依赖,否则就是宽依赖
对于Join操作
对输入进行协同划分,属于窄依赖
对输入做非协同划分,属于宽依赖
阶段的划分
在DAG中进行反向解析,遇到宽依赖就断开,因为宽依赖涉及Shuffle操作,无法实现流水线化处理
RDD运行过程
创建RDD对象
SparkContext负责计算RDD之间的依赖关系,构建DAG
DAGScheduler负责把DAG图分解成多个阶段,每个阶段中包含了多个任务,每个任务会被TaskScheduler分发给各个WorkerNode上的Executor去执行
Spark的四种部署模式
Local模式(单机模式,用于本地开发测试)
Standalone模式(使用Spark自带的简单集群管理器,由一个Master和若干个Worker构成)
Spark on YARN(使用YARN作为集群管理器)
与Hadoop进行统一部署,资源管理和调度依赖YARN,分布式存储则依赖HDFS
Spark on Mesos(使用Mesos作为集群管理器,官方推荐,比运行在YARN上更加灵活,自然)
习题
Sprak是基于内存计算的大数据计算平台,请阐述Spark的主要特点。
Spark的出现是为了解决Hadoop MapReduce的不足,试列举Hadoop MapReduce的几个缺陷,并说明Spark具备哪些优点。
美国加州大学伯克利分校提出的数据分析的软件栈BDFS认为目前的大数据处理可以分为哪3个类型?
Spark已打造出结构一体化、功能多样化的大数据生态系统,请阐述Spark的生态系统。
从Hadoop+Storm架构转向Spark架构可带来哪些好处?
请阐述“Spark on YARN”的概念。
请阐述Spark的如下几个主要概念:RDD,DAG,阶段,分区,窄依赖,宽依赖。
Spark对RDD的操作主要分为Action和Transformation两种类型,两种操作的区别是什么?
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_46459047/article/details/121403977