spark学习-51-Spark的task任务的运行
来源:互联网 发布:淘宝上的电动车怎么样 编辑:程序博客网 时间:2024/06/07 05:30
1。看完Spark的job调度http://blog.csdn.net/qq_21383435/article/details/78700430后再来看这个
2。在DAGScheduler.scala中,最后调用
// TODO:最后所有的Stage都转换为TaskSet任务集去提交,最后开始执行任务 // 这里调用的是TaskScheduler的接口方法submitTasks()提交一系列要运行的任务。所以要看其实现类TaskSchedulerImpl。 // 调用了里面的方法submitTasks taskScheduler.submitTasks(new TaskSet( tasks.toArray, stage.id, stage.latestInfo.attemptId, jobId, properties))
提交任务,该任务这里调用的是TaskScheduler的接口方法submitTasks()提交一系列要运行的任务。所以要看其实现类TaskSchedulerImpl。调用了里面的方法submitTasks
先看一下整体流程
然后看看该方法
/** * submitTasks位于TaskSchedulerImpl: * submitTasks主要分为以下几个步骤: * 1.构建任务集管理器。既将TaskScheduler,TaskSet及最大失败次数(maxTaskFailures)封装为TaskSetManager. * 2.设置任务集调度策略(调度模式有FAIR和FIFO两种,此处默认为FIFO为例)。将TaskSetManager添加到FIFOSchedulable中。 * 3.资源分配。调用LocalBackend的reviveOffers方法,实际向localActor发送ReviveOffers消息。localActor对ReviveOffers消息的匹配 * 执行reviveOffers方法。 */ override def submitTasks(taskSet: TaskSet) { val tasks = taskSet.tasks logInfo("Adding task set " + taskSet.id + " with " + tasks.length + " tasks") this.synchronized { // 生成一个TaskSetManager类型对象, // task最大重试次数,由参数spark.task.maxFailures设置,默认为4 val manager = createTaskSetManager(taskSet, maxTaskFailures) val stage = taskSet.stageId // key为stageId,value为一个HashMap,这个HashMap中的key为stageAttemptId,value为TaskSetManager对象 val stageTaskSets = taskSetsByStageIdAndAttempt.getOrElseUpdate(stage, new HashMap[Int, TaskSetManager]) stageTaskSets(taskSet.stageAttemptId) = manager // 如果当前这个stageId对应的HashMap[Int, TaskSetManager]中存在某个taskSet // 使得当前的taskSet和这个taskSet不是同一个,并且当前这个TaskSetManager不是zombie进程 // 即对于同一个stageId,如果当前这个TaskSetManager不是zombie进程,即其中的tasks需要运行, // 并且对当前stageId,有两个不同的taskSet在运行 // 那么就应该抛出异常,确保同一个Stage在正常运行情况下不能有两个taskSet在运行 val conflictingTaskSet = stageTaskSets.exists { case (_, ts) => ts.taskSet != taskSet && !ts.isZombie } if (conflictingTaskSet) { throw new IllegalStateException(s"more than one active taskSet for stage $stage:" + s" ${stageTaskSets.toSeq.map{_._2.taskSet.id}.mkString(",")}") } //添加到资源池,task的调度下一节讲解 // 根据调度模式生成FIFOSchedulableBuilder或者FairSchedulableBuilder,将当前的TaskSetManager提交到调度池中 schedulableBuilder.addTaskSetManager(manager, manager.taskSet.properties) if (!isLocal && !hasReceivedTask) { starvationTimer.scheduleAtFixedRate(new TimerTask() { override def run() { if (!hasLaunchedTask) { logWarning("Initial job has not accepted any resources; " + "check your cluster UI to ensure that workers are registered " + "and have sufficient resources") } else { this.cancel() } } }, STARVATION_TIMEOUT_MS, STARVATION_TIMEOUT_MS) } hasReceivedTask = true } //通过CoarseGrainedSchedulerBackend将task发往各个work节点的CoarseGrainedExecutorBackend进程 // 向schedulerBackend申请资源 backend.reviveOffers() }
阅读全文
0 0
- spark学习-51-Spark的task任务的运行
- spark源码学习(七);task任务的提交分析
- spark学习四 RDD转换是什么以及任务的运行
- Spark的任务调度学习
- spark源码学习(八):spark具体是如何使用集群的资源去运行任务
- Spark源码阅读笔记:Spark的Task
- spark学习-52-Spark的org.apache.spark.SparkException: Task not serializable
- spark core源码分析10 Task的运行
- Spark集群Job,Task 的具体运行原理
- spark core 1.6.0 源码分析10 Task的运行
- spark接收kafka的数据运行spark程序节点的task数据倾斜
- spark接收kafka的数据运行spark程序节点的task数据倾斜
- Spark的任务调度
- Spark任务的提交
- spark task 任务状态管理
- spark源码学习(六)--- DAGScheduler中的task的划分
- Spark的运行模式
- Spark的运行模式
- 轻量级微服务架构及最佳实践
- (easyUI)鼠标停留显示文字
- Linux_2 工具&进程
- 1042. 字符统计(20)
- 阿了嗝欢的小白日记——No session异常的发生原因和解决方案
- spark学习-51-Spark的task任务的运行
- Java SE学习(一)之Java简介与Java开发环境配置
- jsp内置对象之out对象常用方法
- TCP传输
- Zookeeper是什么
- 23 H5的spi控制器驱动
- 堆和栈的区别
- Leetcode198.+算法期中1005. 动态规划问题之最大最小和问题
- Python库介绍