概述
Yarn中有三种任务调度器:FIFO调度器(FIFO Scheduler)、容量调度器(Capacity Scheduler)、公平调度器(Fair Scheduler)。
任务调度器介绍
1.FIFO调度器
FIFO调度器将应用放在一个队列里,按照“先进先出”的原则为应用分配资源。
优点:简单易用,不需要任何配置;
缺点:不适合共享集群。大应用占用集群所有资源,所以每个应用只能排队等待,即使是秒级完成的应用,这样不利于集群的合理利用。
2.容量调度器
https://hadoop.apache.org/docs/r2.6.5/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html
可以通过容量调度器配置多个队列,并规定好每个队列的资源占比,应用在每个队列内部再遵循FIFO策略。
正常情况下,每个队列不会抢占其他队列的资源,但当自己队列中资源不能满足应用的需求,而其他队列又有空闲资源。此时,容量调度器会把空闲资源分配给应用,即使已经超过应用所在队列的资源占比。
容量调度器可以固定每个队列的资源占比,使每个队列不会使用超过本队列设置的值,也可以采用如上面所说的类似动态分配原则。这要取决于capacity-scheduler.xml的配置信息。
3.公平调度器
https://hadoop.apache.org/docs/r2.6.5/hadoop-yarn/hadoop-yarn-site/FairScheduler.html
从名称可以看出,公平调度器是为了各应用都能公平分配资源。那公平调度器是如何做到的呢,这里引用《Hadoop权威指南》中的解释:
想象两个用户A和B,分别拥有自己的队列(见下图)。A启动一个作业,在B没有需求时A会分配到全部可用资源;当A的作业仍在运行时B启动一个作业,一段时间后,按照我们先前看到的方式,每个作业都用到了一半的集群资源。这时,如果B启动第二个作业且其他作业仍在运行,那么第二个作业将和B的第一个作业共享资源,因此B的每个作业将占用四分之一的集群资源,而A扔继续占用一半的集群资源。最终的结果就是资源在用户之间实现了公平共享。
总结
FIFO调度器一般不用;
容器调度器是apache版本的默认调度器;
公平调度器是CDH版本的默认调度器;
调度器参数高度灵活可配置,详细可点击以上链接参照官网配置。