温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
Fayson的github: https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
1.文档编写目的
YARN的队列默认支持ACL的功能,即可以控制哪些用户/组可以提交任务到指定队列,也可以控制哪些用户/组可以管理该队列的作业(删除作业)。通过Cloudera Manager的“动态资源池配置”可以界面化配置YARN的资源队列,队列权重,队列资源,以及队列的ACL相关。本文Fayson主要是介绍如何在Cloudera Manager配置YARN队列的ACL
1.启用YARN的ACL
2.创建队列并进行ACL设置
3.队列ACL的测试
4.其他问题测试
5.总结
1.CM5.14.3/CDH5.14.2
2.操作系统版本为Redhat7.4
3.采用root用户进行操作
4.集群未启用Kerberos
2.启用YARN的ACL
1.通过Cloudera Manager进入YARN的配置,启用YARN的ACL。
2.设置yarn.admin.acl
如上所述,这里我们设置为“root root”,即用户root和组root,当然只设置一个用户root也一样。
YARN的管理员设置,如可执行yarn rmadmin/yarn kill等命令,该值必须配置,否则后续的队列相关的acl管理员设置无法生效。配置值时可以设置user/group:
user1,user2 group1,group2 #user和group用空格隔开
group1,group2 #只有group情况下,必须在最前面加上空格
(可左右滑动)
3.保存配置更改并重启集群服务
3.创建队列并进行ACL设置
1.首先为了后面的测试,我们在集群所有节点上创建fayson1和fayson2两个用户。
sh ssh_do_all.sh node.list "useradd fayson1"
sh ssh_do_all.sh node.list "useradd fayson2"
(可左右滑动)
Fayson之前已经创建过这个2个用户,所以有一些报错。
2.从Cloudera Manager进入“动态资源池配置”
3.设置根root队列的ACL
保存
4.新建队列fayson1
点击“创建”,然后设置ACL
点击“创建”
注意:这里设置fayson2组可以管理fayson1这个队列
5.同样的方式新建fayson2队列
注意:这里管理访问策略不设置,默认集成父队列root的用户/组。
6.点击“刷新动态资源池”,不用重启集群。
4.队列ACL测试
1.使用fayson1用户往队列root.fayson1队列提交作业。
sudo -u fayson1 hive -e "set mapreduce.job.queuename=root.fayson1;select count(*) from hive_table_test;"
(可左右滑动)
运行成功,说明用户可以往自己有权限的队列里提交作业。
2.使用fayson2往root.fayson1队列里提交作业
sudo -u fayson1 hive -e "set mapreduce.job.queuename=root.fayson2;select count(*) from hive_table_test;"
(可左右滑动)
报错,说明用户不能往自己没权限的队列里提交作业。
3.使用fayson2往root.fayson2队列里提交作业,然后使用fayson1用户kill该作业。
sudo -u fayson2 hive -e "set mapreduce.job.queuename=root.fayson2;select count(*) from hive_table_test;"
sudo -u fayson1 yarn application -list
sudo -u fayson1 yarn application -kill application_1528363734538_0007
(可左右滑动)
首先启动作业
再开启一个终端用fayson1用户kill该作业
发现kill作业失败,打开刚开始提交作业的终端发现作业成功转型完毕。
说明如果用户没有队列的管理访问权限,没办法kill该队列里的作业。
5.其他问题测试
1.当我们开启了YARN的ACL后,打开8088界面如果想查看某个作业的详细日志会报错如下:
You (User dr.who) are not authorized to view application application_1528363734538_0007
(可左右滑动)
2.这是因为YARN的8088界面默认使用的是dr.who用户来访问的,如果设置了YARN的ACL,如果想要查看作业的详细日志,需要把dr.who用户加入到yarn.admin.acl里。
3.保存配置修改并重启集群,再次从YARN的8088查看作业,可以成功打开查看。
可以打开查看。
4.我们在第二章“创建队列并进行ACL设置”中,对于root.fayson2队列的“管理访问控制”设置为空,默认继承父队列root的用户/组。
我们使用fayson2往root.fayson2队列提交一个任务,并且使用fayson2用户kill该作业
sudo -u fayson2 hive -e "set mapreduce.job.queuename=root.fayson2;select count(*) from hive_table_test;"
sudo -u fayson2 yarn application -list
sudo -u fayson2 yarn application -kill application_1528366612258_0002
(可左右滑动)
发现kill作业成功,即使该用户/组不在队列的“管理访问控制”里,但是只要是自己提交的作业就能kill自己的作业。
5.我们在第二章“创建队列并进行ACL设置”中,对于root.fayson1队列的“管理访问控制”设置为fayson2,但是在“提交访问控制”中却没有设置fayson2用户/组。
我们使用fayson2用户往root.fayson1队列提交任务。
sudo -u fayson2 hive -e "set mapreduce.job.queuename=root.fayson1;select count(*) from hive_table_test;"
(可左右滑动)
任务执行成功,说明即使该用户不在队列的“提交访问控制”列表里,如果配置在“管理访问控制”中,也可以往该队列提交作业。
6.总结
1.使用Cloudera Manager可以对YARN服务的ACL进行界面化配置,要开启该功能,我们需要同时在YARN服务配置中进行配置,以及对各个队列进行配置。
2.一旦配置了队列的ACL,用户可以往自己有权限的队列里提交作业,如果该队列没权限,则作业提交失败。如果用户没有队列的管理访问权限,没办法kill该队列里的作业。
3.队列会默认继承来自父队列的“提交访问控制”和“管理访问控制”,所以如果要限制用户对队列的的权限,父队列(比如root)也一定要设置,因为父队列的优先级是最高的。当用户往YARN提交作业时,YARN在检查该用户的权限时,会先检查leaf queue(比如我们测试的root.fayson1)有没有权限,如果没有,则往上找父节点(比如root)看有没有权限,如果有,则也可以成功提交任务。
4.某个用户可以一直kill自己提交的作业,即使该用户不在“管理访问控制”的用户/组里。
5.一旦用户具有某个队列的“管理访问控制”,即使他不在“提交访问控制”里,他依旧可以往该队列提交任务。
6.如果开启了YARN的ACL,YARN的8088查看作业详细信息时,会报错,需要把dr.who用户加入到yarn.admin.acl配置里
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操