Stay hungry Stay foolish

Sentry与Hue整合

Posted on By blue

目录



Sentry与Hue整合

一、简介

Hue是一个开源的Apache Hadoop UI系统,由Cloudera Desktop演化而来,最后Cloudera公司将其贡献给Apache基金会的Hadoop社区,基于Python Web框架Django实现的。

通过使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job,执行Hive、Impala的SQL语句,浏览HBase数据库等等。

关于Sentry,在之前的文章里做过介绍,地址:《Sentry介绍》

虽然通过Sentry,可以对数据做到精细化权限控制,但授权操作没有图形化界面,非常不便于后期维护,故使用Hue进行整合。

二、整合步骤

在CDH中安装Sentry、Hue服务

安装前配置:

1、Hive 仓库目录(/user/hive/warehouse )权限配置:

$ sudo -u hdfs hdfs dfs -chmod -R 771 /user/hive/warehouse
$ sudo -u hdfs hdfs dfs -chown -R hive:hive /user/hive/warehouse

2、在 Cloudera Manager 管理控制台中为 HiveServer2 禁用模拟:

  1. 点开 Hive 服务页面
  2. 单击配置选项
  3. 在 HiveServer2 角色组下,取消勾选 HiveServer2 启用模拟属性,并单击保存更改

3、启用 Hive 用户以提交 YARN 作业

  1. 点开 YARN 服务页面
  2. 单击配置选项
  3. 在 NodeManager 角色组下,前往安全类别
  4. 确保允许的系统用户属性包含 hive 用户。如果未包含,则添加 hive,然后单击保存更改。
  5. 如果存在多个 NodeManager 角色组,为与 Hive 关联的 YARN 服务的每一个 NodeManager 角色组。

4、Hive 启用 Sentry 服务

  1. 转至 Hive 服务
  2. 单击配置选项卡
  3. 在广泛范围类别中,设置 Sentry 服务属性为 Sentry

5、为 Sentry 服务配置 HiveServer2

进入Hive服务页面,点击“配置”—>”HiveServer2 Default Group”—>”高级”

添加以下属性至 hive-site.xml,以允许 Hive 服务与 Sentry 策略库进行通信。

<property>
   <name>hive.security.authorization.task.factory</name>
   <value>org.apache.sentry.binding.hive.SentryHiveAuthorizationTaskFactoryImpl</value>
</property>
<property>
   <name>hive.server2.session.hook</name>
   <value>org.apache.sentry.binding.hive.HiveAuthzBindingSessionHook</value>
</property>
<property>
   <name>hive.sentry.conf.url</name>
   <value>file:////sentry-site.xml</value>
</property>
<property>
   <name>hive.security.authorization.task.factory</name>
   <value>org.apache.sentry.binding.hive.SentryHiveAuthorizationTaskFactoryImpl</value>
</property>

6、配置 Hive Metastore,与 Sentry 通信

进入Hive服务页面,点击“配置”—>”Hive Metastore Server Default Group”—>”高级”

添加以下属性至 hive-site.xml 允许 Hive Metastore 与 Sentry 策略库进行通信。

<property>
    <name>hive.metastore.client.impl</name>
    <value>org.apache.sentry.binding.metastore.SentryHiveMetaStoreClient</value>
    <description>Sets custom Hive Metastore client which Sentry uses to filter out metadata.</description>
</property>

<property>  
    <name>hive.metastore.pre.event.listeners</name>  
    <value>org.apache.sentry.binding.metastore.MetastoreAuthzBinding</value>  
    <description>list of comma separated listeners for metastore events.</description>
</property>

<property>
    <name>hive.metastore.event.listeners</name>  
    <value>org.apache.sentry.binding.metastore.SentryMetastorePostEventListener</value>  
    <description>list of comma separated listeners for metastore, post events.</description>
</property>	

完成以上配置后,在CDH中依次添加Sentry、Hue服务

首次进入Hue服务,会要求创建初始用户,根据提示创建”hive”用户、并分配权限。

创建完用户后,在Hue中新建hive组,并将此账号加入到hive组中。

进入后,会看到Hue的界面中已经有Sentry的相关配置:

三、验证权限分配

1、在Hive中创建test1、test2、test3三张测试表,并插入数据。

create table if not exists test1(
name string comment '姓名',
salary float comment '薪水')
comment '测试表'
STORED AS textfile
location '/user/hive/warehouse/test1'

insert into test1 values ('1',1000)

...省略另外两张表创建语句

2、使用hive账户登录hue,创建test1用户、test1组。并点击”Security”—>”Sentry表”,新增权限配置:

  • hive用户拥有test1、test2、test3表 “ALL”权限(所有DDL权限)

  • test1用户只有test1表 “Select”权限

3、使用hive用户登录hue,进入查询界面,可以看到test1、test2、test3三张,并且可以正常的进行Select、Insert、Drop操作。

4、使用test1用户登录hue,进入查询界面,只可以看到test1表,并且只能进行Select操作

当test1用户尝试删除test1表时,页面会提示,无权限进行Drop操作。