Spark分析之DAGScheduler

DAGScheduler是Spark中面向Stage的调度器,主要职责包括:接收job,根据宽依赖划分Stage,生成TaskSet,决定Task最佳位置,并处理丢失的Shuffle输出。在提交job过程中,DAGScheduler会先将job转换为Stage,然后提交无依赖的Stage,计算并提交Task。Stage分为ShuffleStage和ResultStage,根据依赖关系创建Stage DAG。提交Task时,会根据Partition的locality生成ShuffleMapTask或ResultTask。
摘要由CSDN通过智能技术生成

DAGScheduler概述:是一个面向Stage层面的调度器;

主要入参有:

dagScheduler.runJob(rddcleanedFunc, partitions, callSite, allowLocal,resultHandler, localProperties.get)

rdd: final RDD;

cleanedFunc: 计算每个分区的函数;

resultHander: 结果侦听器;

 

主要功能如下:

1、接收用户提交的job;

2、将job根据类型划分为不同的stage,记录哪些RDD、Stage被物化,并在每一个stage内产生一系列的task,并封装成TaskSet;

3、决定每个Task的最佳位置(任务在数据所在的节点上运行),并结合当前的缓存情况;将TaskSet提交给TaskScheduler;

4、重新提交Shuffle输出丢失的Stage给TaskScheduler;

  注:一个Stage内部的错误不是由shuffle输出丢失造成的,DAGScheduler是不管的,由TaskScheduler负责尝试重新提交task执行;

 

以如下示例描述Job提交过程:

val sc = new SparkContext("local[2]", "WordCount", System.getenv("SPARK_HOME"), Seq(System.getenv("SPARK_TEST_JAR")))
val textFile = sc.textFile("xxx")
val result = textFile.flatMap(line => line.split("\t")).map(word => (word, 1)).reduceByKey(_ + _)
result.collect

RDD.collect

  ==>sc.runJob                  #####至此完成了将RDD提交DAGScheduler#####

    val results = new Array[U](partitions.size) //result存放的是返回值,数组大小为最后一个RDD的partition的个数

    ==>dagScheduler.runJob(rddfuncpartitionsresultHandler......)     //DAGScheduler的输入:RDD and partitions to compute

      ==>dagScheduler.submitJob

        ==>eventProcessActor ! JobSubmitted

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值