1. 配置
Yarn资源调度有三种策略,分别是:
本文主要配置的是Fair Scheduler调度,即公平调度策略。
Step1. 指定调度策略
目前hadoop3.X版本默认使用的是Capacity Scheduler,因此需要指定调度策略,只要在yarn-site.xml(/opt/hadoop-2.7.7/etc/hadoop/)添加如下内容:
<!-- 指定调度策略为FairScheduler --> <property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value> </property> <!-- Fair Scheduler 策略配置文件的位置--> <property> <name>yarn.scheduler.fair.allocation.file</name> <value>/opt/hadoop-2.7.7/etc/hadoop/fair-scheduler.xml</value> </property>
注意到了还需要配置Fair Scheduler的配置文件。
Step2. 配置fair-scheduler.xml
fair-scheduler.xml内容如下:
<?xml version="1.0" ?> <allocations> <queue name="root"> <minResources>2048 mb,2 vcores</minResources> <maxResources>12240 mb,8 vcores</maxResources> <maxRunningApps>10</maxRunningApps> <schedulingMode>fair</schedulingMode> <aclSubmitApps>root</aclSubmitApps> <aclAdministerApps>root</aclAdministerApps> <queue name="spark-max"> <minResources>1024 mb,1 vcores</minResources> <maxResources>6120 mb,8 vcores</maxResources> <maxRunningApps>10</maxRunningApps> <aclSubmitApps>admin,user_max</aclSubmitApps> <aclAdministerApps>admin</aclAdministerApps> <weight>2.0</weight> <schedulingPolicy>fair</schedulingPolicy> </queue> <queue name="spark-mid"> <minResources>1024 mb,1 vcores</minResources> <maxResources>3672 mb,4 vcores</maxResources> <maxRunningApps>10</maxRunningApps> <aclSubmitApps>admin,user_mid</aclSubmitApps> <aclAdministerApps>admin</aclAdministerApps> <weight>1.0</weight> <schedulingPolicy>fair</schedulingPolicy> </queue> <queue name="spark-min"> <minResources>1024 mb,1 vcores</minResources> <maxResources>2448 mb,2 vcores</maxResources> <maxRunningApps>10</maxRunningApps> <aclSubmitApps>admin,user_min</aclSubmitApps> <aclAdministerApps>admin</aclAdministerApps> <weight>1.0</weight> <schedulingPolicy>fair</schedulingPolicy> </queue> <user name="admin"> <maxRunningApps>10</maxRunningApps> </user> </queue> <userMaxAppsDefault>10</userMaxAppsDefault> </allocations>
注意在Yarn的Web UI界面可以查看内存以及核数总量:
属性解析如下:
2. 启动
重启hadoop:
$ cd /opt/hadoop-2.7.7/sbin/ $ ./stop-all.sh $ ./start-all.sh $ jps
如果显示如下,表示正常:
打开WebUI,浏览器访问http://10.194.188.37:8088/,可以看到使用了公平策略,以及创建了3个队列。
3. 验证
从fair-sheduler.xml文件可以看到:
也就是需要验证:
- spark-max 能否提交到spark-max队列(期望是可以的)
- spark-max能否提交到spark-mid队列(期望是不可以的)
Step1. 创建用户
根据fair-sheduler.xml,创建四个用户,分别为:admin、user_max、user_mid、user_min;
# 新增用户命令(例如新增admin) $ adduser admin # 为新增用户创建密码(例如为admin新增密码) $ passwd admin # 其余的用户创建依次类推
查看新增的用户:
$ compgen -u
Step2. 验证提交
验证1:user_max用户提交到root队列(预期不成功)
首先切换到user_max用户:
$ su user_max
然后使用运行spark-shell到yarn的root队列:
$ cd /opt/spark-2.4.8-bin-hadoop2.7/bin/ $ ./spark-shell --master yarn --queue root
运行结果:
与预期的一致。
验证2:user_max用户提交到spark-max队列(预期成功)
执行命令:
$ ./spark-shell --master yarn --queue spark-max
运行结果:
同时在yarn的web ui也可以看到已经成功地提交到yarn了。
验证3:user_max用户提交到spark-mid队列(预期不成功)
执行命令:
$ ./spark-shell --master yarn --queue spark-mid
运行结果,与预想的一样不成功:
4. 问题汇总
问题1. hadoop 无法停止?
- 解决方案:直接使用jps命令查询出所有hadoop相关的进程,然后使用kill -9 进程号命令把yarn相关的进程杀掉。
问题2. 解决Permission denied: user=dr.who, access=READ_EXECUTE, inode=“/user/user_max”:root:supergroup:drwx ?
- 解决方案:这是由于新增的用户对hdfs没有权限,使用命令hdfs dfs -chmod -R 777 /user
问题3. 解决faire scheduler空指针问题?
- 解决方案:对应的aclSubmitApps以及aclAdministerApps不能为空,解决方案详情可以参考:https://issues.apache.org/jira/browse/YARN-3645
问题4. cm如何配置FairScheduler?
- 解决方案:如下图配置即可(详情可参考https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/admin_fair_scheduler.html)