1. 什么是DAG
DAG(Directed Acyclic Graph)叫做有向无环图,原始的RDD通过一系列的转换就形成了 DAG,根据RDD之间依赖关系的不同将DAG划分成不同的Stage(调度阶段)。对于窄依赖, partition的转换处理在一个Stage中完成计算。对于宽依赖,由于有Shuffle的存在,只能在 parent RDD处理完成后,才能开始接下来的计算,因此宽依赖是划分Stage的依据。

- DAG的边界
- 开始:通过SparkContext创建的RDD
- 结束:触发Action,一旦触发Action就形成了一个完整的DAG
- 一个job和一个DAG有什么样的关系?
- 触发一个job形成一个DAG
注意:
- 一个Spark应用中可以有一到多个DAG,取决于触发了多少次Action
- 一个DAG中会有不同的阶段/stage,划分阶段/stage的依据就是宽依赖
- 一个阶段/stage中可以有多个Task,一个分区对应一个Task
本文详细介绍了Spark中DAG的生成原理及其Stage划分,重点讲解了Shuffle过程,包括HashShuffle和SortShuffleManager的工作机制。通过理解DAG的划分依据以及Shuffle的优化策略,可以更好地优化Spark作业的性能。
订阅专栏 解锁全文
1805

被折叠的 条评论
为什么被折叠?



