Hadoop支持多种作业调度器,需根据业务场景选择:
prod生产队列、dev开发队列),每个队列分配固定资源比例(如prod占70%、dev占30%),支持多租户资源隔离,适合企业多部门共享集群。real-time实时作业和batch批处理作业各占50%资源),适合交互式作业或多租户公平性要求高的场景。修改yarn-site.xml(启用容量调度器)
在$HADOOP_HOME/etc/hadoop/yarn-site.xml中添加以下配置,指定使用CapacityTaskScheduler:
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
配置队列结构(capacity-scheduler.xml)
在$HADOOP_HOME/etc/hadoop/capacity-scheduler.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>70</value> <!-- 生产队列占总资源的70% -->
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.capacity</name>
<value>20</value> <!-- 开发队列占20% -->
</property>
<property>
<name>yarn.scheduler.capacity.root.test.capacity</name>
<value>10</value> <!-- 测试队列占10% -->
</property>
<property>
<name>yarn.scheduler.capacity.root.prod.maximum-capacity</name>
<value>80</value> <!-- 生产队列最大资源限制(防止过度占用) -->
</property>
配置队列权限(可选)
通过yarn.scheduler.capacity.root.queue-name.acl_submit_applications控制队列提交权限,例如仅允许dev用户组提交到dev队列:
<property>
<name>yarn.scheduler.capacity.root.dev.acl_submit_applications</name>
<value>dev-user-group</value>
</property>
重启YARN服务
修改配置后,重启YARN服务使配置生效:
$HADOOP_HOME/sbin/stop-yarn.sh
$HADOOP_HOME/sbin/start-yarn.sh
提交作业到指定队列
使用mapreduce.job.queuename参数指定作业所属队列,例如将作业提交到prod队列:
hadoop jar your-job.jar YourMainClass -Dmapreduce.job.queuename=prod
修改yarn-site.xml(启用公平调度器)
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
配置公平调度策略(fair-scheduler.xml)
在$HADOOP_HOME/etc/hadoop/fair-scheduler.xml中定义资源池及公平分配规则:
<allocations>
<pool name="realtime">
<weight>3</weight> <!-- 权重(资源分配比例) -->
<minResources>20% 10vcores</minResources> <!-- 最小资源保证 -->
<maxResources>50% 30vcores</maxResources> <!-- 最大资源限制 -->
</pool>
<pool name="batch">
<weight>1</weight>
<minResources>10% 5vcores</minResources>
</pool>
</allocations>
重启YARN服务
同样需要重启YARN服务使配置生效。
yarn.scheduler.capacity.node-locality-delay(默认40),增加本地化尝试次数,减少网络传输开销。yarn.scheduler.capacity.queue-name.user-limit-factor(默认1)限制单用户资源占用,避免单个用户独占队列资源。http://resourcemanager-host:8088)查看队列资源使用情况,及时调整配置。以上配置可根据实际业务需求调整队列比例、资源限制等参数,实现Hadoop集群的高效作业调度。