1、有向无环图
DAG(Directed Acyclic Graph)叫做有向无环图,是一种不包含有向环的有向图。
2、DAG的创建
DAG描述多个RDD的转换过程,任务执行时,可以按照DAG的描述,执行真正的计算;
DAG是有边界的:
开始(通过sparkcontext创建的RDD),
结束(触发action,调用runjob就是一个完整的DAG形成了,一旦触发action,就形成了一个完整的DAG);
一个RDD描述了数据计算过程中的一个环节,而一个DAG包含多个RDD,描述了数据计算过程中的所有环节;一个spark application可以包含多个DAG,取决于具体有多少个action。
3、stage划分
原始的RDD通过一系列的转换就就形成了DAG,根据RDD之间的依赖关系的不同将DAG划分成不同的Stage,对于窄依赖,partition的转换处理在Stage中完成计算。对于宽依赖,由于有Shuffle的存在,只能在parent RDD处理完成后,才能开始接下来的计算,因此宽依赖是划分Stage的依据。