一、背景 yarn层面做queue资源隔离,是为了划分不同资源给不同开发人员,甚至不同团队的人。 1、用户默认队列配置 某个用户或者某个小组的成员,默认情况下,提交到指定的队列中(而不是提交到root.default中) 2、队列权限配置 某个用户或者某个小组的成员,只能把任务提交到指定的队列中(队列权限) 3、hadoop group mapping 我们后续的配置中,会有用户组的权限配置,所以这里要特地说明下组映射的事情 hadoop默认是拿namenode所在机器的linux用户的用户组信息,也就是说master机器上有一个用户是lsr,他的组是bigroup,那么可以执行命令查看hadoop是否能够识别这个用户的组信息,如下图(识别成功):
当然如果后续做了hive或者其他引擎(presto等)的ldap用户认证,想在ranger中配置ldap组的权限,还需要把hadoop的group mapping配置成ldap的。
Hadoop Groups Mapping:https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/GroupsMapping.html
二、队列权限 hadoop官网:https://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html 所以核心点,我们需要通过如上这两个参数来设置每个队列允许哪些用户提交任务 假设我希望让lzc用户并且bigdata能往root.bi这个队列中提交任务(创建队列bi,我就不在这里说了,这个比较简单网上文章还是比较丰富的),其他用户和用户组都不可以,那么具体设置如下: 1、设置parent queue权限 因为子队列权限收到父队列权限影响,假设子队列权限设置了一堆,结果父队列权限写了个*(允许所有用户提交任务),那么子队列的权限不会起任何作用 理论上任何队列都是root的子队列,yanr的default,也是root.default,所以要让所有用户都不能往root上提交 在capacity-scheduler.xml中配置:
<property>
<name>yarn.scheduler.capacity.root.acl_submit_applications</name>
<value> </value>
</property>
<property>
<name>yarn.scheduler.capacity.root.acl_administer_queue</name>
<value> </value>
</property>
这样父队列就是所有用户都拒绝了,然后我们就可以配置各自子队列的权限了. 2、设置子queue权限 acl_administer_queue和acl_submit_applications区别,admin的权限更高,除了可以提交任务之外,还有杀掉任务的能力,但是建议还是两个配置的value都一样
<property>
<name>yarn.scheduler.capacity.root.bi.acl_submit_applications</name>
<value>lzc bigdata</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.bi.acl_administer_queue</name>
<value>lzc bigdata</value>
</property>
<property>
3、没权限提交到bi队列会报错 三、用户/用户组默认队列 默认情况下,用户不配置提交的队列,那么就会把任务提交到root.default中,队列的映射关系是从左到右,先匹配上的就先生效 ,配置的方式如下: 1、用户映射到某个队列
<property>
<name>yarn.scheduler.capacity.queue-mappings</name>
<value>u:lzc:bi</value>
</property>
2、用户组映射到某个队列
<property>
<name>yarn.scheduler.capacity.queue-mappings</name>
<value>u:lsr:bi,g:bigdata:bi</value>
</property>
完整的CapacityScheduler配置文件如下:
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>0.25</value>
</property>
<property>
<name>yarn.scheduler.capacity.node-locality-delay</name>
<value>-1</value>
</property>
<property>
<name>yarn.scheduler.capacity.maximum-applications</name>
<value>10000</value>
</property>
<property>
<name>yarn.scheduler.capacity.queue-mappings-override.enable</name>
<value>false</value>
</property>
<property>
<name>yarn.scheduler.capacity.queue-mappings</name>
<value>u:lzc:bi</value>
</property>
<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,bi</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.acl_submit_applications</name>
<value> </value>
</property>
<property>
<name>yarn.scheduler.capacity.root.acl_administer_queue</name>
<value> </value>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>50</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.user-limit-factor</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.acl_administer_queue</name>
<value> </value>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
<value>50</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.state</name>
<value>RUNNING</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.acl_submit_applications</name>
<value> </value>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.maximum-am-resource-percent</name>
<value>0.25</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.bi.minimum-user-limit-percent</name>
<value>100</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.bi.user-limit-factor</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.bi.maximum-applications</name>
<value>10000</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.bi.acl_submit_applications</name>
<value>lzc bigdata</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.bi.acl_administer_queue</name>
<value>lzc bigdata</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.bi.maximum-am-resource-percent</name>
<value>0.25</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.bi.capacity</name>
<value>50</value>
</property>
</configuration>
感谢耐心观看,有不足之处可以指导下。谢谢。 特别鸣谢lsr40的支持。
|