
# 配置Hive业务使用其他组件的用户权限
#### 操作场景
Hive业务还可能需要关联使用其他组件，例如HQL语句触发MapReduce任务需要设置Yarn权限，或者Hive over HBase的场景需要HBase权限。以下介绍Hive关联Yarn和Hive over HBase两个场景下的权限配置操作。
#### 约束与限制
- 集群已启用Kerberos认证（安全模式）的Yarn和HBase的权限管理默认是开启的，因此集群已启用Kerberos认证（安全模式）默认需要配置Yarn和HBase权限。
- 集群未启用Kerberos认证（普通模式）的Yarn和HBase的权限管理默认是关闭的，即任何用户都有权限，因此集群未启用Kerberos认证（普通模式）默认不需要配置Yarn和HBase权限。如果用户修改了Yarn或者HBase的配置来开启权限管理，则修改后也需要配置Yarn和HBase权限。
- 如果当前组件使用了Ranger进行权限控制，须基于Ranger配置相关策略进行权限管理，具体操作可参考[添加Hive的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1858.html)。
 
#### 前提条件
- 已完成Hive客户端的安装，例如安装目录为"/opt/client"。
- 已获取一个拥有管理员权限的用户，例如"admin"。
 
#### 操作步骤
**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"的"查询"，单击"确定"保存。
**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-lts-mrs/mrs_01_1858.html)。
4. 以客户端安装用户，登录安装客户端的节点。
5. 执行以下命令，配置环境变量。 
   **source /opt/client/bigdata_env**
   
   
6. 执行以下命令，认证用户。 
   **kinit hbase_creates_user**
   
   
7. 执行以下命令，进入Hive客户端： 
   **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;**
    
    
 
