CC00094.spark——|Hadoop&Spark.V10|——|Spark.v10|Spark 原理 源码|作业执行原理&调度策略|

本文详细介绍了Spark的作业执行原理,重点讲解了TaskScheduler的调度策略,包括默认的FIFO策略和公平调度的FAIR策略。在FIFO策略中,任务按照到达顺序执行,而在FAIR策略中,任务根据runningTasks、minShare和weight进行公平排序,确保资源的均衡分配。FAIR策略允许用户通过配置文件fairscheduler.xml定制调度池,实现更灵活的作业调度。
摘要由CSDN通过智能技术生成
一、作业执行原理
### --- 调度策略

~~~     TaskScheduler会先把 DAGScheduler 给过来的 TaskSet 封装成 TaskSetManager 扔到任务队列里,
~~~     然后再从任务队列里按照一定规则把它们取出来,由 SchedulerBackend 发送给Executor运行;
### --- TaskScheduler

~~~     TaskScheduler 以树的方式来管理任务队列,树中的节点类型为 Schedulable,
~~~     叶子节点为TaskSetManager,非叶子节点为Pool:
~~~     TaskScheduler 支持两种调度策略:FIFO(默认调度策略)、FAIR。
二、作业执行原理
### --- FIFO 调度策略

~~~     FIFO调度策略,TaskSetManager 按照到来的先后次序进入队列;
~~~     出队时直接拿最先进入队列的 TaskSetManager。
~~~     FIFO调度策略是默认模式,在此模式下,只有一个 TaskSetManager 池。
### --- Fair 调度策略

~~~     Fair 模式中有一个 rootPool 和多个子 Pool,各个子 Pool 中存储着所有待分配的 TaskSetManager ;
~~~     在 Fair 模式中,需要先对子 Pool 进行排序,
~~~     再对子 Pool 里面的 TaskSetManager 进行排序,因为Pool和
~~~     TaskSetManager 都继承了 Schedulable trait,因此可使用相同的排序算法;
### --- 每个要排序的对象包含三个属性:

~~~     runningTasks值(正在运行的Task数)
~~~     minShare值(时间)
~~~     weight值(权重)
~~~     比较时会综合考量 runningTasks 值,minShare 值以及 weight 值。
~~~     备注:minShare、weight的值在配置文件 fairscheduler.xml 中被指定。
~~~     调度池在构建阶段会先读取 fairscheduler.xml ($SPARK_HOME/conf)文件的相关配置,
### --- 然后进行比较:

~~~     如果A对象的 runningTasks > minShare,B对象的 runningTasks < minShare,
~~~     那么B排在A前面;(runningTasks比minShare小的先执行)
~~~     如果A、B对象的 runningTasks < minShare,
~~~     么就比较 runningTasks 与 minShare 的比值,谁小谁排前面;(使用率低的先执行)
~~~     如果A、B对象的 runningTasks > minShare,
~~~     那么就比较runningTasks与weight的比值(权重使用率),谁小谁排前面。(权重使用率低的先执行)
~~~     如果上述比较均相等,则比较名字
~~~     整体上来说就是通过 minShare 和 weight 这两个参数控制比较过程,
~~~     做到让 minShare 使用率和权重使用率少(实际运行task比例较少)的先运行。
~~~     FAIR模式排序完成后,所有的 TaskSetManager 被放入一个 ArrayBuffer 里,
~~~     之后依次被取出并发送给 Executor执行。
~~~     从调度队列中拿到 TaskSetManager 后,由于 TaskSetManager 封装了一个 Stage 的所有 Task,
~~~     并负责管理调度这些 Task,
~~~     那么接下来的工作就是 TaskSetManager 按照一定的规则一个个取出 Task 
~~~     给 TaskScheduler,TaskScheduler 再交给 SchedulerBackend ,最终分发到Executor上执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yanqi_vip

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

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

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

打赏作者

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

抵扣说明:

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

余额充值