1.DAG有向无环图
DAG(Directed Acyclic Graph)有向无环图是由点和线组成的拓扑图形,该图形具有方向,不会闭环。例如,DAG记录了RDD的转换过程和任务的阶段。
2)RDD任务切分中间分为:Application、Job、Stage和Task
(1)Application:初始化一个SparkContext即生成一个Application;
(2)Job:一个Action算子就会生成一个Job;
(3)Stage:Stage等于宽依赖的个数加1;
(4)Task:一个Stage阶段中,最后一个RDD的分区个数就是Task的个数。
注意:Application->Job->Stage->Task每一层都是1对n的关系。
private[scheduler] def handleJobSubmitted(jobId: Int,
finalRDD: RDD[_],
func: (TaskContext, Iterator[_]) => _,
partitions: Array[Int],
callSite: CallSite,
listener: JobListener,
properties: Properties): Unit = {
var finalStage: ResultStage = null
try {
// New stage creation may throw an exception if, for example, jobs are run on a
// HadoopRDD whose underlying HDFS files have been deleted.
finalStage = createResultStage(finalRDD, func, partitions, jobId, callSite)
} catch {
case e: BarrierJobSlotsNum

本文详细介绍了Spark中的DAG有向无环图在任务执行中的作用,以及RDD任务的切分过程,包括Application、Job、Stage和Task之间的层级关系。在Spark中,每个Action操作会触发一个Job,而Stage根据宽依赖进行划分,Task数量由最后一个RDD的分区决定。同时,通过getOrCreateParentStages和getMissingAncestorShuffleDependencies等方法,构建和查找RDD的血缘关系,确保任务正确执行。
最低0.47元/天 解锁文章
737





