我正在参加「掘金·启航计划」。
背景
需要使用ranger管理hive权限,毕竟ranger管理yarn队列写了,这个也写一下吧。
目的
Hive是Hadoop集群最常用的组件之一,可以实现基于Hadoop的数据仓库。OCDP对于Hive的多租户支持除了需要配置YARN和HDFS多租户之外,还支持对Hive表,列的细粒度权限访问控制。
配置
Hive的多租户方案的结构如下图所示:
图1 Hive多租户架构
多个租户包括Hive用户和其它应用的用户向Hadoop集群提交作业时:
· 由YARN调度器对多租户进行资源分配。如上图1所示,Hive用户1和其他用户通过配置各自的队列,保证了资源的有效分配。队列的访问控制由Ranger实现。
· 多租户对HDFS数据的访问控制由Ranger实现
多租户对Hive数据库、表、列的访问控制由Ranger实现。因此,对于Hive的数据访问有两层,即对HDFS存储数据的访问控制和对Hive逻辑表的访问控制。
配置多租户资源和安全访问控制如下:
a. 在Ranger中配置HDFS中Hive数据存放的文件(/apps/hive) 访问权限。配置方法参考上节HDFS多租户中的配置。
b. 在Ambari YARN队列管理视图中增加一个队列用于对Hive应用的资源分配。增加和配置队列方法参考上节中配置YARN多租户的方法。
c. 在Ambari中打开Ranger配置界面(Ranger->Configs->Advanced-> Hive Ranger Plugin),打开Hive Ranger Plugin。保存配置并重启受影响的组件。
图2 配置Hive Ranger Plugin
d. 打开Ranger界面,在Access Manager->Resource Based Policies下,选择HIVE->OCDP_hive,创建新策略(Add New Policy)。配置策略名,输入需要设定访问控制的表、列等,在用户和用户组权限中选择用户,或者组,并赋予相应的权限,如下图所示。
列访问设置
行过滤
图3 Ranger配置Hive访问权限
如果没有绑定用户和YARN队列,那么在连接命令中需要指定此Hive应用需要执行在哪个队列中(mapreduce.job.queuename)。如果不指定队列,默认会将Hive应用提交到default队列。