Spark DAG 依赖关系 Stage

Posted alen-apple

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark DAG 依赖关系 Stage相关的知识,希望对你有一定的参考价值。

 

DAG :

整个计算链可以抽象为一个DAG(有向无环图) Spark 的 DAG 作用:

记录了RDD之间的依赖关系,即RDD是通过何种变换生成的,

如下图:RDD1是RDD2的父RDD,通过flatMap操作生成 借助RDD之间的依赖关系,可以实现数据的容错,

即子分区(子RDD)数据丢失后,可以通过找寻父分区(父RDD),结合依赖关系进行数据恢复

综上,RDD(弹性分布式数据集)

①分区机制

②容错机制(借助RDD之间的依赖关系容错) 即使用Spark 框架处理数据,把数据封装为RDD,然后通过高阶函数来处理

 

 

 

 

技术图片

以上的执行过程如下:

技术图片

 

 

 

RDD之间的依赖关系

依赖关系有两种:

①窄依赖:父分区和子分区是一对一关系,没有shuffle,即不会发生磁盘I/O,所以执行效率很高,

     如果DAG中存在多个连续的窄依赖,会放到一起执行,这种优化方式称为流水线优化

②宽依赖:父分区和子分区是一对多关系,会发生shuffle过程,会发生磁盘I/O。所以Spark框架并不是完全基于内存的,

     也是要依赖于磁盘的。但是已经尽力避免产生shuffle

 

 

技术图片

 

 

 

Stage

 

Spark的Stage(阶段)
Spark在执行任务(job)时,首先会根据依赖关系,将DAG划分为不同的阶段(Stage)。
处理流程是:
1)Spark在执行Transformation类型操作时都不会立即执行,而是懒执行(计算)
2)执行若干步的Transformation类型的操作后,一旦遇到Action类型操作时,才会真正触发执行(计算)
3)执行时,从当前Action方法向前回溯,如果遇到的是窄依赖则应用流水线优化,继续向前找,直到碰到某一个宽依赖
4)因为宽依赖必须要进行shuffle,无法实现优化,所以将这一次段执行过程组装为一个stage
5)再从当前宽依赖开始继续向前找。重复刚才的步骤,从而将这个DAG还分为若干的stage

技术图片

 

 

Stage(阶段) -> 一组Task集合

Task任务对应的是分区,即一个分区就是一个Task,但是要注意:多个连续的窄依赖,会放到一起执行 作为一个Task,宽依赖按照不同的分区

 

以上是关于Spark DAG 依赖关系 Stage的主要内容,如果未能解决你的问题,请参考以下文章

spark stage

Spark宽窄依赖

Spark提交流程

Spark2.4.7源码解读RDD依赖关系

Spark2.4.7源码解读RDD依赖关系

SPARK执行流程