首页 理论教育 一个典型的DAG示意图解析

一个典型的DAG示意图解析

时间:2023-06-25 理论教育 版权反馈
【摘要】:图1.6是一个典型的DAG示意图。其中,实线圆角方框标识的是RDD,方框中的矩形块为分区。图1.6 DAG典型示意图这里通过G和F这两个RDD间的依赖关系,描述了如何执行Stage。图1.6中,RDD G对F的依赖为宽依赖,即对应有Shuffle过程,因此对于G这个RDD就会新建一个Stage,这里为Stage 3。DAG的Lineage机制可以从两个方面进行理解:1)RDD之间的数据流图,即RDD的各个分区的数据是从哪来的。

一个典型的DAG示意图解析

Spark将数据在分布式环境下分区,然后将作业转化为DAG,并分阶段进行DAG的调度和任务的分布式并行处理。图1.6是一个典型的DAG示意图

如图1.6所示,描述了DAG调度时会根据Shuffle将Job划分为Stage,比如A到B之间,以及F到G之间的数据需要经过Shuffle过程,因此A和F是Stage的划分点,以及RDD的Lineage关系。其中,实线圆角方框标识的是RDD,方框中的矩形块为分区。

978-7-111-51909-6-Chapter01-8.jpg

图1.6 DAG典型示意图

这里通过G和F这两个RDD间的依赖关系,描述了如何执行Stage。图1.6中,RDD G对F的依赖为宽依赖,即对应有Shuffle过程,因此对于G这个RDD就会新建一个Stage,这里为Stage 3。

RDD的Lineage关系,可以从族谱角度去理解。即描述了RDD是从哪来的,以及怎么来的信息。

RDD G上一个Action的执行将会以宽依赖作为基于为分区来构建各个Stage,对各Stage内部的窄依赖则前后连接构成流水线。在本例中,Stage 1的输出已经存在RAM中,所以直接执行Stage 2,然后Stage 3。

Spark通过Lineage机制实现高容错,基于DAG图,Lineage是轻量级而高效的,操作之间相互具备Lineage的关系,每个操作只关心其父操作,各个分片的数据之间互不影响,出现错误的时候只要恢复单个分片或分区即可。(www.xing528.com)

DAG的Lineage机制可以从两个方面进行理解:

1)RDD之间的数据流图,即RDD的各个分区的数据是从哪来的。

2)基于数据流图之上的操作算子流图,即这些数据传递过来的时候经过了哪些算子的操作。

可以从RDD的抽象概念来解析Lineage的这两个方面的特性:

1)RDD的分区列表(数据块列表)和对父RDD的依赖列表:对应RDD类的getPartitions和getDependencies,这两个方法记录了该RDD的数据来源,以及来源数据如何获取(对应窄依赖和宽依赖)。

其中,RDD各个分区的数据来源可以从外部存储系统或Scala数据集获取,也可以从其他父RDD获取。

2)计算每个分片的函数:对应RDD类的compute方法,该方法记录了该RDD对它各个分区的数据来源进行的计算。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈