容量调度器的配置

本文详细介绍了Hadoop容量调度器的运行方式,包括如何配置队列以实现多组织资源共享,队列的层级划分及FIFO调度策略。讨论了弹性队列的概念,允许作业在资源紧张时暂时超出队列容量。还探讨了配置队列最大容量的重要性,以及应用的队列放置策略。同时提到了资源扩展的可能性。
摘要由CSDN通过智能技术生成

详说容量调度器运行方式

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

单个作业使用的资源不会超过所在的队列容量。但是,如果队列中有多个作业,假如队列资源不够呢?这时如果有可用的空闲资源,那么容量调度器可能会将空余的资源分配给队列中的作业,哪怕这会超出队列容量。这一机制被称作“弹性队列”。具体的设置属性为:yarn.scheduler.capacity.<queue-path>.user-limit-factor设置大于1,这里的1为默认值,表示一个作业可以使用超过其队列容量的资源。

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

容量调度器的配置

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

在root下定义两个队列:prod(40%)、dev(60%)

root
 --prod
 --dev
    --eng
    --science

下面列一个基于上述队列层次的调度配置文件,文件名为capacity-scheduler.xml。需要注意的是,对特定队列进行配置时,是通过以下形式的配置属性yarn.scheduler.capacity.<queue-path>.<sub-property>进行设置的,其中<queue-path>表示队列的层次路径,用圆点隔开,例如root.prod。

分析一下:

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

capacity-scheduler.xml配置文件

 <?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.rootprod.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>

队列放置

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

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

 

资源扩展

延时调度器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值