kerberos解决了认证的问题,sentry解决了授权的问题。但是sentry的授权是按照角色和组来的,不支持按用户。所以我们还需要解决用户和组的映射问题。使用哪种映射方式由hadoop的hadoop.security.group.mapping参数决定。该参数默认为org.apache.hadoop.security.ShellBasedUnixGroupsMapping即基于操作系统的用户和组映射。
在linux上由NameNode所在服务器执行bash -c groups命令决定。
详见https://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/GroupsMapping.html
在开发环境,还可以直接在配置文件中使用hadoop.user.group.static.mapping.overrides参数来指定指定用户和组的映射关系,例如:user1=group1,group2;user2=;user3=group2.如果在此处配置了用户和组的关系,会覆盖group mapping service provider提供的组映射。对于在此处存在的用户和组关系会直接返回,而无需进一步查询group mapping service provider。
而在生产环境中,通常采用LdapGroupsMapping。
本文以OpenLDAP为例,讲述配置过程。
有关LDAP的安装及配置,后续有机会在分享,现在大家请自行解决。
迁移现有帐号
在切换为LdapGroupsMapping之前,我们必须将CDH集群已有的服务帐号(例如hive/hdfs/mapred等)导入LDAP中,否则相关服务无法正常工作。
好在我们可以使用migrationtools来导入,方法如下