Yarn公平调度配置
问:如何配置Yarn公平调度。
答:
- 首先在yarn-site.xml中进行全局配置,表示开启公平调度策略。
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
<description>开启公平调度策略</description>
</property>
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>/opt/app/hadoop-2.7.7/etc/hadoop/fair-scheduler.xml</value>
<description>公平调度策略配置文件目录</description>
</property>
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
<description>开启资源抢占</description>
</property>
<property>
<name>yarn.scheduler.fair.preemption.cluster-utilization-threshold</name>
<value>0.8f</value>
<description>当集群的整体资源利用率超过80%,则开始抢占</description>
</property>
<property>
<name>yarn.scheduler.fair.user-as-default-queue</name>
<value>true</value>
<description>默认提交到default队列</description>
</property>
<property>
<name>yarn.scheduler.fair.allow-undeclared-pools</name>
<value>false</value>
<description>任务无法提交到现有队列,是否允许新建一个队列</description>
</property>
- 然后再编辑fair-scheduler.xml,对公平调度进行详细配置。
<?xml version="1.0"?>
<allocations>
<!-- 每个队列中的默认调度策略,默认值是fair -->
<defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
<user name="hadoop">
<!-- 用户hadoop最多运行的任务数 -->
<maxRunningApps>30</maxRunningApps>
</user>
<!-- 默认运行任务数 -->
<userMaxAppsDefault>10</userMaxAppsDefault>
<!-- 队列划分 -->
<!-- 共有4个队列:default、hadoop、develop、test -->
<!-- 权重weight分别是:1、2、1、1.5 -->
<queue name="root">
<minResources>512mb,4vcores</minResources>
<maxResources>102400mb,100vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<weight>1.0</weight>
<schedulingMode>fair</schedulingMode>
<aclSubmitApps> </aclSubmitApps>
<aclAdministerApps> </aclAdministerApps>
<queue name="default">
<minResources>512mb,4vcores</minResources>
<maxResources>30720mb,30vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1.0</weight>
<!-- 允许提交任务的用户和组 -->
<!-- 格式为:用户名1,用户名2 用户名1所属组,用户名2所属组 -->
<!-- * 表示接收所有用户的任务 -->
<!-- 默认情况下,当任务没有指定队列时,会提交到default中 -->
<aclSubmitApps>*</aclSubmitApps>
</queue>
<queue name="hadoop">
<minResources>512mb,4vcores</minResources>
<maxResources>20480mb,20vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>2.0</weight>
<!-- 允许提交任务的用户和组 -->
<aclSubmitApps>hadoop hadoop</aclSubmitApps>
<!-- 允许管理任务的用户和组 -->
<aclAdministerApps>hadoop hadoop</aclAdministerApps>
</queue>
<queue name="develop">
<minResources>512mb,4vcores</minResources>
<maxResources>20480mb,20vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1</weight>
<aclSubmitApps>develop develop</aclSubmitApps>
<aclAdministerApps>develop develop</aclAdministerApps>
</queue>
<queue name="test">
<minResources>512mb,4vcores</minResources>
<maxResources>20480mb,20vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1.5</weight>
<aclSubmitApps>test,hadoop,develop test</aclSubmitApps>
<aclAdministerApps>test group_businessC,supergroup</aclAdministerApps>
</queue>
</queue>
<!-- 任务提交规则,由scheduler调度器决定提交的任务进入指定队列 -->
<!-- 包含多个rule标签,rule标签默认情况下create参数=true,表示当前rule可以创建一个新队列来存放任务 -->
<queuePlacementPolicy>
<!-- 任务被提交到指定的队列;如果队列不存在,则不创建 -->
<rule name="specified" create="false"/>
<!-- 任务被提交到,以提交用户所属组名称所命名的队列;如果队列不存在,则不创建 -->
<rule name="primaryGroup" create="false" />
<!-- 当不满足以上规则,则提交到root.default队列(默认值) -->
<rule name="default" queue="root.default"/>
</queuePlacementPolicy>
</allocations>
今天的单点,你是否get到了呢?每日单点,用5分钟收获一点!今天你打卡了没?
后话
如果有帮助的,记得点赞、关注。在公众号《数舟》中,可以免费获取专栏《数据仓库》配套的视频课程、大数据集群自动安装脚本,并获取进群交流的途径。
我所有的大数据技术内容也会优先发布到公众号中。如果对某些大数据技术有兴趣,但没有充足的时间,在群里提出,我为大家安排分享。