配置Doris对接Hive数据源
通过连接Hive Metastore,或者兼容Hive Metastore的元数据服务,Doris可以自动获取Hive库表信息,并进行表数据查询,从而避免了传统外部数据目录多需要手动映射以及数据迁移的复杂工程。
CloudTable目前不支持S3协议,推荐使用OBS协议创建Hive Catalog。
步骤一:创建MRS hive连接
- 登录表格存储服务管理控制台。
- 用户在集群管理界面,选择目标集群进入集群详情页面。
- 单击“连接管理 > 新建连接”,弹出新建连接页面,创建MRS Hive连接。
- 新建连接类型:
- 认证类型选择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。
- 配置好参数后,单击测试。如果测试失败请检查用户名和密码是否正确。
- 测试完成后,单击确定按钮,连接设置页面会出现一条新的连接记录。
步骤二:使用SQL命令创建Hive catalog
- 使用SSH登录工具,通过弹性IP远程登录到Linux弹性云服务器。
具体登录操作步骤请参见弹性云服务器《用户指南》中的“ SSH密码方式登录”。
- 访问Doris集群,参见使用MySQL客户端连接Doris普通集群。
- 创建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参数值方法:
- 方法一:
- 登录MRS集群的Manager页面。
- 单击“系统 > 权限 > 用户”进入用户页面获取用户。
- 单击“域和互信”,进入域和互信页面获取“本端域”。
- 参数值为:用户名+本端域。
- 方法二:
- 以root用户登录MRS客户端所在节点。
- 进入安装客户端路径。
cd /opt/Bigdata/client/
- 加载环境变量。
source bigdata_env
- 执行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页面查看。
- 以root用户登录MRS客户端所在节点(Master1节点)。
- 进入client目录下,显示出MRS的全部组件,目前使用的组件有HDFS和Hive组件。
cd /opt/Bigdata/client/
HDFS组件中包含了core-site.xml、hdfs-site.xml配置文件,Hive组件中包含了hive-site.xml配置。
- 进入组件中的配置文件查看参数。
- HDFS组件查看。
cd ./HDFS/hadoop/etc/
进入hadoop目录。
cd hadoop
查看hdfs-site.xml配置文件,查找相关参数。
cat hdfs-site.xml
- 查看Hive组件中的hive-site.xml配置文件,查找相关参数。
cat /opt/Bigdata/client/Hive/config/hive-site.xml
- HDFS组件查看。
- 方法一:
- 创建认证类型为SIMPLE的catalog,访问存储在HDFS中的Hive数据。
步骤三:查询数据映射表
- 查看Catalogs。
show catalogs;
- 执行以下命令查询Catalog下面的数据库。
show databases from catalog名;
- 切换到指定的Catalog。
switch Catalog名;
- 查看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' );