YARN 调度器
YARN 调度器
1、FIFO(先进先出调度器)
单队列,任务独占所有资源,先进先出;
优点:简单不需配置;
缺点:大集群中大小任务都会阻塞;
2、Capacity(容量调度器)
多队列(单队列FIFO),支持配额,弹性队列,延迟调度(等待别的队列容器释放而非抢占)
优点:相比FIFO更适用于集群
缺点:单个队列仍是FIFO
3、Fair(公平调度器)
多队列(单队列 Fair/FIFO/DRF),支持配额,弹性队列,延迟调度,支持抢占
优点:单队列默认Fair,任务动态公平分配
缺点:相对其他调度器复杂
3.1、Fair Share说明
Instantaneous Fair Share:瞬时公平分配
Steady Fair Share:固定公平分配
steady fair share,是一个静态值,是Yarn根据每个队列的minShare、maxShare和weight的配置计算得到的理论上应该分配给这个队列的最大资源,它与这个队列当前是否有app正在运行无关,只和我们在fair-scheduler.xml中的配置有关。
Instaneous fair share则不同,它是根据当前集群中队列的运行状态的变化而实时变化的,即,如果一个队列上没有任何一个app在运行,即这个队列是inactive队列,那么,这个队列的instaneous fair share值是0,剩余的active队列会对集群资源进行瓜分,显然,如果集群中有队列从active变为inactive,那么剩余这些队列瓜分到的instaneous fair shared都会随之变大,反之,如果有一个队列从inactive变为active,则剩余每个队列的instaneous fair share会随之变小,即instaneous fair share会变小。
3.2、Fair Share资源计算
FairShare和SteadyFairShare的计算思想为: 先找到一个比值R,则各个队列应分配的资源分为如下三种情况:
当队列S的minShare > R*weight,则分配minShare
当队列S的maxShare < R*weight,则分配maxShare
其它情况直接分配R*weight 这些分配的总和等于totalSlots。这个比值R也称为weight-to-slots,因为其值将队列的weight转换为实际的资源个数。
简单评估队列分配资源值:
Steady FairShare的计算公式是
totalResources(集群总资源)/weights(所有队列的weight总和)*weight(某个队列的weight)
FairShare的计算公式是
totalResources(集群总资源)/activeWeights(active队列的weight总和)*activeWeight(active队列的weight)
更具体的计算方法见参考
4、调度器选择
大部分情况下公平调度+多队列适合绝大部分场景(资源限额+动态分配),如果只是简单测试使用不用配置,默认的FIFO就满足。
5、其他问题
待补充