修改yarn-site.xml配置
登录 hadoop2
修改 yarn-site.xml
文件:
vim /program/hadoop-3.0.3/etc/hadoop/yarn-site.xml
增加下面内容:
指定公平调度方式
<!-- 指定使用fairScheduler的调度方式 -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
指定配置文件路径
<!-- 指定配置文件路径 -->
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>fair-scheduler.xml</value>
</property>
解释:
- 默认是
$HADOOP_HOME/etc/hadoop/
路径,也可以写全路径 - 默认文件名是:
fair-scheduler.xml
开启抢占
<!-- 开启资源抢占,当队列资源使用
yarn.scheduler.fair.preemption.cluster-utilization-threshold 这么多比例的时候,就从其他空闲队列抢占资源,默认为false,即:不抢占
-->
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
</property>
<property>
<name>yarn.scheduler.fair.preemption.cluster-utilization-threshold</name>
<value>0.8f</value>
</property>
linux用户名作为队列名
<property>
<name>yarn.scheduler.fair.user-as-default-queue</name>
<value>true</value>
</property>
解释:
默认true,提交任务未指定队列时,默认是将当前linux登录用户名作为队列名。这个配置就实现了根据用户名自动分配资源池
设置成false,当任务中未指定资源池的时候,将使用默认的队列,即:
root.default
,可在 fair-scheduler.xml 中配置默认队列
禁止创建未定义的队列
<property>
<name>yarn.scheduler.fair.allow-undeclared-pools</name>
<value>false</value>
</property>
解释:
默认为true,如果提交任务时指定 没有 的队列,会 自动创建 该队列
设置为false,提交任务时应该指定 已有 的队列
- 如果指定 没有 的队列,会将该任务分配到 默认队列,一般为:
root.default
- 如果设置了
yarn.scheduler.fair.user-as-default-queue=true
,那么提交任务 未指定队列 时,默认是将当前 linux登录用户名 作为队列名
- 如果指定 没有 的队列,会将该任务分配到 默认队列,一般为:
fair-scheduler.xml
新建 fair-scheduler.xml
文件:
vim /program/hadoop-3.0.3/etc/hadoop/fair-scheduler.xml
内容如下:
<?xml version="1.0"?>
<allocations>
<!-- 定义根队列,所有队列都是root队列的子队列 -->
<queue name="root">
<!-- 全局配置 -->
<!-- 最小使用资源:2G内存,2个处理器核心 -->
<minResources>2048mb,2vcores</minResources>
<!-- 最大使用资源:4G内存,2个处理器核心 -->
<maxResources>4096mb,2vcores</maxResources>
<!-- 最大可同时运行的app数量:100-->
<maxRunningApps>10</maxRunningApps>
<!-- weight:资源池权重 -->
<weight>1.0</weight>
<!-- 调度模式:fair-scheduler -->
<schedulingMode>fair</schedulingMode>
<!-- 允许提交任务的用户名和组,格式为:用户名 用户组 -->
<!-- 当有多个用户时候,格式为:用户名1,用户名2 用户名1所属组,用户名2所属组 -->
<aclSubmitApps> </aclSubmitApps>
<!-- 允许管理任务的用户名和组,格式同上 -->
<aclAdministerApps> </aclAdministerApps>
<!-- 当提交的任务没有指定队列时,都提交到该队列中 -->
<queue name="default">
<!-- 该队列的局部配置 -->
<minResources>1024mb,2vcores</minResources>
<maxResources>4096mb,2vcores</maxResources>
<maxRunningApps>5</maxRunningApps>
<!-- 队列内部使用公平调度,也可以是fifo -->
<schedulingMode>fair</schedulingMode>
<!-- 权重,按照该比例抢夺资源 -->
<weight>2.0</weight>
<!-- 允许提交任务的用户名和组,格式为:用户名 用户组(只写用户名也行) -->
<!-- 当有多个用户时候,格式为:用户名1,用户名2 用户名1所属组,用户名2所属组 -->
<!-- *表示所有用户都可以运行 -->
<aclSubmitApps>*</aclSubmitApps>
</queue>
<queue name="spark">
<minResources>2048mb,2vcores</minResources>
<maxResources>4096mb,2vcores</maxResources>
<maxRunningApps>5</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1.0</weight>
<!-- 允许提交任务的用户名和组 -->
<aclSubmitApps>root,spark</aclSubmitApps>
<!-- 允许管理任务的用户名和组 -->
<aclAdministerApps>root,spark</aclAdministerApps>
</queue>
<queue name="dev">
<minResources>2048mb,2vcores</minResources>
<maxResources>4096mb,2vcores</maxResources>
<maxRunningApps>10</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1.0</weight>
<!-- 允许提交任务的用户名和组 -->
<aclSubmitApps>root,spark,flink</aclSubmitApps>
<!-- 允许管理任务的用户名和组 -->
<aclAdministerApps>root,spark,flink</aclAdministerApps>
</queue>
</queue>
</allocations>
注意:
<aclSubmitApps> </aclSubmitApps>
、<aclAdministerApps> </aclAdministerApps>
如果是空,必须有空格,否则报空指针错
同步
同步到 hadoop1:
rsync -av /program/hadoop-3.0.3/etc/hadoop/* root@hadoop1:/program/hadoop-3.0.3/etc/hadoop/
同步到 hadoop3:
rsync -av /program/hadoop-3.0.3/etc/hadoop/* root@hadoop3:/program/hadoop-3.0.3/etc/hadoop/
重启 yarn
登录 hadoop2
,执行下面命令关闭 yarn:
stop-yarn.sh
start-yarn.sh
web 查看队列
访问:http://hadoop2:8088/ ,查看队列,显示界面如下:
可以看到队列 root.default
、root.dev
、root.spark
测试
同时 在 hadoop1、hadoop3执行下面命令
hadoop jar ${HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar wordcount /test2/data.txt /result010519
hadoop jar ${HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar wordcount /test2/data.txt /result010518