配置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后,创建具有管理员权限的角色并绑定给用户。
- 集群已启用Kerberos认证(安全模式)
- 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris。
- 如果Doris通过Broker Load跨集群导入数据,需要配置跨集群互信,相关操作可参考配置跨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认证(安全模式),需先执行以下命令再连接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界面连接数据库。
- 创建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”。
- 集群已启用Kerberos认证(安全模式):
- 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'
);
- Hive表数据存储在HDFS中,执行以下命令创建Catalog:
- 查询Hive表:
- 新建或操作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中的内部表,从实现导入外部数据目录数据。