更新时间:2025-08-12 GMT+08:00

配置Doris对接Hive数据源

通过连接Hive Metastore,或者兼容Hive Metastore的元数据服务,Doris可以自动获取Hive库表信息,并进行表数据查询,从而避免了传统外部数据目录多需要手动映射以及数据迁移的复杂工程。

CloudTable目前不支持S3协议,推荐使用OBS协议创建Hive Catalog。

使用前提

  • 创建MRS集群
  • 创建Doris集群
  • 为了确保网络连通,MRS集群必须与Doris集群的VPC、子网保持一致,且将Doris集群的所有节点IP加入到MRS集群的安全组中。

步骤一:创建MRS hive连接

  1. 登录表格存储服务管理控制台。
  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集群用户

    密码

    MRS集群mrs_user_name对应的密码。

    OBS支持

    打开按钮,当前创建的catalog连接的数据表在OBS上。关闭按钮当前创建的catalog连接的数据表在HDFS。

  5. 配置好参数后,单击测试。如果测试失败请检查用户名和密码是否正确。
  6. 测试完成后,单击确定按钮,连接设置页面会出现一条新的连接记录。

步骤二:使用SQL命令创建Hive catalog

  1. 使用SSH登录工具,通过弹性IP远程登录到Linux弹性云服务器。

    具体登录操作步骤请参见弹性云服务器《用户指南》中的“ SSH密码方式登录”。

  2. 访问Doris集群,参见使用MySQL客户端连接Doris普通集群
  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' = 'true',
          '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 用户名

      hive.version

      Hive版本。

      fs.defaultFS

      可在core-site.xml配置文件查看。

      hadoop.rpc.protection

      可在core-site.xml配置文件查看。

      obs.access_key

      access key,获取方式请参见的获取访问密钥(AK/SK)章节。

      说明:

      obs.access_key可以访问到底层数据文件。

      obs.secret_key

      secret key,获取方式请参见的获取访问密钥(AK/SK)章节。

      obs.endpoint

      obs地址,获取方式请参见的获取终端节点章节。

      obs.region

      obs region,在obs页面查看。

      1. 以root用户登录MRS客户端所在节点(Master1节点)。
      2. 进入client目录下,显示出MRS的全部组件,目前使用的组件有HDFS和Hive组件。
        cd /opt/Bigdata/client/

        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;

  2. 执行以下命令查询Catalog下面的数据库。

    show databases from catalog名;

  3. 切换到指定的Catalog。

    switch Catalog名;

  4. 查看catalog数据库中的指定表。

    show tables from `catalog名`.`数据库`;

    指定表。

    select * from `catalog名`.`数据库名`.`指定表名`;

    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'
    );