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) 收藏 举报
浙公网安备 33010602011771号