更新时间:2024-12-11 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元数据。
  • 如果想访问非当前用户创建的Catalog,需授予用户Catalog所在的OBS路径的操作权限。
  • Hive表格式仅支持Parquet、ORC、TextFile。

前提条件

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

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

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

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

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

  • 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris
  • 如果Doris通过Broker Load跨集群导入数据,需要配置跨集群互信,相关操作可参考配置跨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认证(安全模式),需先执行以下命令再连接Doris数据库:

    export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1

    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',

        'yarn.resourcemanager.address' = '192.168.67.78:26004',

        'yarn.resourcemanager.principal' = 'mapred/hadoop.hadoop.com@HADOOP.COM',

        'hive.metastore.kerberos.principal' = 'hive/hadoop.hadoop.com@HADOOP.COM',

        'hadoop.security.authentication' = 'kerberos',

        'hadoop.kerberos.keytab' = '${BIGDATA_HOME}/FusionInsight_Doris_8.3.0/install/FusionInsight-Doris-1.2.3/doris-be/bin/doris.keytab',

        'hadoop.kerberos.principal' = 'doris/hadoop.hadoop.com@HADOOP.COM',

        'java.security.krb5.conf' = '${BIGDATA_HOME}/FusionInsight_BASE_*/1_16_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',

        'yarn.resourcemanager.address' = '192.168.67.78:26004',

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

        );

      • 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”参数的值。
      • 主备NameNode实例IP地址可在Manager界面,选择“集群 > 服务 > HDFS > 实例”查看。
      • RPC端口号可在Manager界面,选择“集群 > 服务 > HDFS > 配置”,搜索“dfs.namenode.rpc.port”查看。
      • dfs.client.failover.proxy.provider.hacluster:指定HDFS客户端连接集群中Active状态节点的Java类。值为“org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider”。
      • hive.version:Hive版本。可在Manager界面,选择“集群 > 服务 > Hive”,在概览页面查看“版本”获取。
      • yarn.resourcemanager.address:主ResourceManager实例的IP地址。可在Manager界面,选择“集群 > 服务 > Yarn > 实例”,查看主ResourceManager实例的业务IP地址;端口号可单击“配置”,在搜索框中搜索“yarn.resourcemanager.port”参数获取。
      • hadoop.rpc.protection:设置Hadoop中各模块的RPC通道是否加密,默认为“privacy”。可在Manager界面,选择“集群 > 服务 > HDFS > 配置”,搜索“hadoop.rpc.protection”获取。
      • 集群已启用Kerberos认证(安全模式)
        • hive.metastore.sasl.enabled:MetaStore的管理权限开关,值为“true”。
        • hive.server2.thrift.sasl.qop:HiveServer2和客户端交互是否加密传输,值为“auth-conf”。
        • hive.server2.authentication:访问HiveServer的安全认证方式,值为“KERBEROS”。
        • yarn.resourcemanager.principal:访问Yarn集群的Principal,值为“mapred/hadoop.hadoop.com@HADOOP.COM”。
        • hive.metastore.kerberos.principal:访问Hive集群的Principal,值为“hive/hadoop.hadoop.com@HADOOP.COM”。
        • hadoop.security.authentication:访问Hadoop的安全认证方式,值为“KERBEROS”。
        • hadoop.kerberos.keytab:访问Hadoop集群的keytab,值为“${BIGDATA_HOME}/FusionInsight_Doris_*/install/FusionInsight-Doris-*/doris-be/bin/doris.keytab”文件所在的具体路径。
        • hadoop.kerberos.principal:访问Hadoop集群的Principal,值为“doris/hadoop.hadoop.com@HADOOP.COM”。
        • java.security.krb5.conf:krb5文件,值为“${BIGDATA_HOME}/FusionInsight_BASE_*/1_*_KerberosClient/etc/krb5.conf”文件所在的具体路径。
      • 集群未启用Kerberos认证(普通模式)

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

    • Hive表数据存储在OBS中,执行以下命令创建Catalog,相关参数值请参见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',

      'yarn.resourcemanager.address' = '192.168.67.78:26004',

      'yarn.resourcemanager.principal' = 'mapred/hadoop.hadoop.com@HADOOP.COM',

      'hive.metastore.kerberos.principal' = 'hive/hadoop.hadoop.com@HADOOP.COM',

      'hadoop.security.authentication' = 'kerberos',

      'hadoop.kerberos.keytab' = '${BIGDATA_HOME}/FusionInsight_Doris_8.3.0/install/FusionInsight-Doris-1.2.3/doris-be/bin/doris.keytab',

      'hadoop.kerberos.principal' = 'doris/hadoop.hadoop.com@HADOOP.COM',

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

      );

  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中的内部表,从实现导入外部数据目录数据。