1.21将Yarn的调度策略修改成Fair Scheduler的
A:找到YARN列表,然后找到yarn.resourcemanager.scheduler.class,然后将它的值进行修改,即:
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
对应的Ambari中的界面:
B:编写fair-scheduler.xml,内容如下(以下根据自己服务器的实际情况进行调整):
<?xml version="1.0"?>
<allocations>
<defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
<!--<defaultMinSharePreemptionTimeout>300</defaultMinSharePreemptionTimeout>-->
<queue name="batch_processing_queue">
<minResources>1024 mb, 0 vcores</minResources>
<maxResources>15368 mb, 9 vcores</maxResources>
<maxRunningApps>5</maxRunningApps>
<weight>3.0</weight>
</queue>
<queue name="real_time_processing_queue">
<minResources>1024 mb, 0 vcores</minResources>
<maxResources>10240 mb, 6 vcores</maxResources>
<maxRunningApps>5</maxRunningApps>
<weight>2.0</weight>
</queue>
<!-- 与queue里的选择策略是:遇小选小 -->
<userMaxAppsDefault>5</userMaxAppsDefault>
<!-- 具体指定(specified):应用程序被放置到它要求队列中。如果应用程序要求没有队列,也就是说,它指定了: default
用户(user):应用程序被放置到一个与谁提交它的用户的名称队列
primaryGroup:应用程序被放置到一个队列,谁提交它的用户的主组的名称
secondaryGroupExistingQueue:应用程序被放置到一个有一个与谁提交了用户的次要组名的队列。符合配置的队列中的第一次要组将被选中
默认(default):应用程序被放置到一个名为default的队列
拒绝(reject):应用程序被拒绝
-->
<queuePlacementPolicy>
<rule name="specified" create="false" /> <!--暂不启用: 用户提交任务时指定队列将无效-->
<rule name="user" create="false" />
<rule name="primaryGroup" create="false" />
<!--<rule name="secondaryGroupExistingQueue" create="false" /> 暂不启用: 尚未指定次要组 -->
<rule name="secondaryGroupExistingQueue" create="false" />
<!-- <rule name="reject"/> -->
<rule name="default" queue="batch_processing_queue"/>
</queuePlacementPolicy>
</allocations>
将fair-scheduler.xml放到$HADOOP_CONF目录下,然后改变所属用户和权限。命令如下:
cd /usr/hdp/3.1.4.0-315/hadoop/conf
chown hdfs:hadoop fair-scheduler.xml
chmod 644 fair-scheduler.xml
C:修改其它参数
yarn.scheduler.fair.allocation.file=fair-scheduler.xml
yarn.resourcemanager.reservation-system.enable=true
Disable pre-emption
yarn.scheduler.capacity.ordering-policy.priority-utilization.underutilized-preemption.enabled=false
yarn.scheduler.fair.assignmultiple=false
yarn.scheduler.fair.sizebasedweight=false
yarn.scheduler.fair.user-as-default-queue=true
yarn.scheduler.fair.preemption=false
最终Custome yarn-site.xml中的配置内容如下:
参考文章:
https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html
https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/FairScheduler.html
https://community.cloudera.com/t5/Support-Questions/Unable-to-start-Node-Manager/td-p/285976