
# 准备连接Hive集群配置文件
 #### 准备集群认证用户信息
对于开启Kerberos认证的MRS集群，需提前准备具有相关组件操作权限的用户用于程序认证。
以下Hive权限配置示例供参考，在实际业务场景中可根据业务需求灵活调整。
1. 登录FusionInsight Manager。
2. 选择"集群 \> 服务 \> Hive \> 更多 \> 启用Ranger鉴权"，查看该参数是否置灰。 
   - 是，创建用户并在Ranger中赋予该用户相关操作权限：
     1. 选择"系统 \> 权限 \> 用户 \> 添加用户"，在新增用户界面创建一个机机用户，例如**developuser** 。
        "用户组"需加入"hive"用户组。
        
     
     2. 使用Ranger管理员用户**rangeradmin** 登录Ranger管理页面。
        **rangeradmin** 用户默认密码为"Rangeradmin@123"，详细内容请参见[用户账号一览表](https://support.huaweicloud.com/usermanual-mrs/admin_guide_000239.html)。
        
     
     3. 在首页中单击"Settings"，选择"Roles"。
     
     4. 单击Role Name为admin的角色，在"Users"区域，单击"Select User"，选择[2.a]创建的用户名。
     
     5. 单击Add Users按钮，在对应用户名所在行勾选"Is Role Admin"，单击"Save"保存配置。
        ![](https://support.huaweicloud.com/devg3-mrs/public_sys-resources/note_3.0-zh-cn.png)
        若在对数据库/表进行相关操作时指定了HDFS路径，需参考[表2]在Ranger中给用户添加HDFS路径的相关权限。
        
      
   
   - 否，创建用户并在Manager赋予用户相关操作权限：
     1. 选择"系统 \> 权限 \> 角色 \> 添加角色"。
        1. 填写角色的名称，例如**developrole**。
        
        2. 在"配置资源权限"的表格中选择"*待操作集群的名称* \> Yarn \> 调度队列 \> root"，勾选"default"的"提交"和"管理"，单击"确定"保存。
           ![](https://support.huaweicloud.com/devg3-mrs/public_sys-resources/note_3.0-zh-cn.png)
           若在对数据库/表进行相关操作时指定了HDFS路径，需参考[表2]在Manager中给用户添加HDFS路径的相关权限。
           
         
     
     2. 选择"用户 \> 添加用户"，在新增用户界面，创建一个机机用户，例如**developuser。**
        - "用户组"需加入"hive"用户组。
        
        - "角色"加入[2.a]新增的角色。
         
      
   
   
   
   
3. 使用**admin** 用户登录FusionInsight Manager，选择"系统 \> 权限 \> 用户"，在用户名为**develop** **user**的操作列选择"更多 \> 下载认证凭据"下载认证凭据文件，保存后解压得到该用户的"user.keytab"文件与"krb5.conf"文件。
 
 #### 准备运行环境配置文件
应用程序开发或运行过程中，需通过集群相关配置文件信息连接MRS集群，配置文件通常包括集群组件信息文件以及用于安全认证的用户文件，可从已创建好的MRS集群中获取相关内容。
用于程序调测或运行的节点，需要与MRS集群内节点网络互通，同时配置hosts域名信息。
- 场景一：准备本地Windows开发环境调测程序所需配置文件。
  1. 登录FusionInsight Manager，选择"集群 \> 概览 \> 更多 \> 下载客户端"，"选择客户端类型"设置为"仅配置文件"，根据待安装客户端节点的节点类型选择正确的平台类型后（x86选择**x86_64** ，ARM选择**aarch64** ）单击"确定"，等待客户端文件包生成后根据浏览器提示下载客户端到本地并解压。
     例如，客户端文件压缩包为"FusionInsight_Cluster_1_Services_Client.tar"，解压后得到"FusionInsight_Cluster_1_Services_ClientConfig_ConfigFiles.tar"，继续解压该文件。
     
  
  2. 进入客户端解压路径"Hive\\config"，获取[表1]中相关配置文件。
      表1配置文件 
     | **文件名称**              | **作用**           |
     |:---|:---|
     | hiveclient.properties | Hive客户端连接相关配置参数。 |
     | core-site.xml         | Hadoop客户端相关配置参数。 |
        
     
  
  3. 复制解压目录下的"hosts"文件中的内容到本地hosts文件中。
     ![](https://support.huaweicloud.com/devg3-mrs/public_sys-resources/note_3.0-zh-cn.png)
     - 在应用开发过程中，如需在本地Windows系统中调测应用程序，需要确保本地节点能与"hosts"文件中所列出的各主机在网络上互通。
     
     - 如果当前节点与MRS集群所在网络平面不互通，可以通过绑定EIP的方式访问MRS集群，具体操作请参考[配置Windows通过EIP访问安全模式集群Hive](https://support.huaweicloud.com/devg3-mrs/mrs_07_110043.html)。
     
     - Windows本地hosts文件存放路径举例："C:\\WINDOWS\\system32\\drivers\\etc\\hosts"。
       
   

- 场景二：准备Linux环境运行程序所需配置文件。
  1. 在节点中安装客户端。 例如客户端安装目录为"/opt/client"。
     客户端机器的时间与集群的时间要保持一致，时间差小于5分钟。
     
  
  2. 获取配置文件：
     1. 登录FusionInsight Manager，选择"集群 \> 概览 \> 更多 \> 下载客户端"，"选择客户端类型"设置为"仅配置文件"，根据待安装客户端节点的节点类型选择正确的平台类型后（x86选择**x86_64** ，ARM选择**aarch64**），勾选"仅保存到如下路径"，单击"确定"，下载客户端配置文件至集群主OMS点。
     
     2. 以**root** 用户登录主OMS节点，进入客户端配置文件所在路径（默认为"/tmp/FusionInsight-Client/"），解压软件包后获取"Hive/config"路径下的[表1]中相关配置文件。
        例如客户端软件包为"FusionInsight_Cluster_1_Services_Client.tar"，下载路径为主管理节点的"/tmp/FusionInsight-Client"：
        **cd /tmp/FusionInsight-Client**
        **tar -xvf FusionInsight_Cluster_1_Services_Client.tar**
        **tar -xvf FusionInsight_Cluster_1_Services_ClientConfig_ConfigFiles.tar**
        **cd FusionInsight_Cluster_1_Services_ClientConfig** **_ConfigFiles** **/** **Hive/config**
        
      
  
  3. 检查客户端节点网络连接。 在安装客户端过程中，系统会自动配置客户端节点"hosts"文件，建议检查"/etc/hosts"文件内是否包含集群内节点的主机名信息，如未包含，需要手动复制解压目录下的"hosts"文件中的内容到客户端所在节点的hosts文件中，确保本地机器能与集群各主机在网络上互通。
     
   
 
#### Hive操作权限
在进行应用程序开发之前，使用的用户的基本权限要求是属于Hive组，额外操作权限需从系统管理员处获取，具体权限要求请参见[表2]。用户运行样例程序，需要在default数据库中有CREATE权限。
 表2操作权限要求 
| 操作类型/作用对象 | 操作                                                                      | 权限要求                                                               |
|:---|:---|:---|
| DATABASE  | CREATE DATABASE *dbname* \[LOCATION "hdfs_path"\]                       | 如果指定了HDFS路径hdfs_path，需要是路径hdfs_path的所有者和具有RWX权限。                   |
| DATABASE  | DROP DATABASE *dbname*                                                  | 拥有数据库dbname的所有权。                                                   |
| DATABASE  | ALTER DATABASE *dbname* SET OWNER*user_or_role*                         | 具有admin权限。                                                         |
| TABLE     | CREATE TABLE *table_a*                                                  | 拥有数据库的CREATE权限。                                                    |
| TABLE     | CREATE TABLE *table_a* AS SELECT*table_b*                               | 拥有数据库的CREATE权限，对表table_b拥有SELECT权限。                                |
| TABLE     | CREATE TABLE *table_a* LIKE*table_b*                                    | 拥有数据库的CREATE权限。                                                    |
| TABLE     | CREATE \[EXTERNAL\] TABLE *table_a*LOCATION "hdfs_path"                 | 拥有数据库的CREATE权限，是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。                   |
| TABLE     | DROP TABLE *table_a*                                                    | 是表table_a的所有者。                                                     |
| TABLE     | ALTER TABLE *table_a* SET LOCATION "hdfs_path"                          | 是表table_a的所有者，是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。                    |
| TABLE     | ALTER TABLE *table_a* SET*FILEFORMAT*                                   | 是表table_a的所有者。                                                     |
| TABLE     | TRUNCATE TABLE *table_a*                                                | 是表table_a的所有者。                                                     |
| TABLE     | ANALYZE TABLE *table_a*COMPUTE STATISTICS                               | 对表table_a拥有SELECT和INSERT权限。                                        |
| TABLE     | SHOW TBLPROPERTIES *table_a*                                            | 对表table_a拥有SELECT权限。                                               |
| TABLE     | SHOW CREATE TABLE *table_a*                                             | 对表table_a拥有SELECT且带有WITH GRANT OPTION的权限。                          |
| Alter     | ALTER TABLE *table_a*ADD COLUMN                                         | 是表table_a的所有者。                                                     |
| Alter     | ALTER TABLE *table_a* REPLACE COLUMN                                    | 是表table_a的所有者。                                                     |
| Alter     | ALTER TABLE *table_a*RENAME                                             | 是表table_a的所有者。                                                     |
| Alter     | ALTER TABLE *table_a* SET SERDE                                         | 是表table_a的所有者。                                                     |
| Alter     | ALTER TABLE *table_a*CLUSTER BY                                         | 是表table_a的所有者。                                                     |
| PARTITION | ALTER TABLE *table_a* ADD PARTITION*partition_spec*LOCATION "hdfs_path" | 对表table_a拥有INSERT权限，是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。              |
| PARTITION | ALTER TABLE *table_a* DROP PARTITION*partition_spec*                    | 对表table_a拥有DELETE权限。                                               |
| PARTITION | ALTER TABLE *table_a* PARTITION*partition_spec*SET LOCATION "hdfs_path" | 是表table_a的所有者，是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。                    |
| PARTITION | ALTER TABLE *table_a* PARTITION*partition_spec*SET FILEFORMAT           | 是表table_a的所有者。                                                     |
| LOAD      | LOAD INPATH 'hdfs_path' INTO TABLE *table_a*                            | 对表table_a拥有INSERT权限，是HDFS上的数据路径hdfs_path的所有者和具有RWX权限。              |
| INSERT    | INSERT TABLE *table_a* SELECT FROM*table_b*                             | 对表table_a拥有INSERT权限，对表table_b拥有SELECT权限。拥有Yarn的default队列的Submit权限。 |
| SELECT    | SELECT \* FROM *table_a*                                                | 对表table_a拥有SELECT权限。                                               |
| SELECT    | SELECT FROM *table_a* JOIN*table_b*                                     | 对表table_a、表table_b拥有SELECT权限，拥有Yarn的default队列的Submit权限。            |
| SELECT    | SELECT FROM (SELECT FROM *table_a* UNION ALL SELECT FROM*table_b*)      | 对表table_a、表table_b拥有SELECT权限。拥有Yarn的default队列的Submit权限。            |
| EXPLAIN   | EXPLAIN \[EXTENDED\|DEPENDENCY\] *query*                                | 对相关表目录具有RX权限。                                                      |
| VIEW      | CREATE VIEW *view_name* AS SELECT ...                                   | 对相关表拥有SELECT且带有WITH GRANT OPTION的权限。                               |
| VIEW      | ALTER VIEW *view_name* RENAME TO*new_view_name*                         | 是视图view_name的所有者。                                                  |
| VIEW      | DROP VIEW *view_name*                                                   | 是视图view_name的所有者。                                                  |
| FUNCTION  | CREATE \[TEMPORARY\] FUNCTION *function_name*AS 'class_name'            | 具有admin权限。                                                         |
| FUNCTION  | DROP \[TEMPORARY\] *function_name*                                      | 具有admin权限。                                                         |
| MACRO     | CREATE TEMPORARY MACRO *macro_name* ...                                 | 具有admin权限。                                                         |
| MACRO     | DROP TEMPORARY MACRO *macro_name*                                       | 具有admin权限。                                                         |
   
![](https://support.huaweicloud.com/devg3-mrs/public_sys-resources/note_3.0-zh-cn.png)
- 以上所有的操作只要拥有Hive的admin权限以及对应的HDFS目录权限就能做相应的操作。
- 如果当前组件使用了Ranger进行权限控制，需基于Ranger配置相关策略进行权限管理。
 
