Yarn 中的调度策略剖析

YARN中的调度策略分为三种,FIFO调度器(FIFO Scheduler),容量调度器(Capacity Scheduler)和公平调度器(Fair Scheduler)。

YARN Resource Manager 默认的资源调度策略为容量调度器(Capacity Scheduler) 见yarn-default.xml

name value description
yarn.resourcemanager.scheduler.class org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler The class to use as the resource scheduler.

下面分别对三种调度策略做一个学习笔记:

No.1 FIFO Scheduler
FIFO调度器将应用放置在一个队列中,然后按照提交的顺序(先进先出)运行应用。首先为队列中的第一个应用的请求分配资源,第一个应用的请求被满足后,再依次为队列中下一个应用服务。
FIFO调度器的优点是,简单易懂,不需要任何配置,但是不适合共享集群。大的应用会占用集群中的所有资源,所以每个应用必须等待直到轮到自己运行。

但是在一个共享集群中,更适合使用容量调度器或公平调度器。这两种调度器都允许长时间运行的作业能及时完成,同时也允许正在进行较小临时查询的用户能够在合理时间内得到返回结果。

No.2 Capacity Scheduler
容量调度器允许多个组织共享一个Hadoop集群,每个组织可以分配到全部集群资源的一部分。每个组织被配置一个专门的队列,每个队列被配置为可以使用一定的集群资源。队列可以进一步按层次划分,这样每个组织内的不同用户能够共享该组织队列中所分配的资源。在一个队列内,使用FIFO调度策略对应用进行调度。

使用容量调度时,一个独立的专门队列保证小作业一提交就可以启动,由于队列容量是为那个队列中的作业所保留的,因此这种策略是以整个集群的利用率为代价的。这意味着与使用FIFO调度器相比,大作业执行时间要长。

No.3 Fair Scheduler
公平调度器旨在为所有运行的应用公平分配资源。对于每个用户公平分配资源(fair share pool/queue)。通过一个例子来说明该调度策略:当只有一个用户A提交作业时,相当于该作业会被分配到集群的全部可用资源;当A的作业仍在运行时B用户启动一个作业,一段时间后,每个作业都用到了一半的集群资源。这时,如果B启动第二个作业且其他作业仍在运行,那么第二个作业将和B的其他作业(这里是第一个)共享资源,因此B的每个作业将占用四分之一的集群资源,而A仍继续占用一半的集群资源。最终的结果就是资源在用户之间实现了公平共享。

你可能感兴趣的:(【大数据】➣,Hadoop,【大数据】➣,Yarn)