YARN中的容量调度程序
这篇文章讨论了YARN中的Capacity Scheduler,这是Hadoop框架中提供的可插拔调度程序。容量调度程序通过将整体群集的一定容量分配给共享群集的每个组织来改善共享群集的多租户。
容量调度程序概述
与其为组织需求设置独立集群,不如在组织之间共享集群具有更大的商业意义,因为这样做比不单独运行大型Hadoop安装更具成本效益。
共享集群带来恐惧。当我们需要执行一项大工作时,或者其他组织将耗尽所有资源时,我们将获得所需的资源吗?这就是YARN中的Capacity Scheduler通过保证每个组织的容量来提供帮助的地方。
YARN中的容量调度程序如何工作
在CapacityScheduler中,每个组织都会获得自己的队列,并为其队列配置一部分集群容量。
CapacityScheduler支持分层队列,这意味着组织可以在其专用队列中创建子队列。分配给队列的集群资源部分可以进一步在子队列之间划分。
另外一个好处是,只有在其他人没有使用过多的可用容量的情况下,组织才能超过其队列容量并使用比分配给它的群集资源更多的群集资源。这以成本有效的方式为组织提供了弹性。
CapacityScheduler中的安全性
在共享群集中,安全性非常重要。对于每个队列,都有一个访问控制列表(ACL),用于控制哪些用户可以将应用程序提交到各个队列。
还确保了用户不能查看和/或者修改其他队列中其他用户的应用程序。此外,还支持按队列和系统管理员角色。
YARN CapacityScheduler的配置
要将ResourceManager配置为使用CapacityScheduler,请在conf / yarn-site.xml中设置以下属性:
<property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> </property>
设置队列
设置队列的属性如下。这些更改是在配置文件etc / hadoop / capacity-scheduler.xml中完成的。请注意,CapacityScheduler有一个预定义的队列,称为root。系统中的所有队列都是根队列的子级。
要设置其他队列– yarn.scheduler.capacity.root.queues
我们需要提供一个逗号分隔的子队列列表。
设置子队列– yarn.scheduler.capacity。<queue-path> .queues
用于配置队列容量yarn.scheduler.capacity。<queue-path> .capacity
队列容量(百分比)。每个级别上所有队列的容量总和必须等于100。
最大队列容量yarn.scheduler.capacity。<queue-path> .maximum-capacity
最大队列容量,以百分比为单位。这限制了队列中应用程序的弹性。默认值为-1,将其禁用。
例如-如果有两个顶级子队列销售和财务。在销售队列中,有两个子队列apac和emea。
<property> <name>yarn.scheduler.capacity.root.queues</name> <value>sales, finance</value> </property> <property> <name>yarn.scheduler.capacity.root.sales.queues</name> <value>apac,emea</value> </property>
如果要将队列容量的70%分配给销售,将30%的分配给融资。
<property> <name>yarn.scheduler.capacity.root.sales.capacity</name> <value>70</value> </property> <property> <name>yarn.scheduler.capacity.root.finance.capacity</name> <value>30</value> </property>
对于要在销售队列中使用的两个子队列,如果要为apac分配65%,为emea分配35%。
<property> <name>yarn.scheduler.capacity.root.sales.apac.capacity</name> <value>65</value> </property> <property> <name>yarn.scheduler.capacity.root.sales.emea.capacity</name> <value>35</value> </property>
如果我们想限制销售的弹性,并且即使资源可用,也要确保销售队列使用的群集资源不超过80%。
<property> <name>yarn.scheduler.capacity.root.sales.maximum-capacity</name> <value>80</value> </property>