在Hadoop YARN中,公平调度器(Fair Scheduler)设计用于自动平衡资源分配,确保所有作业公平地共享集群资源。要实现多队列提交并配置公平调度器,你需要进行如下步骤:
1. 配置公平调度器
首先,确保你的YARN配置使用的是公平调度器。这通常在yarn-site.xml
中通过设置yarn.resourcemanager.scheduler.class
属性来完成:
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
2. 编辑fair-scheduler.xml
接着,编辑或创建fair-scheduler.xml
文件(同样位于$HADOOP_CONF_DIR
目录下),以定义队列结构和配置:
<allocations>
<!-- 定义队列 -->
<queue name="default">
<minResources>1024mb,1vcores</minResources>
<!-- 最小资源保证 -->
<maxResources>2048mb,2vcores</maxResources>
<!-- 资源使用上限 -->
<maxRunningApps>2</maxRunningApps>
<!-- 同时运行的最大应用数 -->
<schedulingPolicy>fair</schedulingPolicy>
<!-- 使用公平调度策略 -->
</queue>
<queue name="high-priority">
<minResources>2048mb,1vcore</minResources>
<maxResources>4096mb,2vcores</maxResources>
<maxRunningApps>1</maxRunningApps>
<schedulingPolicy>fair</schedulingPolicy>
<weight>2.0</weight>
<!-- 队列权重,影响资源分配的优先级 -->
</queue>
<!-- 其他队列配置... -->
<!-- 可选:定义默认队列分配策略 -->
<defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
</allocations>
3. 重启YARN服务
配置完后,重启YARN服务(ResourceManager和NodeManager)以应用新配置。
4. 提交作业到特定队列
在提交作业时,指定作业应该运行的队列:
- 对于MapReduce作业:
hadoop jar myMapReduceJob.jar \
-Dmapreduce.job.queue.name=high-priority \
myJobClass
- 对于Spark作业:
spark-submit \
--class com.example.MySparkJob \
--master yarn \
--queue high-priority \
mySparkApp.jar
注意事项
- 队列配置:合理配置队列的最小资源、最大资源、权重等,以适应不同的工作负载和优先级。
- 动态调整:公平调度器支持动态添加和删除队列,无需重启YARN服务。
- ACL设置:通过配置ACL,可以控制哪些用户或组可以提交作业到特定队列。
- 监控与调整:使用YARN的Web UI监控队列和应用程序的资源使用情况,根据实际运行状况适时调整配置。
通过上述步骤,你可以在YARN中使用公平调度器实现多队列提交,有效管理和优化资源分配,满足不同作业的执行需求。