
# 配置Hive元数据存储至RDS
本章节指导用户将现有集群的Hive元数据切换为RDS数据库中存储的元数据。该操作可以使多个MRS集群共用同一份元数据，且元数据不随集群的删除而删除，也能够避免集群迁移时Hive元数据的迁移。
#### 创建并配置RDS实例
1. 登录RDS管理控制台，购买RDS实例，具体操作请参考[购买实例](https://support.huaweicloud.com/usermanual-rds-mysql/rds_10_0028.html)。
   
   - 为了保证集群和MySQL或PostgreSQL数据库的网络访问，建议该实例与MRS集群的虚拟私有云和子网一致。
   
   - RDS实例的安全组入方向规则需要放通MySQL（默认为"3306"）和PostgreSQL（默认为"5432"）数据库端口。 例如，可通过在RDS控制台单击实例名称进入实例基本信息页面，在"连接信息"区域单击"安全组"右侧的安全组名称进入安全组控制台，在入方向规则页签中添加一个"协议端口"为TCP 3306，"源地址"为Hive的MetaStore实例所在的所有节点IP的规则。
     
   
   - Hive支持对接RDS服务MySQL和PostgreSQL数据库，版本号为：**MySQL 5.7.x、MySQL 8.0** 和**PostgreSQL** **14**。
   
   
   
   
2. 在RDS管理控制台，选择"实例管理"，选择MRS数据连接使用的RDS实例所在行的操作列的"登录"，以**root** 用户登录该实例。
   
   图1登录RDS实例   
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002256416966.png "点击放大")
   
   
3. 在实例"首页"即可单击"新建数据库"创建新的数据库。 
   ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/warning_3.0-zh-cn.png)
   如果没有创建新的数据库，会导致MRS配置数据连接失败。
   图2新建数据库   
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002291017177.png "点击放大")
   
   
4. 在页面顶部选择"账号管理 \> 用户管理"。 
   - 对于MRS 3.x之前版本，当用户选择的数据连接为"RDS服务MySQL数据库"时，请确保使用的数据库用户为**root** 用户。如果为非**root** 用户，请参考[步骤 5]\~[步骤 6]新建用户并为该用户进行赋权。
   
   - 对于MRS 3.x及之后版本，当用户选择的数据连接为"RDS服务MySQL数据库"时，数据库用户不允许为**root** 用户，请参考[步骤 5]\~[步骤 6]新建用户并为该用户进行赋权。
   
   
   
   
5. 单击"新建用户"，创建一个非**root** 用户，并勾选"全局权限"中所有的权限，其他参数根据实际需要配置。
   
   图3创建用户   
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002256416974.png "点击放大")
   
   
6. 在页面顶部选择"SQL操作 \> SQL查询"，在"库名"处切换对应数据库，然后执行如下SQL命令为该数据库用户进行赋权，其中${db_name}与${db_user}为MRS待连接的数据库名和新建的用户名。
   
   ```
   grant all privileges on ${db_name}.* to '${db_user}'@'%' with grant option;
   grant reload on *.* to '${db_user}'@'%' with grant option;
   flush privileges;
   ```
   图4为数据库用户赋权   
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002256360026.png "点击放大")
   
   
 
 #### 为已有MRS集群创建RDS数据连接
该步骤指导用户为当前已有的MRS集群创建RDS数据连接。
1. 登录[MRS管理控制台](https://console.huaweicloud.com/mrs/)。
2. 在导航栏选择"数据连接"。
3. 单击"新建数据连接 "。
4. 参考[表1]配置相关参数。
   
    表1数据连接 
   | 参数    | 示例       | 说明                                                                                                                                                                                                                                                                                                                                                                                       |
   |:---|:---|:---|
   | 类型    | -        | 选择外部源连接的类型。 - RDS服务PostgreSQL数据库：安装了Hive组件的集群支持连接该类型数据库。  - RDS服务MySQL数据库：安装了Hive或Ranger组件的集群支持连接该类型数据库。   |
   | 名称    | newtest  | 数据连接的名称。                                                                                                                                                                                                                                                                                                                                                                                 |
   | 数据库实例 | -        | RDS服务数据库实例，该实例需要先在RDS服务创建后在此处引用，且已创建数据库，具体请参考[创建并配置RDS实例](https://support.huaweicloud.com/usermanual-mrs/mrs_01_24051.html#mrs_01_24051__section2148142712914)。单击"查看数据库实例"查看已创建的实例。                                                                                                                                                                                                      |
   | 数据库   | dataname | 待连接的数据库的名称。                                                                                                                                                                                                                                                                                                                                                                              |
   | 用户名   | datauser | 登录待连接的数据库的用户名。                                                                                                                                                                                                                                                                                                                                                                           |
   | 密码    | -        | 登录待连接的数据库的密码。                                                                                                                                                                                                                                                                                                                                                                            |
      
   当用户选择的数据连接为"RDS服务MySQL数据库"时，请确保使用的数据库用户为**root** 用户。如果为非**root** 用户，请参考[创建并配置RDS实例](https://support.huaweicloud.com/usermanual-mrs/mrs_01_24051.html#mrs_01_24051__section2148142712914)操作。
   
   
5. 单击"确定"完成创建。
 
#### 配置Hive数据连接
该功能在MRS 3.0.5版本暂不支持。
1. 登录[MRS管理控制台](https://console.huaweicloud.com/mrs/)。
2. 在导航栏选择"现有集群"。
3. 单击集群名称，进入集群详情页面。
4. 在集群详情页的"概览"页签，单击"数据连接"右侧的"单击管理"。
5. 在"数据连接"页面显示集群已关联的数据连接，单击"解绑"可对已关联的数据连接进行删除。 
   ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
   解绑外置元数据操作会导致业务运行失败，请在业务空闲期或确认操作无影响后再执行本操作。
   
   
6. 若"数据连接"页面没有关联连接，单击"配置数据连接"进行增加。 
   一种模块类型只能配置一个数据连接，如在Hive元数据上配置了数据连接后，不能再配置其他的数据连接。当没有可用的模块类型时，"配置数据连接"按钮不可用。
   表2配置Hive数据连接 
   | 参数   | 说明                                                                                                                                                                                                                                                                                        |
   |:---|:---|
   | 类型   | Hive                                                                                                                                                                                                                                                                                      |
   | 模块类型 | Hive元数据                                                                                                                                                                                                                                                                                   |
   | 连接类型 | - RDS服务PostgreSQL数据库（1.9.x版本支持）  - RDS服务MySQL数据库  - 本地数据库   |
   | 连接实例 | 当"连接类型"参数选择"RDS服务PostgreSQL数据库"或"RDS服务MySQL数据库"时有效。选择MRS集群与RDS服务数据库连接名称，该连接必须先创建才能在此处引用。可单击"创建数据连接"进行创建，具体请参考[为已有MRS集群创建RDS数据连接]。                                                                                                                  |
      
   图5配置数据连接   
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002150872008.png "点击放大")
   
   
7. 单击"测试"，测试此数据连接和集群的连通性。
8. 连接成功后单击"确定" 完成配置数据连接。
9. 如果对接的是RDS for PostgreSQL数据库，则需上传PostgreSQL对应的开源驱动包到所有MetaStore实例所在节点中，替换集群已有的驱动包： 
   将驱动包"postgresql-42.2.5.jar"上传至所有MetaStore实例节点"${BIGDATA_HOME}/third_lib/Hive"目录下（开源驱动包下载地址：<https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.5/>）。
   
   
10. MRS 3.3.0及之后版本如果需要将Hive元数据存储到RDS PostgreSQL数据库中，还需要登录到所有的MetaStore实例节点执行以下命令替换SQL文件内容： 
    **sed -i 's#PRIMARY KEY ("MAPPING_ID"),#PRIMARY KEY (MAPPING_ID),#g' $BIGDATA_HOME/FusionInsight_Current/\*_MetaStore/install/hive-3.1.0/scripts/metastore/upgrade/postgres/hive-schema-3.1.0.postgres.sql**
    **sed -i 's#UNIQUE ("CAT_NAME", "DB_NAME", "TBL_NAME")#UNIQUE (CAT_NAME, DB_NAME, TBL_NAME)#g' $BIGDATA_HOME/FusionInsight_Current/\*_MetaStore/install/hive-3.1.0/scripts/metastore/upgrade/postgres/hive-schema-3.1.0.postgres.sql**
    
    
11. 在集群详情页面，选择"组件管理 \> Hive"。 
    MRS 3.2.0-LTS及之后版本，如果是多套MRS集群对接同一个RDS的场景，需选择"服务配置"，切换右上方"基础配置"为"全部配置"，在左侧导航栏选择"MetaStore \> 自定义"，在自定义参数"hive.metastore.customized.configs"中新增"metastore.whether.query.all.tokens"配置项，值为"false"，单击"保存配置"。
    
    
12. 在"服务状态"详情页面，选择"更多 \> 重启服务"，单击"确定"重启Hive服务。 
    - 若未同步IAM用户，需在集群详情页的"概览"页签，单击"IAM用户同步"右侧的"同步"进行IAM用户同步再重启Hive服务。
    
    - 重启Hive服务后，Hive会在指定的数据库下创建Hive必须的数据库表（如表已经存在则不会创建）。
    
    
    
    
 
#### Hive元数据外置验证
1. 登录安装了Hive客户端的节点，执行以下命令，认证的用户需具有创建Hive表的权限： 
   切换至客户端安装目录：
   ```
   cd 客户端安装目录
   ```
   加载环境变量：
   ```
   source bigdata_env
   ```
   认证用户，未开启Kerberos认证的集群请跳过此操作：
   ```
   kinit 业务用户
   ```
   
   
2. 执行以下命令登录Hive客户端： 
   ```
   beeline
   ```
   
   
3. 执行以下命令创建Hive表并向表中插入数据：
   
   创建表：
   ```
   create table user_info(id string,name string,gender string,age int,addr string);
   ```
   插入数据：
   ```
   insert into table user_info(id,name,gender,age,addr) values("12005000201","A","man",19,"city");
   ```
   
   
4. 在对接的RDS MySQL实例的数据库的"SQL查询"页面执行以下命令： 
   ```
   select * from tbls;
   ```
   如果查询结果中显示[步骤 3]创建的Hive表信息，则表示Hive元数据外置到RDS MySQL成功。
   图6查询表信息成功   
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002271737592.png "点击放大")
   
   
 
