Capacity Scheduler配置说明

本文详细介绍了Hadoop中Capacity Scheduler的各种配置参数及其作用,包括队列容量、最大容量、用户限制百分比等关键参数,并解释了这些参数如何影响作业的调度与执行。

转自:http://www.linuxidc.com/Linux/2013-09/90124.htm

mapred.capacity-scheduler.queue.<queue-name>.capacity:设置调度器中各个queue的容量,这里指的是占用的集群的slots的百分比,需要注意的是,所有queue的该配置项加起来必须小于等于100,否则会导致JobTracker启动失败

mapred.capacity-scheduler.queue.<queue-name>.maximum-capacity:设置调度器中各个queue最大可以占有的容量,默认为-1表示最大可以占有集群100%的资源,和设置为100的效果是一样的

mapred.capacity-scheduler.queue.<queue-name>.minimum-user-limit-percent:当queue中多个用户出现slots竞争的时候,限制每个用户的slots资源的百分比。举个例子,当minimum-user-limit-percent设置为25%时候,如果queue中有多余4个用户同时提交job,那么调度器保证每个用户占有的slots不超过queue中slots数的25%,默认为100表示不对用户作限制。

mapred.capacity-scheduler.queue.<queue-name>.user-limit-factor:设置queue中用户可占用queue容量的系数,默认为1表示,queue中每个用户最多只能占有queue的容量(即mapred.capacity-scheduler.queue.<queue-name>.capacity),因此,需要注意的是,如果queue中只有一个用户提交job,且希望用户在集群不繁忙时候可扩展到mapred.capacity-scheduler.queue.<queue-name>.maximum-capacity指定的slots数,则必须相应调大user-limit-factor这个系数

mapred.capacity-scheduler.queue.<queue-name>.supports-priority:设置调度器中各个queue是否支持job优先级,不用过多解释。

mapred.capacity-scheduler.maximum-system-jobs:设置调度器中各个queue中合起来共计可初始化后并发执行的job数,需要注意的是,各个queue会按照自己占有集群slots资源的比例(即mapred.capacity-scheduler.queue.<queue-name>.capacity)决定每个queue最多同时并发执行的job数!举个例子,假设maximum-system-jobs为20个,而queue1占集群10%资源,那么意味着queue1最多可同时并发运行2个job,如果碰巧是运行时间比较长的job的话,将直接导致其他新提交的job被JobTracker阻塞不能进行初始化!

mapred.capacity-scheduler.queue.<queue-name>.maximum-initialized-active-tasks:设置queue中所有并发运行job包含的task数的上限值,如果超过此限制,则新提交到该queue中的job会被排队缓存到磁盘上。

mapred.capacity-scheduler.queue.<queue-name>.maximum-initialized-active-tasks-per-user:设置queue中每个特定用户并发运行job包含的task数的上限值,如果超过此限制,则该用户新提交到该queue中的job会被排队缓存到磁盘上。

mapred.capacity-scheduler.queue.<queue-name>.init-accept-jobs-factor:设置每个queue中可容纳接收的job总数(maximum-system-jobs * queue-capacity)的系数,举个例子,如果maximum-system-jobs为20,queue-capacity为10%,init-accept-jobs-factor为10,则当queue中job总数达到10*(20*10%)=20时,新的job将被JobTracker拒绝提交。

<think>嗯,用户问的是如何对100台服务器的YARN集群进行参数调优,特别是使用CapacityScheduler的情况。我需要先回忆一下YARN的基本架构和CapacityScheduler的工作原理。首先,YARN有ResourceManager和NodeManager,ResourceManager负责调度,NodeManager管理单个节点的资源。CapacityScheduler是基于队列的,每个队列有资源容量限制,支持多租户。 用户提到的是100台服务器,规模较大,所以调优可能需要考虑资源分配、队列配置、容器设置等方面。参考提供的引用,比如引用[3]提到yarn.nodemanager.resource.cpu-vcores默认是8,需要根据物理核心数调整。这可能意味着要确保每个NodeManager的vcores设置合理,避免超卖或者资源浪费。 另外,引用[1]指出默认的调度器是CapacityScheduler,而引用[2]和[4]比较了Fair SchedulerCapacity Scheduler的功能。用户明确使用CapacityScheduler,所以需要关注队列划分、资源限制、预留等配置。比如,如何设置队列的容量和最大资源,避免某些队列占用过多资源影响其他任务。 容器的最小和最大内存设置也很重要,引用[3]提到需要配置每个容器的内存范围,这样可以防止单个任务申请过多或过少的资源。可能还需要调整yarn.scheduler.minimum-allocation-mb和yarn.scheduler.maximum-allocation-mb,确保资源分配合理。 资源预留策略,比如配置预留资源百分比,避免大任务导致资源碎片。另外,资源抢占是否启用,这可能在资源紧张时帮助平衡队列间的资源分配。 高可用性和故障恢复机制也不能少,比如启用RM的HA,配置zk节点,这样在100台服务器的集群中提高容错能力。 动态资源调整可能也是必要的,比如根据负载自动调整队列资源比例,但需要确认CapacityScheduler是否支持,或者是否需要其他工具辅助。 监控和日志方面,用户可能需要集成监控工具,如Prometheus,调整日志级别以便问题排查。引用中的配置示例可以作为参考,比如修改yarn-site.xml中的参数。 最后,用户可能需要具体的配置示例,比如如何设置队列层级,如何配置ACL等。可能需要分步骤说明,从基础配置到高级优化,逐步展开。同时,生成的问题需要考虑用户可能的后续疑问,比如性能监控、队列划分策略、资源隔离等。</think>### YARN集群参数调优指南(CapacityScheduler + 100节点) #### 一、基础资源配置优化 1. **单节点资源配置** - **内存分配** 设置`yarn.nodemanager.resource.memory-mb`为物理内存的80%-90%(预留系统资源) 例如:128GB内存服务器 → 设置`110592`MB(128×0.9×1024)[^3] - **CPU虚拟核分配** 按物理核心数设置`yarn.nodemanager.resource.cpu-vcores`,例如24核服务器设为`24`[^3] 2. **全局资源配置** ```xml <!-- 容器最小/最大内存 --> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>1024</value> <!-- 1GB最小容器 --> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>16384</value> <!-- 16GB最大容器 --> </property> ``` #### 二、CapacityScheduler核心配置 1. **队列层级设计** ```xml <property> <name>yarn.scheduler.capacity.root.queues</name> <value>prod,dev,test</value> <!-- 三级队列 --> </property> <property> <name>yarn.scheduler.capacity.root.prod.capacity</name> <value>60</value> <!-- 生产队列占60%资源 --> </property> ``` 2. **弹性资源控制** ```xml <property> <name>yarn.scheduler.capacity.root.dev.maximum-capacity</name> <value>80</value> <!-- 开发队列最大可占用80%资源 --> </property> <property> <name>yarn.scheduler.capacity.root.prod.disable_preemption</name> <value>false</value> <!-- 启用资源抢占 --> </property> ``` #### 三、高级优化策略 1. **资源预留机制** ```xml <property> <name>yarn.scheduler.capacity.reserved-memory</name> <value>0.1</value> <!-- 预留10%资源应对突发负载 --> </property> ``` 2. **容器调度优化** ```xml <property> <name>yarn.scheduler.capacity.node-locality-delay</name> <value>40</value> <!-- 允许错过40次本地调度机会 --> </property> ``` #### 四、集群级最佳实践 1. **高可用配置** ```xml <property> <name>yarn.resourcemanager.zk-address</name> <value>zk1:2181,zk2:2181,zk3:2181</value> </property> ``` 2. **动态资源调整** ```bash yarn rmadmin -refreshQueues # 动态加载队列配置 ``` #### 五、监控与调优验证 1. **关键监控指标** - 队列资源使用率偏差不超过±15% - 容器分配延迟应<500ms - NodeManager心跳丢失率<0.1% $$ \text{资源利用率} = \frac{\sum_{i=1}^{100} (used\_vcores_i)}{total\_cluster\_vcores} \times 100\% $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值