Yarn资源调度策略

Yarn资源调度策略
DiffDay开宗明义
YARN 资源调度器是直接从MR基础上修改而来,它提供了三种可用资源调度器,分别是
-
FIFO Scheduler
-
Yahoo!的Capacity Scheduler
-
Fackbook 的 Fair Scheduler
原理和细节基本上与MR的三种调度器一致。都是层级队列方式组织资源的
如此这般,符合公司或部门组织架构,有利于资源在不同资源间分配和共享,进而提高集群资源利用率
调度器详解
FIFO Scheduler
Hadoop设计之初提供的一个最简单的调度机制: 即先来先服务。所有应用程序被统一提交到一个队里中,Hadoop按照提交顺序依次运行这些作业。只有等先来的应用程序资源满足后,再开始为下一个应用程序进行调度运行和分配资源。
优点:原理和实现简单,也不需要任何单独的配置
缺点:
- 无法提供QoS,只能对所有的任务按照同一优先级处理
- 无法适应多租户资源管理。先来的大应用程序把集群资源占满,导致其他用户的程序无法得到及时执行
- 应用程序并发运行程度低
Capacity Scheduler
Yahoo!开发的多用户调度器,以队列为单位划分资源,配置文件为conf/capacity-scheduler.xml
- 每个队列可设定一定比例的资源最低保证和使用上限
- 每个用户也可设置一定的资源使用上限,以防资源滥用
- 支持资源共享,将队列剩余资源共享给其他队列使用
容量保证
管理员为每个队列设置资源最低保证(capacity)和资源使用上限(maximum-capacity,默认100%)
所有提交到该队列的应用程序共享这个队列中的资源
弹性调度
队列中的资源有剩余或者空闲,可以暂时共享给那些需要资源的队列+非强制回收。提高系统资源利用率。(当队列有执行空间)
多租户管理
支持多用户共享集群资源和多应用程序同时运行。且可对每个用户可使用资源量(user-limit-factor)设置上限
安全隔离
每个队列设置严格的ACL列表(acl_submit_applications),用以限制可以用户或者用户组可以在该队列提交应用程序,实现计算资源隔离
Fair Scheduler
Facebook开发的多用户调度器,公平不仅可以在队列中的应用体现,也可以在多个队列之间工作。
举个栗子
两个用户A和B,各拥有一个队列,都设置容量最小为集群的一半,最大为全部集群资源。当A启动一个job而B没有任务时,A会获得全部集群资源;当B启动一个job后,A的job会继续运行,不过一会儿之后两个任务会各自获得一半的集群资源。
此时B再启动第二个job并且其它job还在运行,则它将会和B的第一个job共享B这个队列的资源,也就是B的两个job会用于四分之一的集群资源。而A的job仍然用于集群一半的资源,结果就是资源最终在两个用户之间平等的共享。
与Capacity Scheduler不同之处
支持资源抢占
队列空闲资源被共享给其他队列后,如果再提交用户程序,需要计算资源,调度器需要为它回收资源。
为了尽可能降低不必要的计算浪费,调度器采用了先等待再强制回收的策略。如果等待一段时间后尚有未归还的资源,则会进行资源抢占:从超额使用资源的队列中杀死一部分任务,进而释放资源。
自定义负载均衡
在Fair Scheduler尽可能把任务均匀分配到各个节点之外,你也可以根据自己的需求设计负载均衡机制
资源公平共享
Fair策略是一种基于最大最小公平算法(内存资源使用率比率)实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源。
有一个权重属性(这个权重就是对公平的定义),并把这个属性作为公平调度的依据。当调度器分配集群40:60资源给两个队列A和B时便视作公平(40和60分别替换成2和3,效果也是一样的)。如果队列没有设置权重则会被平均分配。
与此同时,每个队列可单独设置调度策略(FIFO、Fair或DRF)
默认调度算法的考量因子是memory,但是也可以也可以设置DRF(Dominant Resource Fairness),会考虑mem和vcore的资源