《Hadoop权威指南:大数据的存储与分析》—4.3.2 容量调度器配置

举报
清华大学出版社 发表于 2019/10/12 17:25:53 2019/10/12
【摘要】 本节书摘来自清华大学出版社《Hadoop权威指南:大数据的存储与分析》一书中第四章,第4.3.2节,作者是Tom White , 王 海 华 东 刘 喻 吕粤海 译。

4.3.2  容量调度器配置

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

正如图4-3所示,单个作业使用的资源不会超过其队列容量。然而,如果队列中有多个作业,并且队列资源不够用了呢?这时如果仍有可用的空闲资源,那么容量调度器可能会将空余的资源分配给队列中的作业,哪怕这会超出队列容量。[1]这称为“弹性队列”(queue elasticity)

正常操作时,容量调度器不会通过强行中止来抢占容器(container)[2]。因此,如果一个队列一开始资源够用,然后随着需求增长,资源开始不够用时,那么这个队列就只能等着其他队列释放容器资源。缓解这种情况的方法是,为队列设置一个最大容量限制,这样这个队列就不会过多侵占其他队列的容量了。当然,这样做是以牺牲队列弹性为代价的,因此需要在不断尝试和失败中找到一个合理的折中。

假设一个队列的层次结构如下:

root

├─prod

└─dev

├─ eng

└─ science

 

范例4-1是一个基于上述队列层次的容量调度器配置文件,文件名为capacity-scheduler.xml。在root队列下定义两个队列:proddev,分别占40%60%的容量。需要注意的是,对特定队列进行配置时,是通过以下形式的配置属性yarn.scheduler.capacity.<queue-path>.<sub-property>进行设置的,其中, <queue-path>表示队列的层次路径(用圆点隔开),例如root.prod

范例4-1. 容量调度器的基本配置文件

<?xml version="1.0"?>

<configuration>

  <property>

    <name>yarn.scheduler.capacity.root.queues</name>

    <value>prod,dev</value>

  </property>

  <property>

    <name>yarn.scheduler.capacity.root.dev.queues</name>

    <value>eng,science</value>

  </property>

  <property>

    <name>yarn.scheduler.capacity.root.prod.capacity</name>

    <value>40</value>

  </property>

  <property>

    <name>yarn.scheduler.capacity.root.dev.capacity</name>

    <value>60</value>

  </property>

  <property>

    <name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>

    <value>75</value>

  </property>

  <property>

    <name>yarn.scheduler.capacity.root.dev.eng.capacity</name>

    <value>50</value>

  </property>

  <property>

    <name>yarn.scheduler.capacity.root.dev.science.capacity</name>

    <value>50</value>

  </property>

</configuration>

 

可以看到dev队列进一步被划分成engscience两个容量相等的队列。由于dev队列的最大容量被设置为75%,因此即使prod队列空闲,dev队列也不会占用全部集群资源。换而言之,prod队列能即刻使用的可用资源比例总是能达到25%。由于没有对其他队列设置最大容量限制,engscience中的作业可能会占用dev队列的所有容量(将近75%的集群资源),而prod队列实际则可能会占用全部集群资源。

除了可以配置队列层次和容量,还有些设置是用来控制单个用户或应用能被分配到的最大资源数量、同时运行的应用数量及队列的ACL认证等。关于容量调度器配置的更多内容,请参见http://bit_ly/capacity_schedular

队列放置

将应用放置在哪个队列中,取决于应用本身。例如,在MapReduce中,可以通过设置属性mapreduce.job.queuename来指定要用的队列。如果队列不存在,则在提交时会发送错误。如果不指定队列,那么应用将被放在一个名为“default”的默认队列中。

对于容量调度器,队列名应该是队列层次名的最后一部分,完整的队列层次名是不会被识别的。例如,对于上述配置范例,prodeng是合法的队列名,但root.dev.eng dev.eng作为队列名是无效的。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。