Yarn主导资源公平性调度算法

0. 背景

         这本是一个比较冷门的知识点,只是因为在看《Hadoop权威指南 第4版》的时候,对以下内容有点疑问,查了算法的出处《Dominant Resource Fairness: Fair Allocation of Multiple Resource Types》这篇论文,发现这里其实是写错了,或者可能是翻译的问题。

1. Yarn的三种调度器

        Yarn中有三种资源调度器:FIFO调度器(FIFO Scheduler)、容量调度器(Capacity Scheduler)、公平调度器(Fair Scheduler)。

1.1 FIFO调度器

        简介:顾名思义,FIFO调度器把应用放在队列里,按照先进先出的提交顺序执行应用。

        优点:简单,不需要额外配置。

        缺点:不适合共享集群。大应用会占满整个集群的资源,导致小应用长时间等待。

1.2 容量调度器

         简介:容量调度器设有一个专门的队列给小作业使用。

        优点:大作业不会占满全部资源,小作业不需要长时间等待大作业完成。

        缺点:整个集群的资源利用率降低了,大作业需要更长的时间来执行。

        

 1.3 公平调度器

        简介:公平调度器旨在为所有运行的应用公平地分配资源。

        优点:同时解决了FIFO大作业占满整个集群资源的问题和Capacity小作业队列空闲导致集群资源利用率降低的问题。

        缺点:存在延迟问题,后面的作业需要等待前面的作业让出资源。

        

 

 2. 公平调度器中的队列级别调度策略

        前文简要介绍了Yarn三种调度器,其中公平调度器不仅支持一个队列中的资源公平调度,也能完成多个队列的资源公平共享,如用户队列间的公平共享。

        公平调度器中的队列级别调度策略有三种:公平策略(默认)、FIFO策略、drf策略(Dominant Resource Fairness)。drf策略也正是本文探讨的重点。

        

3. 主导资源公平性策略

        对于单一类型资源,如内存的调度,这种情况相对简单。但是有多种类型资源需要调度时,事情就会变得复杂。如应用A对CPU的需求很大而内存需求很小,应用B对内存的需求很大而CPU的需求很小,如何实现资源的公平分配呢?《Dominant Resource Fairness: Fair Allocation of Multiple Resource Types》提出了主导资源公平性策略(Dominant Resource Fairness),简称drf。

        我们先通过论文中的例子对drf有个初步了解。假设集群中共有9个CPU和18GB内存。用户A请求的每份容器资源是<1CPU,4GB>,用户B请求的每份容器资源是<3CPU,1GB>。A的一个容器占整个集群1/9的CPU,2/9的内存,所以A的主导资源是内存。B的一个容器占整个集群1/3的CPU,1/18的内存,所以B的主导资源的CPU。

        设A最多能请求的容器数为x,B最多能请求的容器数为y,论文中给出了一下不等式实现主导资源公平算法。主要看第三个式子,表示的是主导资源在集群中的占比。

         这个算法其实很简单。我们尝试画图来理解。

         可以看到,最终整个集群的CPU被完全利用,而内存仍有剩余。算法实现如下:

4. 《Hadoop权威指南》示例中drf的正确解法

         所以,最终B将分到整个集群2/3的容器数,A将分到1/3的容器数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值