DAG

2018-10-14  本文已影响0人  hipeer

什么是DAG

在Spark里每一个操作生成一个RDD,RDD之间连一条边,最后这些RDD和他们之间的边组成一个有向无环图,这个就是DAG。

Spark 为什么要构建DAG?

Spark会根据宽依赖窄依赖来划分具体的Stage,而依赖有2个作用:

RDD的依赖关系分为两种:窄依赖(Narrow Dependencies)与宽依赖(Wide Dependencies,源码中称为Shuffle Dependencies)

DAG的生成

原始的RDD通过一系列的转换就形成了DAG,有了计算的DAG图,Spark内核下一步的任务就是根据DAG图将计算划分成任务集,也就是Stage,这样可以将任务提交到计算节点进行真正的计算。Spark计算的中间结果默认是保存在内存中的,Spark在划分Stage的时候会充分考虑在分布式计算中可流水线计算(pipeline)的部分来提高计算的效率,而在这个过程中Spark根据RDD之间依赖关系的不同将DAG划分成不同的Stage(调度阶段)。对于窄依赖partition的转换处理在一个Stage中完成计算。对于宽依赖由于有Shuffle的存在,只能在parent RDD处理完成后,才能开始接下来的计算,因此宽依赖是划分Stage的依据

Spark Works By DAG

Spark 执行时有下面所列的流程:

注:在一个给定的Spark应用中,由于需要创建一系列新的RDD,因此上述阶段会连续发生很多次

上一篇 下一篇

猜你喜欢

热点阅读