开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:Spark 原理_逻辑图_总结】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/689/detail/12020
Spark 原理_逻辑图_总结
内容简介
一、逻辑执行图
二、RDD 如何生成
三、RDD 之间有哪些依赖关系
一、逻辑执行图
1.定义:是 RDD 及其 RDD 之间依赖关系的图,所表达的就是整个数据的计算以及步骤
2.边界:从第一个 RDD 产生到 action 算子之前都是逻辑执行图
逻辑执行图分为两个部分,第一部分是 rdd ,第二部分是 rdd 之间的依赖,接下来,我们会对两部分展开,进行详细的说明
3.分类
(1)明确边界
(2)RDD 如何生成
(3)RDD 之间的依赖关系
二、RDD 如何生成
通过看源码
1.例;RddA = rddB.map
RddA 是由 map 算子内部创建
2. Map 算子会创建 mappartitionsRDD;textfile 算子创建 hadoopRDD
它们都是创建 rdd,拗对象的过程
HadoopRDD 和 mappartitionsRDD 都是 RDD 父类的子类,重写 RDD 的五大属性实现特定的功能
这是 rdd 的生成,以及生成后不同 rdd 的子类,怎样去改变 rdd 功能的
//HadoopRDD,重写了分区列表和计算函数
//MappartitionsRDD,重写 compute 函数,处理整个 RDD 的数据
三、RDD 之间有哪些依赖关系
分为两种:窄依赖、宽依赖
1.窄依赖
最大的特点是:对应的 RDD 的分区可以放在同一流水线上执行
如果右边的 p1 要获取数据,可以直接通过左边 p1 得到,不需要计算完,直接获取,所以这种依赖我们称之为窄依赖,分区可以放到同一流水线上执行。
2.宽依赖
(1)区别:与窄依赖不同的是,有 shuffle 过程,需要另一方执行完才可以获取数据,所以宽依赖的 RDD 分区是不能放在同一流水线上执行的
假如 rddA 和 rddB 之间是宽依赖,那么它们对应的分区是不能放在一个 task 中执行的
(2)宽依赖和窄依赖的判断依据就是是否有 shuffle
①如果分区间一对一,则是窄依赖
②如果分区间多对一,要看是否有数据分发
//多对一要看分区的多少,通常分区较少,可能就是窄依赖,分区较多,就有可能是宽依赖
//要去看算子的原理,是否进行数据分发,是否有 shuffle ,有 shuffle 就是宽依赖,没有就是窄依赖
这是我们学习的逻辑执行图三大部分内容:明确边界是什么、分别介绍 rdd 的生成以及 rdd 之间的依赖关系,折叠后可以更加清晰地看到
逻辑执行图到目前为止还没有探讨如何在集群中执行,所以接下来我们会通过物理执行图,了解逻辑执行的怎样运行在集群中。