
# 配置Hive业务使用其他组件的用户权限
#### 操作场景
Hive业务还可能需要关联使用其他组件，例如HQL语句触发MapReduce任务需要设置Yarn权限，或者Hive over HBase的场景需要HBase权限。以下介绍Hive关联Yarn和Hive over HBase两个场景下的操作。
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
- 安全模式下Yarn和HBase的权限管理默认是开启的，因此在安全模式下默认需要配置Yarn和HBase权限。
- 在普通模式下，Yarn和HBase的权限管理默认是关闭的，即任何用户都有权限，因此普通模式下默认不需要配置Yarn和HBase权限。如果用户修改了YARN或者HBase的配置来开启权限管理，则修改后也需要配置Yarn和HBase权限。
- MRS 3.x及后续版本支持Ranger，如果当前组件使用了Ranger进行权限控制，须基于Ranger配置相关策略进行权限管理，具体操作可参考[添加Hive的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_1858.html)。
 
#### 前提条件
- 完成Hive客户端的安装。例如安装目录为"/opt/client"。
- 获取一个拥有管理员权限的用户，例如"admin"。
 
#### 操作步骤
**MRS 3.x之前版本，Hive关联** **Yarn**
用户如果执行**insert，** **count** ，**distinct** ，**group by** ，**order by** ，**sort by** 或**join** 等语句时，将触发MapReduce任务，需要设置Yarn权限。以授予角色在表"thc"执行**count**语句的权限为例，操作步骤如下：
1. 在MRS Manager角色界面创建一个角色。
2. 在"权限"的表格中选择"Yarn \> Scheduler Queue \> root"。
3. 在"default"队列的"权限"列，勾选"Submit"，单击"确定"保存。
4. 在"权限"的表格中选择"Hive \> Hive Read Write Privileges \> default"，勾选表"thc"的"Select"，单击"确定"保存。
**MRS 3.x及后续版本，Hive关联** **Yarn**
用户如果执行**insert，** **count** ，**distinct** ，**group by** ，**order by** ，**sort by** 或**join** 等语句时，将触发MapReduce任务，需要设置Yarn权限。以授予角色在表"thc"执行**count**语句的权限为例，操作步骤如下：
1. 在FusionInsight Manager角色界面创建一个角色。
2. 在"配置资源权限"的表格中选择"*待操作集群的名称* \> Yarn \> 调度队列 \> root"。
3. 在"default"队列的"权限"列，勾选"提交"，单击"确定"保存。
4. 在"配置资源权限"的表格中选择"*待操作集群的名称* \> Hive \> Hive读写权限 \> default"，勾选表"thc"的"查询"，单击"确定"保存。
**MRS 3.x之前版本，Hive over HBase授权**
用户如果需要使用类似SQL语句的方式来操作HBase表，授予权限后可以在Hive中使用HQL命令访问HBase表。以授予用户在Hive中查询HBase表的权限为例，操作步骤如下
1. 在MRS Manager角色管理界面创建一个HBase角色，例如"hive_hbase_create"，并授予创建HBase表的权限。 
   在"权限"的表格中选择"HBase \> HBase Scope \> global"，勾选命名空间"default"的"Create"，单击"确定"保存。
   
   
2. 在MRS Manager用户管理界面创建一个"人机"用户，例如"hbase_creates_user"，加入"hive"组，绑定角色"hive_hbase_create"，用于创建Hive表和HBase表。
3. 请根据客户端所在位置，参考[安装客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0091.html)章节，登录安装客户端的节点。
4. 执行以下命令，配置环境变量。 
   **source /opt/client/bigdata_env**
   
   
5. 执行以下命令，认证用户。 
   **kinit hbase_creates_user**
   
   
6. 执行以下命令，进入Hive客户端shell环境： 
   **beeline**
   
   
7. 执行以下命令，同时在Hive和HBase中创建表。例如创建表"thh"。 
   **CREATE TABLE thh(id int, name string, country string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES("hbase.columns.mapping" = "cf1:id,cf1:name,:key") TBLPROPERTIES ("hbase.table.name" = "thh");**
   创建好的Hive表和HBase表分别保存在Hive的数据库"default"和HBase的命名空间"default"。
   
   
8. 在MRS Manager角色管理界面创建一个角色，例如"hive_hbase_select"，并授予查询Hive表"thh"和HBase表"thh"的权限。 
   1. 在"权限"的表格中选择"HBase \> HBase Scope \> global \> default"，勾选表"thh"的"read"，单击"确定"保存，授予HBase角色查询表的权限。
   
   2. 编辑角色，在"权限"的表格中选择"HBase \> HBase Scope \> global \> hbase"，勾选表"hbase:meta"的"Execute"，单击"确定"保存。
   
   3. 编辑角色，在"权限"的表格中选择"Hive \> Hive Read Write Privileges \> default"，勾选表"thh"的"Select"，单击"确定"保存。
   
   
   
   
9. 在MRS Manager用户管理界面创建一个"人机"用户，例如"hbase_select_user"，加入"hive"组，绑定角色"hive_hbase_select"，用于查询Hive表和HBase表。
10. 执行以下命令，配置环境变量。 
    **source /opt/client/bigdata_env**
    
    
11. 执行以下命令，认证用户。 
    **kinit hbase_select_user**
    
    
12. 执行以下命令，进入Hive客户端shell环境。 
    **beeline**
    
    
13. 执行以下命令，使用Hive的HQL语句查询HBase表的数据。 
    **select \* from thh;**
    
    
**MRS3.x及后续版本，Hive over HBase授权**
用户如果需要使用类似SQL语句的方式来操作HBase表，授予权限后可以在Hive中使用HQL命令访问HBase表。以授予用户在Hive中查询HBase表的权限为例，操作步骤如下
1. 在FusionInsight Manager角色管理界面创建一个HBase角色，例如"hive_hbase_create"，并授予创建HBase表的权限。 
   在"配置资源权限"的表格中选择"*待操作集群的名称* \> HBase \> HBase Scope \> global"，勾选命名空间"default"的"创建"，单击"确定"保存。
   
   
2. 在FusionInsight Manager用户管理界面创建一个"人机"用户，例如"hbase_creates_user"，加入"hive"组，绑定角色"hive_hbase_create"，用于创建Hive表和HBase表。
3. 如果当前组件使用了Ranger进行权限控制，需给"hive_hbase_create"或"hbase_creates_user"配置"Create"权限，具体操作可参考[添加Hive的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_1858.html)。
4. 以客户端安装用户，登录安装客户端的节点。
5. 执行以下命令，配置环境变量。 
   **source /opt/client/bigdata_env**
   
   
6. 执行以下命令，认证用户。 
   **kinit hbase_creates_user**
   
   
7. 执行以下命令，进入Hive客户端shell环境： 
   **beeline**
   
   
8. 执行以下命令，同时在Hive和HBase中创建表。例如创建表"thh"。 
   **CREATE TABLE thh(id int, name string, country string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES("hbase.columns.mapping" = "cf1:id,cf1:name,:key") TBLPROPERTIES ("hbase.table.name" = "thh");**
   创建好的Hive表和HBase表分别保存在Hive的数据库"default"和HBase的命名空间"default"。
   
   
9. 在FusionInsight Manager角色管理界面创建一个角色，例如"hive_hbase_select"，并授予查询Hive表"thh"和HBase表"thh"的权限。 
   1. 在"配置资源权限"的表格中选择"*待操作集群的名称* \> HBase \> HBase Scope \> global \> default"，勾选表"thh"的"读"，单击"确定"保存，授予HBase角色查询表的权限。
   
   2. 编辑角色，在"配置资源权限"的表格中选择"*待操作集群的名称* \> HBase \> HBase Scope \> global \> hbase"，勾选表"hbase:meta"的"执行"，单击"确定"保存。
   
   3. 编辑角色，在"配置资源权限"的表格中选择"*待操作集群的名称* \> Hive \> Hive读写权限 \> default"，勾选表"thh"的"查询"，单击"确定"保存。
   
   
   
   
10. 在FusionInsight Manager用户管理界面创建一个"人机"用户，例如"hbase_select_user"，加入"hive"组，绑定角色"hive_hbase_select"，用于查询Hive表和HBase表。
11. 执行以下命令，配置环境变量。 
    **source /opt/client/bigdata_env**
    
    
12. 执行以下命令，认证用户。 
    **kinit hbase_select_user**
    
    
13. 执行以下命令，进入Hive客户端shell环境。 
    **beeline**
    
    
14. 执行以下命令，使用Hive的HQL语句查询HBase表的数据。 
    **select \* from thh;**
    
    
 
