yarn fair scheduler 之公平排序算法

来源:互联网 发布:淘宝宝贝上架软件 编辑:程序博客网 时间:2024/04/29 04:18
这篇文章主要分析公平调度器的公平排序算法,基于hadoop-2.3.0-cdh5.0.0

首先,了解这几个概念:
  • 资源需求量:当前队列或者应用希望获得的资源的总量。
  • 最小份额:队列的最小共享量在配置中指定。应用的最小共享量为0。
  • 资源使用量:当前队列或者应用已经分配到的总资源。
  • 权值:队列的权重值在配置中指定。在开启sizebasedweight特性的情况下,应用的权重=(log2(资源需求量))*优先级*调整因子。优先级当前都是1,当应用运行超过5分钟,调整因子为3。

排序只需了解对于两个比较体的比较算法,然后对返回值升序排序。这里的比较体是队列或应用。
不说什么比较体,暂且称为队列吧,当然这个算法同样应用与队列内部应用的排序。

  • 首先,计算两个队列各自的资源使用量 < min(资源需求量,最小份额),即是否饥饿。
  • 然后,饥饿的队列优先。
  • 对于两者都饥饿的情况下,需要计算资源分配比,结果小者优先。资源分配比=资源使用量/min(资源需求量,最小份额, 1)
  • 当都不饥饿时,需要计算资源使用权值比,结果小者优先。资源使用权重比=资源使用量/权值
  • 如果资源分配比或权值比相等,先提交的优先。
公平排序算法决定的是谁可以先获得资源,在资源需求量一致的情况下,最小份额越大且资源使用量较小有较高的优先级来获得资源,保证不长时间处于饿死状态。注意权值是在两者都不饥饿的前提下起作用,即两个队列的资源使用量 >= min(资源需求量,最小份额).

下面看看相关代码吧
队列内部的应用排序算法默认采用fair排序,即与队列的排序相同。

可以看出,前面可配置的几个参数中(最小份额和权值,其它的在运行过程中都是可变的),对排序结果影响的顺序是先最小份额,再权值。这些参数是配合着使用,还是只保留一个变量原则,还需要看应用的场景。
比如,你需要的是保证相对的公平,追求地位平等,当然也可以把他们的配置都做成一样的。但是这样却没有考虑到运行时的一些因素,如集群繁忙情况、每个队列的资源使用量以及需求量等都是可变因素。所以,最好是最小份额和权值配合着使用,可以遵循“谁愿意共享得越多,就可以获得更多的资源”的原则,即最小份额与权值成反比。
另外一种情况,你需要有一个等级分明、两级分化的环境,那就有人说了,怎么不直接用另一个调度器 Capacity Scheduler ?当然如果你不考虑它配置的苛刻“所有队列的容量之和应小于100”,它是可以满足的。而公平调度没有这个限制,无论多么不合理的配置都能够处理。好吧,说正题,这时最好统一最小份额配置,通过调节权值来体现两极分化(涉及到另外一个公平份额算法)。

参考资料:
  1. YARN ResourceManager调度器的分析
  2. Hadoop MapReduce Next Generation - Fair Scheduler
0 0
原创粉丝点击