此文档描述了 FairScheduler
,
Hadoop 的一个可插入式的调度器,允许 YARN 应用在一个大集群中公平地共享资源。
公平调度是一种分配资源给应用的方法,以致到最后,平均上所有应用获得相等的资源。 Hadoop NextGen 能够调度多种类型的资源。默认的, Fair Scheduler 仅以内存为基础作公平调度决策。可以用Ghodsi 等开发的 Dominant Resource Fairness 概念配置调度内存和CPU。仅有一个应用运行时,这个应用使用整个集群。别的应用提交了之后,空出来的资源就分配给新的应用,以便每个应用最终都能获得大致相等数量的资源。 不像默认的Hadoop 调度器把应用组成一个队列,这个让短的应用在合理的时间内完成,而长时间的应用则不会饥渴(?)。这也是一个合理的方式在多用户中分享一个集群的方式。最后,公平分享可以应用于应用优先级——优先级用于决定每个应用可以得到的资源部分的权重。
调度器进一步会把应用组织到 “队列”中,并在这些队列间公平地分享资源。默认的,所有的用户分享一个叫做“默认”的单独的队列。如果一个应用特别地在一个容器资源请求中列出一个队列,请求就提交给那个队列。也有可能基于通过请求配置用户名字来分配队列。在每个队列中,一个调度政策用来在运行着的应用间共享资源。默认是基于内存的公平调度,但是FIFO和Dominant Resource Fairness的多资源也会被配置。队列会被组织在一个层级中,以指定的比例分享集群分配资源和权重配置。
除了提供公平分享之外,Fair Scheduler 允许分配给队列最小的共享保证,对于确保确定的用户、组或生产应用总能获得充足的资源非常有用。当一个队列包含应用,它至少能获得最小的分享,但是当队列不需要它的全部保证的分享,超过的部分就会在别的运行中的应用中分配。当这些队列不包含应用时,这让调度器保证队列容量同时要有效地使用资源。
Fair Scheduler 让所有的应用默认地运行,但是也有可能通过配置文件限制每个用户和每个队列的运行中的应用的数量。当一个用户必须要立即提交数百个应用,或如果同时运行太多应用还要提升性能,可能导致生成太多的中间数据或太多的上下文切换时,这非常有用。应用限制不会引起任何随后提交的应用失败,只会在调度器队列中等待直到一些用户的之前的应用执行完成。
公平调度器支持层级队列。所有的队列继承自一个叫做“root”的队列。在典型的调度样式中,可用的资源分布在根队列的子队列中。然后,子队列以同样的方式分布资源到他们的子队列中。应用可能只被安排在左队列中。队列会被指定为别的队列的子队列,通过在公平调度器分配文件中把它们放到他们父队列的子元素中。
一个队列的名字以其父队列的名字开始,以周期(?)作为分隔符。所以一个在根队列下的名叫“queue1”的队列,会被写为 "root.queue1", 在一个名叫"parent1"的一个名叫 "queue2" 的队列将会被写为 "root.parent1.queue2"。 当参考(?)队列,根部分是可选的,所以queue1可以仅写为 "queue1", queue2 仅写为 "parent1.queue2".
还有,公平调度器允许为每个队列设置一个自定义的政策,允许用户能以任何他想要的方式使用队列资源。一个自定义的政策可以通过继承 org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.SchedulingPolicy
来创建。
FifoPolicy, FairSharePolicy (默认的), 和 DominantResourceFairnessPolicy 是内置的,随时等待使用。
在原来的(MR1)Fair Scheduler 中的某些附件还没有被支持。在其中,在某些应用中,自定义政策管理优先级“推动”。(?)
要使用 Fair Scheduler ,首先在 yarn-site.xml 分配合适的调度器类:
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
自定义 Fair Scheduler 一般涉及修改两个文件。首先,调度器端选项可以通过在你的现存配置目录中的yarn-site.xml中添加配置属性来设置。其次,大多数情况下,用户会想要创建一个包含队列各自的权重和容量的分配文件列表。分配文件每10秒重载一次,允许动态修改。
yarn.scheduler.fair.allocation.file
yarn.scheduler.fair.user-as-default-queue
yarn.scheduler.fair.preemption
yarn.scheduler.fair.sizebasedweight
yarn.scheduler.fair.assignmultiple
yarn.scheduler.fair.max.assign
yarn.scheduler.fair.locality.threshold.node
yarn.scheduler.fair.locality.threshold.rack
分配文件必须是 XML 格式。这个格式包含五种元素:
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.SchedulingPolicy
.
Defaults to "fair". If "fifo", apps with earlier submit times are given preference for containers, but apps submitted later may run concurrently if there is leftover space on the cluster after satisfying the earlier app‘s requests.下面是分配文件的一个例子:
<?xml version="1.0"?>
<allocations>
<queue name="sample_queue">
<minResources>10000 mb,0vcores</minResources>
<maxResources>90000 mb,0vcores</maxResources>
<maxRunningApps>50</maxRunningApps>
<weight>2.0</weight>
<schedulingPolicy>fair</schedulingPolicy>
<queue name="sample_sub_queue">
<minResources>5000 mb,0vcores</minResources>
</queue>
</queue>
<user name="sample_user">
<maxRunningApps>30</maxRunningApps>
</user>
<userMaxAppsDefault>5</userMaxAppsDefault>
</allocations>
注意,由于对之前的 FairScheduler 的后向兼容, "queue" 元素可以被 "pool" 元素代替.
公平调度器提供了对运行时管理的两种机制的支持:
下面的每个队列的域可以在web界面上查看:
ResourceManager 为正常地展示关于每个应用的额外信息,web 界面包含应用的公平分享。
Hadoop-2.2.0中文文档—— MapReduce 下一代 -- 公平调度器,布布扣,bubuko.com
Hadoop-2.2.0中文文档—— MapReduce 下一代 -- 公平调度器
原文地址:http://blog.csdn.net/laozhaokun/article/details/25478445