Spark2.2 TaskScheduler原理剖析与源码分析

本文深入剖析Spark TaskScheduler的角色和功能,详细讲解Task提交的入口submitTasks以及CoarseGrainedSchedulerBackend的reviveOffers方法。重点分析task分配算法,包括本地化级别的分类,如PROCESS_LOCAL、NODE_LOCAL等,以及如何根据这些级别进行负载均衡的task调度。最后,解释了如何序列化task信息并将其发送给executor启动执行。
摘要由CSDN通过智能技术生成

TaskScheduler的作用

TaskScheduler的主要作用是把TaskSet中的每一个task提交到executor上去执行;
其中最主要的就是task的分配算法。


TaskScheduler源码分析

TaskScheduler 提交tasks的入口 submitTasks

  • 为每一个taskSet创建一个taskSetManager
  • 调用CoarseGrainedSchedulerBackend 的 reviveOffers()方法进行task分配
  /**
   * TaskScheduler 提交程序的入口
   */
  override def submitTasks(taskSet: TaskSet) {
    val tasks = taskSet.tasks
    logInfo("Adding task set " + taskSet.id + " with " + tasks.length + " tasks")
    this.synchronized {

      /**
       * leen
       * 为每一个taskSet创建一个taskSetManager
       * taskSetManager实际上,会负责它的TaskSet执行状况的监视与管理
       * 当tasks失败的时候重试task,(直到超过重试次数限制)
       */
      val manager = createTaskSetManager(taskSet, maxTaskFailures)

      val stage = taskSet.stageId
      val stageTaskSets =
        taskSetsByStageIdAndAttempt.getOrElseUpdate(stage, new HashMap[Int, TaskSetManager])
      stageTaskSets(taskSet.stageAttemptId) = manager
      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(",")}")
      }
      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 t
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生命不息丶折腾不止

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值