开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:Spark 原理_逻辑图_宽依赖_分析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/689/detail/12016
Spark 原理_逻辑图_宽依赖_分析
内容简介
一、Rdd 中的依赖关系
二、什么是宽依赖
三、如何判断宽依赖
一、Rdd 中的依赖关系有两种
1.窄依赖
2.宽依赖
二、什么是宽依赖,哪些算子会生成宽依赖
宽依赖就是 shuffle 中的依赖关系,换句话说,只有 shuffle 产生的地方才是宽依赖
三、如何判断宽依赖
1.判断宽窄依赖,是否含有 shuffle ,如果含有 shuffle,是不能把分区放到同一流水线上执行,有 shuffle 就是宽依赖
2.举个 reduceByKey 的例子,rddB = rddA,reduceByKey(curr,agg)—curr+agg)会产生如下依赖关系,reduceBykey 生成的关系就是宽依赖
假如 rddA 的 p1 中的数据为(hadoop,1) ( spark,1),p2 中的数据为 (spark,1)(hadoop,1),p3 为(hadoop,1)(flume,1)
3.在运行中大致的步骤
(1)分区函数,hadoop.toHashCode%2 = 1 or 2
决定 rddA 中三个分区的每条数据应该发个 rddB 的那个分区
(2)Hadoop.分区 =1 spark分区 =2
将数据往分区函数塞
4.shuffle 的判断
(1)将 rddA 的p1 拆开,将 hadoop 分发给 rddB 中的 p1,将 spark 分发给 rddB 中的 p2,这个过程就是 shuffle
对于 rddA 中的一个分区来说,其将一部分分发给 rddB 的 p1,另外一部分分发给 rddB 的 p2,这不是数据流动,而是分发
(3)ReduceByKey 所生成的 shuffleRDD ,对应的是 shuffledependency(也叫宽依赖)