YARN 调度器

YARN 调度器


1、FIFO(先进先出调度器)

单队列,任务独占所有资源,先进先出;

优点:简单不需配置;

缺点:大集群中大小任务都会阻塞;

 YARN 调度器


2、Capacity(容量调度器)

多队列(单队列FIFO),支持配额,弹性队列,延迟调度(等待别的队列容器释放而非抢占)

优点:相比FIFO更适用于集群

缺点:单个队列仍是FIFO

 YARN 调度器


3、Fair(公平调度器)

多队列(单队列 Fair/FIFO/DRF),支持配额,弹性队列,延迟调度,支持抢占

优点:单队列默认Fair,任务动态公平分配

缺点:相对其他调度器复杂

 YARN 调度器

 YARN 调度器

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、其他问题

待补充


6、参考

YARN源码分析之Fair Scheduler part1

Hadoop Yarn调度器的选择和使用

Yarn FairSheduler使用FairSharePolicy计算Fair Share的规则、原理和代码实现