DAG(Directed Acyclic Graph)叫做有向无环图,原始的RDD通过一系列的转换就就形成了DAG,根据RDD之间的依赖关系的不同将DAG划分成不同的Stage; 对于窄依赖,partition的转换处理在Stage中完成计算; 对于宽依赖,由于有Shuffle的存在,只能在parent RDD处理完成后,才能开始接下来的计算,因此宽依赖是划分Stage的依据; 如下图所示,是某个job分为3个阶段(stage),窄依赖可以放在同一个阶段(stage),而宽依赖由于shuffle的存在因此不能放在同一个阶段(state)中: A和B: groupBy操作是宽依赖,存在shuffle操作。 F和G: join操作是宽依赖,存在shuffle操作。 B和G: 是窄依赖,以为B的各个分区和G的分区唯一对应。 E和F,D和F,C和D: map和union均没有shuffle操作,因此均是宅依赖,因此他们可以在同一个阶段(stage)。 温馨提示: 宽依赖有shufle操作,窄依赖没有shuffle操作,因此我们可以将宅依赖放在同一个阶段执行,而宽依赖则需要分开不同的阶段操作,因为宽依赖要做shuffle的前提是需要依赖上一个阶段的执行结果。 由于窄依赖不需要等待,就可以利用并行的概念来执行数据,从而提升效率。
|