
# 配置Doris对接Hive数据源
通过连接Hive Metastore，或者兼容Hive Metastore的元数据服务，Doris可以自动获取Hive库表信息，并进行表数据查询，从而避免了传统外部数据目录多需要手动映射以及数据迁移的复杂工程。
CloudTable目前不支持S3协议，推荐使用OBS协议创建Hive Catalog。
#### 约束与限制
Doris 3.0.6版本，使用Hive Catalog查询MRS Hive表时，Hive表分区个数建议不超过"num_partitions_in_batch_mode"参数的值，默认值为"1024"。
"num_partitions_in_batch_mode"参数值可通过MySQL客户端连接CloudTable Doris集群后，执行以下命令查看：
```
show variables like "num_partitions_in_batch_mode";
```
![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002608303599.png "点击放大")
#### 前提条件
- 已[创建MRS集群](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0030.html)。
- [创建Doris集群](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0232.html)。
- 为了确保网络连通，MRS集群必须与Doris集群的VPC、子网保持一致，且将Doris集群的所有节点IP加入到MRS集群的安全组中。
 
#### 步骤一：创建MRS hive连接
1. 登录[表格存储服务控制台](https://console.huaweicloud.com/cloudtable)。
2. 用户在集群管理界面，选择目标集群进入集群详情页面。
3. 单击"连接管理 \> 新建连接"，弹出新建连接页面，创建MRS Hive连接。
4. 新建连接类型： 
   - 认证类型选择SIMPLE，OBS按钮关闭状态。
   
   - 认证类型选择KERBEROS，OBS按钮关闭状态。
   
   - 认证类型选择SIMPLE，OBS按钮开启状态。
   
   - 认证类型选择KERBEROS，OBS按钮开启状态。
   
   
   表1参数说明 
   | 参数         | 描述                                                                                                                                                               |
   |:---|:---|
   | 名称         | 根据连接的数据源类型，用户可以自定义连接名。 说明： 必须以字母开头，由字母、数字、中划线组成，不能包含其他的特殊字符，并且长度为4～64个字符。            |
   | 连接器        | Doris支持的外部数据目录组件，目前支持可选：Hive。                                                                                                                                    |
   | Hadoop类型   | Doris支持hadoop组件，目前支持的可选：MRS。                                                                                                                                     |
   | 集群名称       | MRS集群名称。 说明： Doris只能对接一个kerberos集群中的一个用户。                                             |
   | Manager IP | MRS Manager的浮动IP地址，选择连接的集群后，ip地址会自动填充。                                                                                                                           |
   | 认证类型       | MRS集群鉴权类型，安全集群可选"KERBEROS"，非安全集群可选"SIMPLE"。选择连接的集群后，安全类型会自动填充。 说明： KERBEROS类型连接只能创建一个。 |
   | 连接器版本      | MRS集群的数据源组件的版本，HIVE支持3版本，可选：3.X。                                                                                                                                 |
   | 用户名        | MRS集群的用户名，且此用户必须为高权限可以访问Hive、HDFS的底层数据。如果您想创建新用户，请参见[创建MRS集群用户](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0345.html)。                                |
   | 密码         | MRS集群mrs_user_name对应的密码。                                                                                                                                         |
   | OBS支持      | 打开按钮，当前创建的catalog连接的数据表在OBS上。关闭按钮当前创建的catalog连接的数据表在HDFS。                                                                                                        |
      
   
   
5. 配置好参数后，单击测试。如果测试失败请检查用户名和密码是否正确。
6. 测试完成后，单击确定按钮，连接设置页面会出现一条新的连接记录。
 
#### 步骤二：使用SQL命令创建Hive catalog
1. 使用SSH登录工具，通过弹性IP远程登录到Linux弹性云服务器。 
   具体登录操作步骤请参见弹性云服务器《用户指南》中的" [SSH密码方式登录](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0017955633.html)"。
   
   
2. 访问Doris集群，参见[使用MySQL客户端连接Doris普通集群](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0228.html)。
3. 创建Hive catalog表。 
   - 创建认证类型为SIMPLE的catalog，访问存储在HDFS中的Hive数据。
     ```
     CREATE CATALOG hive_catalog_simple PROPERTIES (
         'type'='hms',
         'hive.metastore.uris'='thrift://192.X.X.X:port,thrift://192.x.x.x:port',
         'hive.metastore.sasl.enabled' = 'false',
         'dfs.nameservices'='hacluster',
         'dfs.ha.namenodes.hacluster'='3,4',
         'dfs.namenode.rpc-address.hacluster.3'='192.x.x.x:port',
         'dfs.namenode.rpc-address.hacluster.4'='192.x.x.x:port',
         'dfs.client.failover.proxy.provider.hacluster'='***',
         'hive.version' = '3.1.0'
     );
     ```
     
   
   - 创建认证类型为KERBEROS的catalog，访问存储在HDFS中的Hive数据。
     ```
     CREATE CATALOG hive_catalog PROPERTIES (
         'type'='hms',
         'hive.metastore.uris' = 'thrift://192.x.x.x:port,thrift://192.x.x.x:port',
         'hive.metastore.sasl.enabled' = 'true',
         'hive.server2.thrift.sasl.qop'='auth-conf',
         'hive.server2.authentication' = 'KERBEROS',
         'hive.server2.authentication.kerberos.principal' = '***',
         'hive.metastore.kerberos.principal' = '***',
         'dfs.nameservices'='hacluster',
         'dfs.ha.namenodes.hacluster'='3,4',
         'dfs.namenode.rpc-address.hacluster.3'='192.x.x.x:port',
         'dfs.namenode.rpc-address.hacluster.4'='192.x.x.x:port',
         'dfs.client.failover.proxy.provider.hacluster'='***',
         'hadoop.security.authentication'='kerberos',
         'hadoop.kerberos.principal' = '{kinit_result}', -- kinit {USER_NAME} 的结果
         'hive.version' = '3.1.0',
         'fs.defaultFS'='hdfs://hacluster',
         'hadoop.rpc.protection'='privacy'
     );
     ```
     
   
   - 创建认证类型为SIMPLE的catalog，访问存储在OBS中的Hive数据。
     ```
     CREATE CATALOG hive_catalog_simple_obs PROPERTIES (
         'type'='hms',
         'hive.metastore.uris'='thrift://192.x.x.x:port,thrift://192.x.x.x:port',
         'obs.access_key' = '***',
         'obs.secret_key' = '***',
         'obs.endpoint' = '***',
         'obs.region' = '***',
         'hive.metastore.sasl.enabled' = 'false',
         'hive.version' = '3.1.0'
     );
     ```
     
   
   - 创建认证类型为KERBEROS的catalog，访问存储在OBS中的Hive数据。
     ```
     CREATE CATALOG hive_catalog_OBS PROPERTIES (
         'type'='hms',
         'hive.metastore.uris' = 'thrift://192.x.x.x:port,thrift://192.x.x.x:port',
         'hive.metastore.sasl.enabled' = 'true',
         'hive.server2.thrift.sasl.qop'='auth-conf',
         'hive.server2.authentication' = 'KERBEROS',
         'hive.server2.authentication.kerberos.principal' = '***',
         'hive.metastore.kerberos.principal' = '***',
         'hadoop.security.authentication'='kerberos',
         'hadoop.kerberos.principal' = 'USER_NAME',
         'hive.version' = '3.1.0',
         'fs.defaultFS'='hdfs://hacluster',
         'hadoop.rpc.protection'='privacy',
         'obs.access_key' = '***',
         'obs.secret_key' = '***',
         'obs.endpoint' = '***',
         'obs.region' = '***'
     );
     ```
     
     相关参数描述以及参数值获取方法。
     表2参数说明 
     | 参数                                             | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
     |:---|:---|
     | type                                           | 对接外部数据类型。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
     | hive.metastore.uris                            | hive元数据uri，可在hive-site.xml配置文件查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
     | hive.metastore.sasl.enabled                    | 可在hive-site.xml配置文件查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | dfs.nameservices                               | 可在hdfs-site.xml配置文件查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | dfs.ha.namenodes.hacluster                     | 可在hdfs-site.xml配置文件查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | dfs.namenode.rpc-address.hacluster.3           | 可在hdfs-site.xml配置文件查看。 说明： 此参数的IP地址可在MRS集群的FusionInsight Manager页面\>主页\>组件\>实例页面查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
     | dfs.namenode.rpc-address.hacluster.4           | 可在hdfs-site.xml配置文件查看。 说明： 此参数的IP地址可在MRS集群的FusionInsight Manager页面\>主页\>组件\>实例页面查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
     | dfs.client.failover.proxy.provider.hacluster   | 可在hdfs-site.xml配置文件查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | hive.version                                   | Hive版本。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
     | hive.server2.thrift.sasl.qop                   | 可在hive-site.xml配置文件查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | hive.server2.authentication                    | 认证类型，在集群连接页面查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
     | hive.server2.authentication.kerberos.principal | 可在hive-site.xml配置文件查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | hive.metastore.kerberos.principal              | 可在hive-site.xml配置文件查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | hadoop.kerberos.principal                      | 获取hadoop.kerberos.principal参数值方法： - 方法一： 1. 登录MRS集群的Manager页面。  2. 单击"系统 \> 权限 \> 用户"进入用户页面获取用户。  3. 单击"域和互信"，进入域和互信页面获取"本端域"。  4. 参数值为：用户名+本端域。    - 方法二： 1. 以root用户登录MRS客户端所在节点。  2. 进入安装客户端路径。 ``` cd /opt/Bigdata/client/ ```   3. 加载环境变量。 ``` source bigdata_env ```   4. 执行kinit命令进行用户认证，获取参数值。 ``` kinit 用户名 ``` ![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002342704528.png "点击放大")      |
     | hive.version                                   | Hive版本。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
     | fs.defaultFS                                   | 可在core-site.xml配置文件查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | hadoop.rpc.protection                          | 可在core-site.xml配置文件查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | obs.access_key                                 | access key，获取方式请参见的[获取访问密钥（AK/SK）](https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html)章节。 说明： obs.access_key可以访问到底层数据文件。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
     | obs.secret_key                                 | secret key，获取方式请参见的[获取访问密钥（AK/SK）](https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html)章节。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
     | obs.endpoint                                   | obs地址，获取方式请参见的[获取终端节点](https://support.huaweicloud.com/obs_faq/obs_faq_0124.html)章节。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
     | obs.region                                     | obs region，在obs页面查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
        
     1. 以root用户登录MRS客户端所在节点（Master1节点）。
     
     2. 进入client目录下，显示出MRS的全部组件，目前使用的组件有HDFS和Hive组件。
        ```
        cd /opt/Bigdata/client/
        ```
        ![](https://support.huaweicloud.com/usermanual-cloudtable/public_sys-resources/note_3.0-zh-cn.png)
        HDFS组件中包含了core-site.xml、hdfs-site.xml配置文件，Hive组件中包含了hive-site.xml配置。
        
     
     3. 进入组件中的配置文件查看参数。
        1. HDFS组件查看。
           ```
           cd ./HDFS/hadoop/etc/
           ```
           进入hadoop目录。
           ```
           cd hadoop
           ```
           查看hdfs-site.xml配置文件，查找相关参数。
           ```
           cat hdfs-site.xml
           ```
           
        
        2. 查看Hive组件中的hive-site.xml配置文件，查找相关参数。
           ```
           cat /opt/Bigdata/client/Hive/config/hive-site.xml
           ```
           
         
      
   
   
   
   
 
#### 步骤三：查询数据映射表
1. 查看Catalogs。 
   ```
   show catalogs;
   ```
   ![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002376662545.png "点击放大")
   
   
2. 执行以下命令查询Catalog下面的数据库。 
   ```
   show databases from catalog名;
   ```
   ![](https://support.huaweicloud.com/usermanual-cloudtable/zh-cn_image_0000002376542641.png)
   
   
3. 切换到指定的Catalog。 
   ```
   switch Catalog名;
   ```
   
   
4. 查看catalog数据库中的指定表。 
   ```
   show tables from `catalog名`.`数据库`;
   ```
   指定表。
   ```
   select * from `catalog名`.`数据库名`.`指定表名`;
   ```
   ![](https://support.huaweicloud.com/usermanual-cloudtable/public_sys-resources/note_3.0-zh-cn.png)
   use database;命令只适用于数据表比较少的测试场景，生产集群请谨慎使用。如果数据表比较多，使用此命令会加载所有表信息，容易造成hive-matastore压力剧增影响MRS生产环境。
   
   
 
#### 常见问题
- 当出现以下报错的时候，需要修改MRS集群的manager页面切换HDFS的主备。
  ```
  mysql> select * from hive_hdfs_test2;
  ERROR 1105 (HY000): errCode = 2, detailMessage = get file split failed for table: hive_hdfs_test2, err: org.apache.hadoop.ipc.RemoteException: Operation category READ is not supported in state standby. Visit https://s.apache.org/sbnn-error
  at org.apache.hadoop.hdfs.server.namenode.ha.StandbyState.checkOperation(StandbyState.java:108)
  at org.apache.hadoop.hdfs.server.namenode.NameNode$NameNodeHAContext.checkOperation(NameNode.java:2200)
  at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkOperation(FSNamesystem.java:
  ```
  
- 创建Catalog时可以采用参数file.meta.cache.ttl-second来设置Hive分区文件缓存自动失效时间，也可以将该值设置为0来禁用分区文件缓存，时间单位为：秒。示例如下：
  ```
  CREATE CATALOG hive_catalog PROPERTIES (
      'type'='hms',
      'hive.metastore.uris' = 'thrift://127.x.x.x:port',
      'obs.access_key' = '***',
      'obs.secret_key' = '***',
      'obs.endpoint' = '***',
      'obs.region' = '***'
      'file.meta.cache.ttl-second' = '60'
  );
  ```
  
 
