|NO.Z.00094|——————————|BigDataEnd|——|Hadoop&Spark.V10|——|Spark.v10|Spark 原理 源码|作业执行原理&调度策略|
一、作业执行原理
### --- 调度策略
~~~ 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上执行。
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv018-spark.v03
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」