开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:Spark 原理_逻辑图_RDD 之间的关系_一对一】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/689/detail/12012
Spark 原理_逻辑图_RDD 之间的关系_一对一
内容简介
一、了解逻辑图
二、RDD 之间有哪些依赖关系
三、总结
一、逻辑图是什么
逻辑图就是数据处理和存储的过程
1.RDD 的生成
2.RDD 的依赖关系
二、RDD 之间的依赖关系
1.如图所示,上方框表示的是 RDD 的变量,下方框表示的是 RDD 的类型,中间框代表的是 RDD 的计算
其中 HIDFS file 有三个分片(block),通过 textfile 算子生成了 textRDD
注释:为什么这里 textfile 算子生成了 mappartitionsRDD, 而非hadoopRDD?
因为 hadoopRDD 生成后,会再调用 map 算子进行转换操作,就生成了 mappartitionsRDD
HIDFS file 中的 block b1对应了 textRDD 中的分区 p1,通过计算进行转换
TextRDD 从 HIDFS file 上读取内容后通过转换,拆分,展平后,生成 splitRDD,调用 flatmap 算子实现
SplitRDD 的分区数据经过 map 算子变成 tupleRDD 中对应的分区数据
探讨两个 RDD 之间的关系,应该从分区着手,一个 RDD 的分区与另一个 RDD 的分区之间是什么关系
其中 textRDD、splitRDD 和 tupleRDD 中 p1是一对一的关系。
2.什么是关系(依赖关系)?
从算子视角上来看,splitRDD 通过 map 算子得到了 tupleRDD,所以 splitRDD 和 tupleRDD 之间的关系是 map
但是仅仅这样说,会不够全面,从细节上来看,RDD 只是数据和关于数据的计算,而具体执行这种计算得出结果的是一个神秘的其他组件,所以,这两个 RDD 的关系可以表示为 splitRDD 的数据通过 map 操作,被传入 tupleRDD,这是它们之间更细化的关系
但是 RDD 这个概念本身并不是数据容器,数据真正应该存放的地方是 RDD 的分区,所以如果把视角放在数据这一层面上的话,直接讲这两个 RDD 之间有关系是不科学的,应该从这两个 RDD 的分区之间的关系来探讨它们之间的关系
3.那这些分区之间是什么关系?
如果仅仅说 splitRDD 和 tupleRDD 之间的话,那它们的分区之间就是一对一的关系
但是 tupleRDD 到 reduceRDD 呢?
TupleDD 通过算子 reduceByKey 生成 reduceRDD,而这个算子是一个 shuffle 操作,shuffle 操作的两个 RDD 的分区之间并不是一对一,reduceByKey 的一个分区对应 tupleRDD 的多个分区
三、总结:
1.RDD 之间的依赖关系不是指 RDD 之间的关系,而是分区之间的关系
2.Map flatmap 这些算子的两个 RDD 之间的分区是 one to one