spark知识体系2-运行架构 (2)

1.Client运行时向Master发送启动驱动请求(ResquestSubmitDriver指令)
2.Master调度可用Worker资源进行驱动安装(发送LaunchDriver指令)
3.Worker运行DriverRunner进行驱动加载,并向Master发送应用注册请求(发送RegisterApplication指令)
4.Master调度可用Worker资源进行应用的Executor安装(发送LaunchExecutor指令)
5.Executor安装完毕后向Driver注册驱动可用的Executor资源(发送RegisterExecutor指令)
6.运行用户代码时,通过DAGScheduler,TaskScheduler封装成可以执行的TaskSetManager对象
7.TaskSetManager对象与Driver中的Executor资源进行匹配,在队形的Executor中发布任务(发送LaunchTask指令)
8.TaskRunner执行完毕后,调用DriverRunner提交给DAGScheduler,循环7,执行任务完成

Spark核心概念 RDD

弹性分布式数据集(Resilient Distributed Data,RDD)作为Spark的编程模型,相对于MapReduce模型有更好的扩展和延伸:

提供了抽象层次更高的API

高效的数据共享

高效的容错性

RDD的操作类型

RDD大致可以包括如下四种操作类型:

创建操作(Creation):从内存集合和外部存储系统创建RDD,或者通过转换操作生成RDD

转换操作(Transformation):转换操作是惰性操作,只是定义一个RDD并记录依赖关系,没有立即执行

控制操作(Control):进行RDD的持久化,通过设定不同级别对RDD进行缓存

行动操作(Action):触发任务提交、Spark运行的操作,操作的结果是获取到结果集或者保存到外部存储系统

RDD的实现 RDD 的分区

RDD的分区是一个逻辑概念,转换操作前后的分区在物理上可能是同一块内存或者存储。在RDD操作中用户可以设定和获取分区数目,默认分区数目为该程序所分配到的cpu核数,如果是从HDFS文件创建,默认为文件的

spark知识体系2-运行架构

分片数。

RDD 的“血统”和依赖关系

spark知识体系2-运行架构

“血统”和依赖关系:RDD 的容错机制是通过记录更新来实现的,且记录的是粗粒度的转换操作。我们将记录的信息称为血统(Lineage)关系,而到了源码级别,Apache Spark 记录的则是 RDD 之间的依赖(Dependency)关系。如上所示,每次转换操作产生一个新的RDD(子RDD),子RDD会记录其父RDD的信息以及相关的依赖关系。

依赖关系

依赖关系划分为两种:窄依赖(Narrow Dependency)和 宽依赖(源码中为Shuffle Dependency)。

窄依赖指的是父 RDD 中的一个分区最多只会被子 RDD 中的一个分区使用,意味着父RDD的一个分区内的数据是不能被分割的,子RDD的任务可以跟父RDD在同一个Executor一起执行,不需要经过 Shuffle 阶段去重组数据。
窄依赖包括两种:一对一依赖(OneToOneDependency)和范围依赖(RangeDependency)
一对一依赖:

spark知识体系2-运行架构

范围依赖(仅union方法):

spark知识体系2-运行架构

宽依赖指的是父 RDD 中的分区可能会被多个子 RDD 分区使用。因为父 RDD 中一个分区内的数据会被分割,发送给子 RDD 的所有分区,因此宽依赖也意味着父 RDD 与子 RDD 之间存在着 Shuffle 过程。
宽依赖只有一种:Shuffle依赖(ShuffleDependency)

spark知识体系2-运行架构

Transformations / Actions

RDDs support 两种类型的操作: transformations(转换), 它会在一个已存在的 dataset 上创建一个新的 dataset, 和 actions(动作), 将在 dataset 上运行的计算后返回到 driver 程序. 例如, map 是一个通过让每个数据集元素都执行一个函数,并返回的新 RDD 结果的 transformation, reduce reduce 通过执行一些函数,聚合 RDD 中所有元素,并将最终结果给返回驱动程序(虽然也有一个并行 reduceByKey 返回一个分布式数据集)的 action.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzzyg.html