美文网首页
《Spark技术内幕》读书笔记——TaskScheduler模块

《Spark技术内幕》读书笔记——TaskScheduler模块

作者: 抬头挺胸才算活着 | 来源:发表于2022-01-03 20:10 被阅读0次
    • TaskScheduler和SchedulerBackend
      SchedulerBackend主要负责通信
      TaskScheduler主要负责调度Tasks

    TaskScheduler负责不同的Job之间的调度,在Task执行失败时启动重试机制,并且为执行慢的Task启动备份的任务,
    SchedulerBackend负责与Cluster Manger交互,取得该Application分配到的资源,并且将这些资源传给TaskScheduler,由TaskSchduler为Task最终分配计算资源

    • 调用栈
      从前一篇文章我们讲到DAGScheduler将Stage提交给TaskScheduler。



      调用栈1:TaskScheduler将一个阶段的没有完成的分区对应的任务封装为TaskSet,再封装为TaskSetManager。

    TaskSetManager会根据数据的就近原则为Task分配计算资源,监控Task的执行状态并采取必要的措施,比如失败重试,慢任务的推测性执行。


    TaskSetManger放到TaskPool



    调用栈2的SchedulableBuilder是Application级别的调度器,调度策略可能是FIFO或者FAIR。SchedulableBuilder确定TaskSetManager的调度顺序,TaskSetManager会根据就近原则确定Task运行在哪个Executor上。
    调用栈6任务序列化后发送给Executor
    Executor运行任务


    • 整体


    • 本地化级别
      进程本地化:数据和计算在同一个进程中,共享共同的内存
      节点本地化:同一个节点
      机架本地化:同一个机架
      任意
      Task如果没有最高的本地化级别,那么会先等待一段时间,然后再看有没有,没有的话继续降级,这样可以提高总体的运行性能。

    • 失败重试与黑名单
      失败时候的消息传递路径:
      Executor -> SchedulerBackend -> TaskScheduler -> TaskSetManager。TaskSetManager会记录失败的任务次数,没有超过最大重试次数,将其放回调度的Task池子,否则整个Application失败。
      黑名单记录了上次失败的节点,然后下次这个失败的任务就不能继续往这个节点提交了。

    • ShuffleMapTask和ResultTask
      ShuffleMapTask根据Task的partitioner将计算结果放到不同的bucket中,而ResultTask将计算结果发送回Driver Application。

    相关文章

      网友评论

          本文标题:《Spark技术内幕》读书笔记——TaskScheduler模块

          本文链接:https://www.haomeiwen.com/subject/ghpaqrtx.html