Spark的宽窄依赖

对于Spark的宽窄依赖问题,总是看的时候感觉自己明白了,过段时间不接触了就好像又不懂了。这回试着先给自己讲明白。

rdd的依赖关系是指上一个算子形成的rdd跟下一个算子形成的rdd 分区之间的对应关系,分为宽依赖和窄依赖。
首先,书本上的定义:
窄依赖是指每个父RDD的分区都至多被一个子RDD的分区使用 父RDD视角下 父:子 = 1:1
宽依赖是指多个子RDD的分区依赖一个父RDD的分区 父RDD视角下 父:子 = 1:多

Spark的宽窄依赖_第1张图片
从节点数据丢失后的恢复效率来看
这里的恢复应该是从子节点数据倒推父节点数据,因此窄依赖的父节点某分区数据丢失,只需要根据某一个子节点的单个分区就能倒推出来
而对于宽依赖的情况,则需要搜集所有子节点的数据才能倒推出某一个父节点分区的数据
所以说数据的恢复效率上,窄依赖的恢复效率要远高于宽依赖
划重点:从子到父的倒推难易程度 (这里仅代表个人的理解角度)

调度阶段与宽窄依赖
每个作业会因为RDD之间的依赖关系拆分成多组任务集合,称为调度阶段,也叫任务集。调度阶段的划分是由DAGScheduler 来划分的,DAGScheduler 会从最后一个RDD出发,使用广度优先遍历整个依赖树,根据操作是否为宽依赖(ShuffleDependency)进行调度阶段的划分,调度阶段有shuffle map stage和result stage两种。(这也是书上说的)
Spark的宽窄依赖_第2张图片
有问题请大方提出,转载请注明出处,侵权必究。

你可能感兴趣的:(大数据,spark,big,data,大数据)