Ranger简介中介绍了E-MapReduce中创建和启动Ranger服务的集群,以及一些准备工作。本文介绍Hive的访问模型及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集成Ranger

  1. Ranger启用Hive。
    1. 登录阿里云E-MapReduce控制台
    2. 在顶部菜单栏处,根据实际情况选择地域(Region)和资源组
    3. 单击上方的集群管理页签。
    4. 集群管理页面,单击相应集群所在行的详情
    5. 在左侧导航栏单击集群服务 > RANGER
    6. 单击右侧的操作下拉菜单,选择启用Hive
      start_hive
    7. 执行集群操作对话框设置相关参数,然后单击确定
      单击右上角查看操作历史查看任务进度,等待任务完成。查看操作历史
      说明 Enable Hive Plugin并重启Hive后,则HiveServer2场景或HiveClient场景(Storage Based Authorization)都进行了相关的配置,HiveServer2场景使用Ranger进行权限配置,HiveClient场景需要借助HDFS权限进行控制,HDFS的权限可参见HDFS配置进行开启。
  2. Ranger UI添加Hive service。
    1. 进入Ranger UI页面,详情请参见Ranger简介
    2. 在Ranger的UI页面添加Hive Service。
      Ranger UI
    3. 配置相关参数。
      添加Hive Service
      参数 说明
      Service Name 固定值emr-hive。
      Username 固定值hadoop。
      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
  3. 重启Hive。
    上述任务完成后,需要重启Hive才生效。
    1. 左侧导航栏单击集群服务 > Hive
    2. 单击右上角操作下拉菜单,选择重启 All Components
    3. 执行集群操作对话框设置相关参数,然后单击确定
      单击右上角查看操作历史查看任务进度,等待任务完成。

权限配置示例

上面一节中已经将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 UserhuGroup会自动从集群中同步过来,大约需要一分钟,用户可以事先将它们添加到集群。
    Select User
    Permissions 选择授予的权限。
  4. 单击add
    添加一个Policy后,就实现了对foo的授权,然后foo用户就可以对testdb.test的表进行访问了。