配置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表执行delete和update操作。
- Doris访问Array类型的字段时,默认从下标1开始;Hive访问Array类型的字段时,默认从下标0开始。
前提条件
- 已创建包含Doris服务的集群,集群内各服务运行正常。
- 待连接Doris数据库的节点与MRS集群网络互通。
- 创建具有Doris管理权限的用户。
- 集群已启用Kerberos认证(安全模式)
在FusionInsight Manager中创建一个人机用户,例如“dorisuser”,创建一个拥有“Doris管理员权限”的角色绑定给该用户。
使用新建的用户dorisuser重新登录FusionInsight Manager,修改该用户初始密码。
- 集群未启用Kerberos认证(普通模式)
使用admin用户连接Doris后,创建具有管理员权限的角色并绑定给用户。
- 集群已启用Kerberos认证(安全模式)
- 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris。
- 如果Doris通过Catalog跨集群访问Hive数据,需要配置跨集群互信,相关操作可参考配置跨Manager集群互信。
Hive表操作
- 如果需使用Doris读取Hive存储在OBS中的数据,需执行以下操作。
- 登录华为云管理控制台,在“控制台”页面,鼠标移动至右上方的用户名,在下拉列表中选择“我的凭证”。
- 单击“访问密钥”页签,单击“新增访问密钥”,输入验证码或密码。单击“确定”,生成并下载访问密钥。
在.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。
- 创建Catalog所需的AWS_REGION(MRS 3.3.1及之后版本变更为obs.region)可在地区和终端节点获取。
- 登录“对象存储服务 OBS”管理控制台,单击“并行文件系统”,单击Hive表所在的OBS并行文件系统名称,在概览界面查看“Endpoint”参数值,该值为创建Catalog时设置AWS_ENDPOINT(MRS 3.3.1及之后版本变更为obs.endpoint)参数的值。
- 登录安装了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界面连接数据库。
- 创建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认证的集群。
- 集群已启用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。
- Hive表数据存储在HDFS中,执行以下命令创建Catalog:
- 查询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;
- 执行以下命令查询Catalog:
- 新建或操作Hive表后,需要在Doris中执行刷新:
refresh catalog hive_catalog;
- 执行以下命令与其他数据目录中的表进行关联查询:
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。
- 其中catalog和database可以省略,缺省使用当前SWITCH和USE切换后的Catalog和Database。
- 可以使用INSERT INTO命令,将Hive Catalog中的表数据,插入到Interal Catalog中的内部表,从实现导入外部数据目录数据。