场景:根据不同项目或不同用户,对yarn资源队列进行划分,达到资源管控,任务管控的目的
yarn资源队列参数设置
当设置为 true 时,如果未指定池名称,Fair Scheduler 将会使用用户名作为默认的池名称,当设置为 false 时,所有应用程序都在一个名为 default 的共享池中运行,设置成false是为了不根据用户名而自动分配资源池
yarn.scheduler.fair.user-as-default-queue false
设置为 true 时,将使用默认设置创建在应用程序中指定但未明确配置的池,设置为 false 时,将在名为 default 的池中运行应用程序指定的未明确配置的池
此设置适用于应用程序明确指定某个池时以及应用程序运行所在的池的名称为与该应用程序关联的用户名的情况yarn.scheduler.fair.allow-undeclared-pools false
确定哪些用户和组可在任何池中提交和中止应用程序以及可以对 ResourceManager 角色发出命令的 AC,默认是*(所有用户都可以终止任务)
启用 ResourceManager ACL trueyarn.admin.acl yarn
修改完配置重启服务
创建测试用户
useradd heboanpasswd heboanuseradd devpasswd devhdfs dfs -mkdir /user/heboanhdfs dfs -chown heboan:heboan /user/heboanhdfs dfs -mkdir /user/devhdfs dfs -chown dev:dev /user/devsu - heboanecho "Hello World Bye World" > file0echo "Hello Hadoop Goodbye Hadoop" > file1hdfs dfs -mkdir -p /user/heboan/wordcount/inputhdfs dfs -put file* /user/heboan/wordcount/inputsu - devecho "Hello World Bye World" > file0echo "Hello Hadoop Goodbye Hadoop" > file1hdfs dfs -mkdir -p /user/dev/wordcount/inputhdfs dfs -put file* /user/dev/wordcount/input
动态资源配置
默认划分了2个资源池
root.default: 默认池,没有划分资源池的用户会提交到default资源池 root.user: 暂时没了解 ①编辑root 提交访问控制: 允许这些用户和组向该池提交: 用户: yarn 管理访问空: Allow these users and groups to administer this pool 用户:hdfs ②编辑root.default 提交访问控制: 允许这些用户和组向该池提交 用户: 允许提交的用户名,多个以逗号分隔,这里我配置的是heboan,dev 管理访问控制: Allow these users and groups to administer this pool, 直接继承 ③创建2个资源池root.dev和root.heboan 提交访问控制分别设置各自的用户dev ,heboan 管理访问控制直接继承 备注:资源池权重数值越大,与优先 刷新动态资源
测试用户heboan提交任务
su - heboan
可以正常提交到root.heboan资源池hadoop jar /opt/cloudera/parcels/CDH/jars/hadoop-examples.jar wordcount -Dmapreduce.job.queuename=root.heboan wordcount/input wordcount/output
可以正常提交到root.default资源池
hadoop jar /opt/cloudera/parcels/CDH/jars/hadoop-examples.jar wordcount -Dmapreduce.job.queuename=root.default wordcount/input wordcount/output
无法提交的root.dev资源池
hadoop jar /opt/cloudera/parcels/CDH/jars/hadoop-examples.jar wordcount -Dmapreduce.job.queuename=root.dev wordcount/input wordcount/output
su - dev
结果同理因为配置了只是允许yarn管理所有的资源池,并且资源池直接继承,hdfs用户才能管理,所以heboan提交的任务只能被自己删除,或者yarn/hdfs, 当然dev提交的任务也是同理