一. 问题描述
公司有一个hadoop的集群。但是A项目组经常做一些定时的BI报表,B项目组则经常使用一些软件做一些临时需求。那么他们肯定会遇到同时提交任务的场景,这个时候到底如何分配资源满足这两个任务呢?是先执行A的任务,再执行B的任务,还是同时跑两个?
二. 解决方案
2.1 CDH资源队列的配置
2.2 原生hadoop资源队列的配置
以Capacity 调度为例
若要启用 Capacity 调度器,修改 yarn-site.xml 文件即可:
<configuration>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
</configuration>
修改 capacity-scheduler.xml 文件,配置队列的部分参数如下:
<configuration>
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,dev</value>
<description>配置 root 队列的所有子队列</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>20</value>
<description>配置 root.default 队列的集群资源占比</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
<value>40</value>
<description>配置 root.default 队列可使用的资源上限</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.queues</name>
<value>dev1,dev2</value>
<description>配置 root.dev 队列的所有子队列</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.dev1.capacity</name>
<value>40</value>
<description>配置 root.dev.dev1 队列的集群资源占比</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.dev2.capacity</name>
<value>60</value>
<description>配置 root.dev.dev2 队列的集群资源占比</description>
</property>
</configuration>