YARN中的调度
YARN调度:
YARN应用发出资源请求通过调度器来分配资源。YARN提供了多种调度器和可配置策略。
YARN中三种调度器,⑴FIFO调度器⑵容量调度器⑵公平调度器。
1.FIFO调度器
FIFO调度器将应用放置在一个队列中,然后按照提交的顺序运行应用,为队列中的第一个应用的请求分配资源,第一个应用的请求被满足后再一次为队列中下一个应用服务。
FIFO调度器简单易懂,不需要任何配置,但不适合共享集群。
2.容量调度器
一个独立的专门队列保证小作业提交就可以启动,由于队列容量是为队列中的作业所保留的。容量调度器允许多个组织共享一个Hadoop集群,每个组织可以分配到全部集群资源的一部分,每个组织被配置一个专门的队列,每个队列被配置为可以使用一定的集群资源。队列同时可以进一步层次划分,每个组织内的不同用户能够共享该组织队列所分配的资源,在一个队列内,使用FIFO调度策略来进行调度。
弹性队列
单个作业使用的资源不会超过其队列容量,如果队列中有多个作业,队列资源不够如何?如果有可用的空闲资源,即使会超出队列容量,容量调度器可能会将空余的资源分配给队列中的作业。
队列的层次结构:
则容器调度的配置文件capacity-scheduler.xml中:
<configuration>
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>etc,home</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.etc.queues</name>
<value>conf,network</value>
</propert>
<property>
<name>yarn.scheduler.capacity.root.home.capacity</name>
<value>40</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.etc.capacity</name>
<value>60</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.etc.maximum-capacity</name>
<value>75</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.etc.conf.capacity</name>
<value>50</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.etc.network</name>
<value>-1</value>
</description>
</property>
</configuration>
分析:YARN的队列以层级的方式呈现,上述配置中,有一个队列,root,home,etc,conf,network,
etc队列进一步被划分为conf和network两个容量都为50的队列,同时etc队列的最大容量被设置为75,即即使home队列不占用资源,etc队列也不会占用全部资源。但是其他队列没有最大容量限制,conf,network作业可能占用etc队列的所有容量。
队列的放置:
将应用放置在哪个队列中,取决于应用本身。在MapReduce中,可以通过mapreduce.job.queuename来指定,如果队列不存在,则提交时会发生错误。如果不指定队列,则应用将被放在一个名为“default"的默认队列中。
⑶公平调度器
不需要预留一定量的资源,因为调度器会在所有运行的作业之间动态平衡资源。第一个作业启动时,获得集群中所有的资源,当第二个作业启动时,它被分配集群的一半资源。
参考《Hadoop权威指南》