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

网友投稿 768 2022-05-30

4.3.2  容量调度器配置

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

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

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

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

root

├─prod

└─dev

├─ eng

└─ science

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

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

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

yarn.scheduler.capacity.root.queues

prod,dev

yarn.scheduler.capacity.root.dev.queues

eng,science

yarn.scheduler.capacity.root.prod.capacity

40

yarn.scheduler.capacity.root.dev.capacity

60

yarn.scheduler.capacity.root.dev.maximum-capacity

75

yarn.scheduler.capacity.root.dev.eng.capacity

50

yarn.scheduler.capacity.root.dev.science.capacity

50

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

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

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

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

大数据 容器 Hadoop

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:餐饮供应链系统解决方案,改革餐饮采购布局
下一篇:tensorflow笔记
相关文章