[关闭]
@changedi 2017-08-31T05:19:30.000000Z 字数 6072 阅读 3324

YARN-Capacity Scheduler

大数据 YARN



原文:http://hadoop.apache.org/docs/r2.6.4/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html

概览

CapacityScheduler被设计用来以一种操作友好的并且最大化吞吐和集群利用率的方式调度一个共享的、多租户集群从而可以支持运行Hadoop应用程序。

传统情况下,每个组织都有自己的私有计算资源组,其可以保证有效容量能满足组织业务的SLA,即便在峰值或接近峰值的情况下也足够。但这通常会导致很差的平均资源利用率以及很大的集群管理开销,一般每个组织需要一个集群。组织间共享集群是一种降低成本的有效手段,尤其是运行大型的Hadoop程序,因为这使他们获得不需要创建私有集群而带来成本降低。然而组织间也会关注如何共享一个集群,因为它们会担心其它人占用资源而影响了自己的SLA。

CapacityScheduler被设计来允许多组织共享一个集群同时给每个组织足够的容量保障。其核心思想是Hadoop集群的可用资源被多个组织共享,其分配的资源量由其在集群中的计算需求而决定。一个额外的好处是一个组织可以使用没有被他人占用的超过自己容量限制的额外资源。这为组织的成本考量提供了弹性。

跨组织的集群共享,必须要确保能支持多租户。因为每个组织必须要保证有容量和安全保障来确保共享集群不被单一的程序、用户或其他东西影响。CapacityScheduler提供了一组严格的限制来确保单一程序或用户或队列不会不适当地消费集群中的资源。同样的,CapacityScheduler提供了限制来初始化和挂起单一用户和队列的应用程序,从而可以确保集群的公平和稳定。

CapacityScheduler能提供的主要抽象是对于队列的概念。这些队列一般由管理员配置,用这些队列来刻画和反映共享集群中的经济状况(成本和资源情况)

为了给共享资源提供更多的控制和可预测性,CapacityScheduler支持层级队列来确保资源可以在一个组织的子队列(sub-queues)里共享,而不被其它组织提前分配掉。也就是提供了一种关联,来保证一个组织拥有在其多个程序之间的空闲资源共享的能力。

特性

CapacityScheduler支持如下特性:

配置

  1. <property>
  2. <name>yarn.scheduler.capacity.root.queues</name>
  3. <value>a,b,c</value>
  4. <description>The queues at the this level (root is the root queue).
  5. </description>
  6. </property>
  7. <property>
  8. <name>yarn.scheduler.capacity.root.a.queues</name>
  9. <value>a1,a2</value>
  10. <description>The queues at the this level (root is the root queue).
  11. </description>
  12. </property>
  13. <property>
  14. <name>yarn.scheduler.capacity.root.b.queues</name>
  15. <value>b1,b2,b3</value>
  16. <description>The queues at the this level (root is the root queue).
  17. </description>
  18. </property>

改变队列配置

改变队列属性以及添加新队列都是很简单的。你只需要编辑conf/capacity-scheduler.xml然后运行yarn rmadmin -refreshQueues

  1. $ vi $HADOOP_CONF_DIR/capacity-scheduler.xml
  2. $ $HADOOP_YARN_HOME/bin/yarn rmadmin -refreshQueues

注意:队列不能被删除,只有添加新队列操作是支持的,而update更新队列配置需要时一个合法的配置,比如queue-capacity在每个层级队列中需要求和是100%的。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注