前言
在YARN早期的队列分配策略中,系统采用的是相对直接简单的办法:按照相对使用率选择。简单地来说,就是选择相对使用率最低的队列,然后把应用提交那个队列上。但是这种简单直接的做法,有的时候也会暴露出它的弊端。本文笔者来聊聊这个话题以及对应的一个优化分配策略。
按相对使用率分配的弊端
在旧的分配策略中,也就是按照队列使用率来分配的策略中,会有什么弊端呢?表面上来看,这种策略十分合理啊。其实呢,这里最大的一个问题是会导致资源碎片的问题。资源碎片的产生,就不利于大任务资源块的分配。下面通过一个例子,来具体描述一下这个问题。
假设现在我们有2个队列Service(重要任务)队列和Batch(短时间批任务)队列,3个节点,每个节点内存100GB,总共100GB*3=300GB资源,Service队列资源配比集群资源的2/3,Batch则为1/3。
假设此时两个队列资源使用情况已如下图所示
然后Service队列还有一个90G的资源请求,而Batch队列还有一个20G的资源请求。那么问题来了,谁会有机会使用Node2资源呢?按照常理,我们想,应该是90G的资源请求,这样使用率会更高一些。
答案其实不是这样的,按照相对使用率算法,Service队列使用率90/2