Ranger简介中介绍了E-MapReduce中创建和启动Ranger服务的集群,以及一些准备工作,本节介绍Hive集成Ranger的步骤流程。

Hive集成Ranger

  • Hive访问模型

    用户可以通过三种方式访问Hive数据,包括HiveServer2、Hive Client和HDFS。

    • HiveServer2方式
      • 场景: 用户只能通过HiveServer2访问Hive数据,不能通过Hive Client和HDFS访问。
      • 方式:使用beeline客户端或者JDBC代码通过HiveServer2去执行相关的Hive脚本。
      • 权限设置:

        Hive官方自带的Hive授权就是针对HiveServer2使用场景进行权限控制的。

        Ranger中对Hive的表/列级别的权限控制也是针对HiveServer2的使用场景,如果用户还可以通过Hive Client或者HDFS访问Hive数据,仅仅对表/列层面做权限控制还不够,还需要下面两种方式的一些设置进一步控制权限。

    • Hive Client方式
      • 场景: 用户可以通过Hive Client访问Hive数据。
      • 方式: 使用Hive Client访问。
      • 权限设置:

        Hive Client会请求HiveMetaStore进行一些DDL操作(如 Alter Table Add Columns等),也会通过提交MapReduce作业读取HDFS中的数据进行处理。

        Hive官方自带的Hive授权就是针对Hive Client使用场景进行的权限控制,它会根据SQL中表的HDFS路径的读写权限来决定该用户是否可以进行相关的DDL/DML操作,如ALTER TABLE test ADD COLUMNS(b STRING)

        Ranger中可以对Hive表的HDFS路径进行权限控制,加上HiveMetaStore配置Storage Based Authorization,从而可以实现对Hive Client访问场景的权限控制。

        说明 Hive Client场景的DDL操作权限实际也是通过底层HDFS权限控制,所以如果用户有HDFS权限,则也会有对应表的DDL操作权限(如Drop Table/Alter Table等)。
    • HDFS方式
      • 场景: 用户可以直接访问HDFS。
      • 方式: HDFS客户端/代码等。
      • 权限设置:

        用户可以直接访问HDFS,则需要对Hive表的底层HDFS数据增加HDFS的权限控制。

        通过Ranger对Hive表底层的HDFS路径进行权限控制,详情请参见权限配置示例

  • 启用Hive。
    1. 登录阿里云E-MapReduce控制台
    2. 单击上方的集群管理
    3. 集群管理页面,单击相应集群所在行的详情
    4. 在左侧导航栏单击集群服务 > RANGER
    5. 单击右侧的操作下拉菜单,选择 启用Hivestart_hive
    6. 在弹出框输入备注信息,然后单击确定

      单击右上角查看操作历史查看任务进度,等待任务完成。

      查看操作历史
      说明 Enable Hive Plugin并重启Hive后,则HiveServer2场景/HiveClient场景(Storage Based Authorization)的都进行了相关的配置,HDFS的权限可参见HDFS配置进行开启。
  • 重启Hive

    上述任务完成后,需要重启Hive才生效。

    1. 左侧导航栏单击集群服务 > Hive
    2. 单击右上角操作下拉菜单,选择重启 All Components
    3. 在弹出框输入执行Commit记录,然后单击确定
    4. 单击右上角查看操作历史查看任务进度,等待重启任务完成。
  • Ranger UI添加Hive service
    1. 进入Ranger UI页面,详情请参见Ranger简介
    2. 在Ranger的UI页面添加Hive Service。Ranger UI
    3. 配置相关参数。添加Hive Service
      参数 说明
      Service Name 固定值emr-hive。
      Username 自定义。
      Password 自定义。
      jdbc.driverClassName 默认值org.apache.hive.jdbc.HiveDriver。无需修改。
      jdbc.url
      • 标准集群: jdbc:hive2://emr-header-1:10000/
      • 高安全集群:jdbc:hive2://${master1_fullhost}:10000/;principal=hive/${master1_fullhost}@EMR.$id.COM
      说明 ${master1_fullhost} 为 master 1 的长域名,可登录 master 1 执行hostname命令获取,${master1_fullhost} 中的数字即为 $id 的值。
      Add New Configurations
      • Name:固定值policy.download.auth.users
      • Value:hadoop(标准集群)、hive(高安全集群)。
      说明 测试连接失败时,可忽略。
    4. 单击Add

权限配置示例

上面一节中已经将Ranger集成到Hive,现在可以进行相关的权限设置。例如给用户foo授予表testdb.test的a列Select权限。

  1. 单击配置好的 emr-hive权限配置示例
  2. 单击右上角的Add New Policy
  3. 配置相关权限。 配置相关权限
    参数 说明
    Policy Name Policy的名称。可自定义。
    database 添加Hive中的数据库,例如:testdb。
    table 添加表,例如:test。
    Hive Column 可添加列名。填写*时表示所有列。
    Select Group User/Group 会自动从集群中同步过来,大约需要一分钟,用户可以事先将它们添加到集群。
    Select User
    Permissions 选择授予的权限。
  4. 单击add。添加一个Policy后,就实现了对foo的授权,然后用户foo就可以对testdb.test的表进行访问了。
    说明 Policy添加后需要1分钟左右才会生效。