Spark中的DAG和Stage
DAG(有向无环图)
Spark的DAG:就是spark任务/程序执行的流程图!
DAG的开始:从创建RDD开始
DAG的结束:到Action结束
一个Spark程序中有几个Action操作就有几个DAG!
Stage(阶段)
为什么需要划分Stage?
前面提到Spark可以根据代码执行流程形成一张有向无环图DAG,在执行的时候可以按照图中的流程顺序进行执行!并进行优化!如何优化?
1.对于宽依赖,由于Shuffle的存在,必须等到父RDD的Shuffle处理完成后,才能开始接下来的计算,所以需要在此处进行Stage的切分。
2.对于窄依赖,RDD之间的数据没有Shuffle,多个数据处理可以在同一台机器的内存中完成,所以窄依赖在Spark中被划分为同一个Stage;
总结:
可以根据宽依赖对DAG进行Stage阶段划分!
在同一个Stage阶段中的就都是窄依赖,可以形成pipeline,进行流水线操作!