更新时间:2025-07-16 GMT+08:00
分享

配置Doris对接Hive数据源

通过连接Hive Metastore,或者兼容Hive Metatore的元数据服务,Doris可以自动获取Hive的库表信息,并进行数据查询。

除Hive外,很多其他系统也会使用Hive Metastore存储元数据。通过Hive Catalog,不仅能访问Hive,也能访问使用Hive Metastore作为元数据存储的系统,例如Iceberg、Hudi等。

约束与限制

  • 支持Managed Table。
  • 可以识别Hive Metastore中存储的Hive和Hudi元数据。
  • Hive表格式仅支持Parquet、ORC、TextFile。
  • 建议待读取的Hive表数据量不要过大,不要执行全表扫描查询操作,可考虑单批次访问的Hive数据量在TB内,且分区数不超过5000。
  • 不支持对Hive Catalog表执行deleteupdate操作。
  • Doris访问Array类型的字段时,默认从下标1开始;Hive访问Array类型的字段时,默认从下标0开始。

前提条件

  • 已创建包含Doris服务的集群,集群内各服务运行正常。
  • 待连接Doris数据库的节点与MRS集群网络互通。
  • 创建具有Doris管理权限的用户。
    • 集群已启用Kerberos认证(安全模式)

      在FusionInsight Manager中创建一个人机用户,例如“dorisuser”,创建一个拥有“Doris管理员权限”的角色绑定给该用户。

      使用新建的用户dorisuser重新登录FusionInsight Manager,修改该用户初始密码。

    • 集群未启用Kerberos认证(普通模式)

      使用admin用户连接Doris后,创建具有管理员权限的角色并绑定给用户。

  • 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris
  • 如果Doris通过Catalog跨集群访问Hive数据,需要配置跨集群互信,相关操作可参考配置跨Manager集群互信

Hive表操作

  1. 如果需使用Doris读取Hive存储在OBS中的数据,需执行以下操作。

    1. 登录华为云管理控制台,在“控制台”页面,鼠标移动至右上方的用户名,在下拉列表中选择“我的凭证”。
    2. 单击“访问密钥”页签,单击“新增访问密钥”,输入验证码或密码。单击“确定”,生成并下载访问密钥。

      在.csv文件中获取创建Catalog所需的AWS_ACCESS_KEY、AWS_SECRET_KEY参数值,对应关系为:

      • AWS_ACCESS_KEY参数值为.csv文件中“Access Key Id”列的值。
      • AWS_SECRET_KEY参数值为.csv文件中“Secret Access Key”列的值。
      • 请及时下载保存,弹窗关闭后将无法再次获取该密钥信息,但您可重新创建新的密钥。
      • 为了账号安全性,建议您妥善保管并定期修改访问密钥,修改访问密钥的方法为删除旧访问密钥,然后重新生成。
      • MRS 3.3.1及之后版本,AWS_ACCESS_KEY、AWS_SECRET_KEY参数名变更为obs.access_key和obs.secret_key。
    3. 创建Catalog所需的AWS_REGION(MRS 3.3.1及之后版本变更为obs.region)可在地区和终端节点获取。
    4. 登录“对象存储服务 OBS”管理控制台,单击“并行文件系统”,单击Hive表所在的OBS并行文件系统名称,在概览界面查看“Endpoint”参数值,该值为创建Catalog时设置AWS_ENDPOINT(MRS 3.3.1及之后版本变更为obs.endpoint)参数的值。

  2. 登录安装了MySQL的节点,执行以下命令,连接Doris数据库。

    如果集群已启用Kerberos认证(安全模式),需先执行以下命令:

    export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1

    连接Doris数据库:

    mysql -u数据库登录用户 -p数据库登录用户密码 -P数据库连接端口 -hDoris FE实例IP地址
    • 数据库连接端口为Doris FE的查询连接端口,可以通过登录Manager,单击“集群 > 服务 > Doris > 配置”,查询Doris服务的“query_port”参数获取。
    • Doris FE实例IP地址可通过登录MRS集群的Manager界面,单击“集群 > 服务 > Doris > 实例”,查看任一FE实例的IP地址。
    • 用户也可以使用MySQL连接软件或者Doris WebUI界面连接数据库。

  3. 创建Catalog。

    • Hive表数据存储在HDFS中,执行以下命令创建Catalog:
      • 集群已启用Kerberos认证(安全模式)
        CREATE CATALOG hive_catalog PROPERTIES (
        'type'='hms',
        'hive.metastore.uris' = 'thrift://192.168.67.161:21088',
        'hive.metastore.sasl.enabled' = 'true',
        'hive.server2.thrift.sasl.qop' = 'auth-conf',
        'hive.server2.authentication' = 'KERBEROS',
        'dfs.nameservices'='hacluster',
        'dfs.ha.namenodes.hacluster'='24,25',
        'dfs.namenode.rpc-address.hacluster.24'='主NameNodeIP地址:RPC通信端口',
        'dfs.namenode.rpc-address.hacluster.25'='备NameNodeIP地址:RPC通信端口',
        'dfs.client.failover.proxy.provider.hacluster'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider',
        'hive.version' = '3.1.0',
        'hive.metastore.kerberos.principal' = '${hive_keytab_principal}',
        'hadoop.security.authentication' = 'kerberos',
        'hadoop.kerberos.keytab' = '/home/omm/doris_keytab/doris.keytab',
        'hadoop.kerberos.principal' = '${doris_keytab_principal}',
        'java.security.krb5.conf' = '/opt/Bigdata/FusionInsight_BASE_8.5.0/1_1_KerberosClient/etc/krb5.conf',
        'hadoop.rpc.protection' = 'privacy'
        );
      • 集群未启用Kerberos认证(普通模式)
        CREATE CATALOG hive_catalog PROPERTIES (
        'type'='hms',
        'hive.metastore.uris' = 'thrift://192.168.67.161:21088',
        'hive.version' = '3.1.0',
        'hadoop.username' = 'hive',
        'dfs.nameservices'='hacluster',
        'dfs.ha.namenodes.hacluster'='24,25',
        'dfs.namenode.rpc-address.hacluster.24'='192-168-67-172:25000',
        'dfs.namenode.rpc-address.hacluster.25'='192-168-67-78:25000',
        'dfs.client.failover.proxy.provider.hacluster'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider'
        );
      表1 创建Catalog相关参数介绍

      参数

      参数说明

      hive.metastore.uris

      Hive MetaStore的URL,格式为“thrift://Hive MetaStore的IP地址:端口号”,支持多个值,以逗号分隔。

      dfs.nameservices

      集群NameService名称。可在NameNode所在节点的“${BIGDATA_HOME}/FusionInsight_HD_*/1_*_NameNode/etc”目录下的“hdfs-site.xml”中查找该配置项的值。

      dfs.ha.namenodes.hacluster

      集群NameService前缀,包含两个值。可在NameNode所在节点的“${BIGDATA_HOME}/FusionInsight_HD_*/1_*_NameNode/etc”目录下的“hdfs-site.xml”中查找该配置项的值。

      dfs.namenode.rpc-address.hacluster.xx1

      主NameNode的RPC通信地址。可在NameNode所在节点的“${BIGDATA_HOME}/FusionInsight_HD_*/1_*_NameNode/etc”目录下的“hdfs-site.xml”中查找该配置项的值,xx为“dfs.ha.namenodes.hacluster”参数的值。

      dfs.namenode.rpc-address.hacluster.xx2

      备NameNode的RPC通信地址。可在NameNode所在节点的“${BIGDATA_HOME}/FusionInsight_HD_*/1_*_NameNode/etc”目录下的“hdfs-site.xml”中查找该配置项的值,xx为“dfs.ha.namenodes.hacluster”参数的值。

      dfs.client.failover.proxy.provider.hacluster

      指定HDFS客户端连接集群中Active状态节点的Java类。值为“org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider”。

      hive.version

      Hive版本。可在Manager界面,选择“集群 > 服务 > Hive”,在概览页面查看“版本”获取。

      hadoop.rpc.protection

      设置Hadoop中各模块的RPC通道是否加密,默认为“privacy”。可在Manager界面,选择“集群 > 服务 > HDFS > 配置”,搜索“hadoop.rpc.protection”获取。

      hive.metastore.sasl.enabled

      MetaStore的管理权限开关,值为“true”。

      该参数仅适用于开启Kerberos认证的集群。

      hive.server2.thrift.sasl.qop

      HiveServer2和客户端交互是否加密传输,值为“auth-conf”。

      该参数仅适用于开启Kerberos认证的集群。

      hive.server2.authentication

      访问HiveServer的安全认证方式,值为“KERBEROS”。

      该参数仅适用于开启Kerberos认证的集群。

      hive.metastore.kerberos.principal

      访问Hive集群的keytab文件对应的principal。

      MRS 3.5.0之前版本,值为“hive/hadoop.hadoop.com@HADOOP.COM”。MRS 3.5.0及之后版本,格式为“hive/hadoop.${系统域名转换为小写}@${系统域名}”,系统域名可登录Manager页面,选择“系统 > 权限 > 域和互信”,查看“本端域”参数获取。例如,查看到的系统域名为“A39A7DF8_953D_4772_B909_035A594FFA55.COM”,则该参数值为“hive/hadoop.a39a7df8_953d_4772_b909_035a594ffa55.com@A39A7DF8_953D_4772_B909_035A594FFA55.COM”。

      该参数仅适用于开启Kerberos认证的集群。

      hadoop.security.authentication

      访问Hadoop的安全认证方式,值为“KERBEROS”。

      该参数仅适用于开启Kerberos认证的集群。

      hadoop.kerberos.keytab

      访问Hadoop集群的keytab,该文件位于FE节点“${BIGDATA_HOME}/FusionInsight_Doris_*/install/FusionInsight-Doris-*/doris-be/bin/doris.keytab”路径中,需要拷贝该keytab文件到所有FE、BE节点上,例如,“/home/omm/doris_keytab”目录下并执行以下命令设置“doris.keytab”文件属组:

      chown omm:wheel /home/omm/doris_keytab -R

      该参数仅适用于开启Kerberos认证的集群。

      hadoop.kerberos.principal

      访问Hadoop集群的keytab文件对应的principal。

      MRS 3.5.0之前版本,值为“doris/hadoop.hadoop.com@HADOOP.COM”。MRS 3.5.0及之后版本,格式为“doris/hadoop.${系统域名转换为小写}@${系统域名}”,系统域名可登录Manager页面,选择“系统 > 权限 > 域和互信”,查看“本端域”参数获取。例如,查看到的系统域名为“A39A7DF8_953D_4772_B909_035A594FFA55.COM”,则该参数值为“doris/hadoop.a39a7df8_953d_4772_b909_035a594ffa55.com@A39A7DF8_953D_4772_B909_035A594FFA55.COM”。

      该参数仅适用于开启Kerberos认证的集群。

      java.security.krb5.conf

      krb5文件,值为“${BIGDATA_HOME}/FusionInsight_BASE_*/1_*_KerberosClient/etc/krb5.conf”文件所在的绝对路径。

      该参数仅适用于开启Kerberos认证的集群。

      hadoop.username

      访问Hadoop集群的用户名,值为“hdfs”。

      该参数仅适用于未开启Kerberos认证的集群。

    • Hive表数据存储在OBS中,执行以下命令创建Catalog,相关参数值请参见1获取:

      MRS 3.3.1之前版本:

      CREATE CATALOG hive_obs_catalog PROPERTIES (
      'type'='hms',
      'hive.version' = '3.1.0',
      'hive.metastore.uris' = 'thrift://192.168.67.161:21088',
      'hive.metastore.sasl.enabled' = 'true',
      'hive.server2.thrift.sasl.qop' = 'auth-conf',
      'hive.server2.authentication' = 'KERBEROS',
      'dfs.nameservices'='hacluster',
      'dfs.ha.namenodes.hacluster'='24,25',
      'dfs.namenode.rpc-address.hacluster.24'='主NameNode IP地址:RPC通信端口',
      'dfs.namenode.rpc-address.hacluster.25'='备NameNode IP地址:RPC通信端口',
      'dfs.client.failover.proxy.provider.hacluster'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider',
      'hive.metastore.kerberos.principal' = '${hive_keytab_principal}',
      'hadoop.security.authentication' = 'kerberos',
      'hadoop.kerberos.keytab' = '/home/omm/doris_keytab/doris.keytab',
      'hadoop.kerberos.principal' = '${doris_keytab_principal}',
      'java.security.krb5.conf' = '${BIGDATA_HOME}/FusionInsight_BASE_*/1_16_KerberosClient/etc/krb5.conf',
      'AWS_ACCESS_KEY' = 'AK',
      'AWS_SECRET_KEY' = 'SK',
      'AWS_ENDPOINT' = 'OBS并行文件系统的Endpoint地址',
      'AWS_REGION' = 'sa-fb-1',
      'hadoop.rpc.protection' = 'privacy'
      );

      MRS 3.3.1及之后版本:

      CREATE CATALOG hive_catalog PROPERTIES (
      'type'='hms',
      'hive.version' = '3.1.0',
      'hive.metastore.uris' = 'thrift://192.168.67.161:21088',
      'hive.metastore.sasl.enabled' = 'true',
      'hive.server2.thrift.sasl.qop' = 'auth-conf',
      'hive.server2.authentication' = 'KERBEROS',
      'dfs.nameservices'='hacluster',
      'dfs.ha.namenodes.hacluster'='24,25',
      'dfs.namenode.rpc-address.hacluster.24'='主NameNode IP地址:RPC通信端口',
      'dfs.namenode.rpc-address.hacluster.25'='备NameNode IP地址:RPC通信端口',
      'dfs.client.failover.proxy.provider.hacluster'='org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider',
      'hive.metastore.kerberos.principal' = '${hive_keytab_principal}',
      'hadoop.security.authentication' = 'kerberos',
      'hadoop.kerberos.keytab' = '/home/omm/doris_keytab/doris.keytab',
      'hadoop.kerberos.principal' = '${doris_keytab_principal}',
      'java.security.krb5.conf' = '/opt/Bigdata/FusionInsight_BASE_8.5.0/1_16_KerberosClient/etc/krb5.conf',
      'obs.access_key' = 'AK',
      'obs.secret_key' = 'SK',
      'obs.endpoint' = 'OBS并行文件系统的Endpoint地址',
      'obs.region' = 'sa-fb-1',
      'hadoop.rpc.protection' = 'privacy'
      );

      相关参数介绍请参见表1

  4. 查询Hive表:

    • 执行以下命令查询Catalog:
      show catalogs;
    • 执行以下命令查询Catalog下面的数据库:
      show databases from hive_catalog;
    • 执行以下命令切换到指定Catalog,再进入到数据库中:
      switch hive_catalog;

      进入指定数据库中:

      use default;
    • 查询Catalog中某个库中的所有表:
      show tables from `hive_catalog`.`default`;

      查询指定表:

      select * from `hive_catalog`.`default`.`test_table`;

      执行以下命令查看表的Schema:

      DESC test_table;

  5. 新建或操作Hive表后,需要在Doris中执行刷新:

    refresh catalog hive_catalog;

  6. 执行以下命令与其他数据目录中的表进行关联查询:

    SELECT h.h_shipdate FROM hive_catalog.default.htable h WHERE h.h_partkey IN (SELECT p_partkey FROM internal.db1.part) LIMIT 10;

    其中:

    • 通过catalog.database.table全限定的方式标识一张表,如:internal.db1.part。
    • 其中catalogdatabase可以省略,缺省使用当前SWITCHUSE切换后的Catalog和Database。
    • 可以使用INSERT INTO命令,将Hive Catalog中的表数据,插入到Interal Catalog中的内部表,从实现导入外部数据目录数据。

相关文档