DAG

任务划分

RDD任务切分中间分为:Application,Job,Stage,Task

Application:初始化一个SparkContext就生成一个Application
Job:一个行动算子生成一个Job
Stage:根据RDD之间的依赖关系的不同将Job划分为不同的Stage,遇到一个宽依赖则划分一个Stage
Task:将Stage划分的结果分发到不同的Excutor执行即为一个Task

Application->Job->Stage->Task每一层都是1对多的关系

DAG

有向无环图,Directed Acyclic Graph的缩写,常用于建模。

 

 

(1)DAG划分:

从后往前回溯,遇到窄依赖加入本stage,遇见宽依赖进行Stage切分。

完成了Stage的划分,DAGScheduler基于每个Stage生成TaskSet,并将TaskSet提交给TaskScheduler

(2)依赖关系

1. 窄依赖 Narrow Dependency

--tasks会归并在同一个stage中,(相同节点上的task运算可以像pipeline一样顺序执行,不同节点并行计算,互不影响)

--分区内的计算收敛,不需要依赖所有分区的数据,可以并行地在不同节点进行计算。

--失败恢复也更有效,因为它只需要重新计算丢失的parent partition即可。

2. 宽依赖 Shffule Dependency

--前后拆分为两个stage,前一个stage写完文件后下一个stage才能开始

--让parent RDD将结果写在本地,完全写完之后,通知后面的RDD。后面的RDD则首先去读之前的本地数据作为input,然后进行运算。

--从失败恢复的角度看,宽依赖牵涉RDD各级的多个parent partition。

 

posted on 2020-09-24 16:38  happygril3  阅读(371)  评论(0)    收藏  举报

导航