OpenLooKeng连接hive出现UnknownHostException

本文记录了使用OpenLooKeng连接Hive数据源时遇到的hacluster未知主机问题,并通过调整Hadoop配置文件中的dfs.client.failover.proxy.provider.hacluster参数解决了该问题。

背景

最近在验证一个计算的方案,使用的是华为开源的数据虚拟化引擎OpenLookeng(hetu),底层基于presto引擎来提供交互式查询分析能力。先前成功部署过一套,添加hive,mysql等数据源一切正常。后重新在其他环境进行部署时,连接hive时出现java.net.UnknownHostException:hacluster。用的是华为平台,hadoop版本为3.1.1,hive版本3.1.1。

问题定位与解决

连接hive数据源需要指定两个配置文件core-site.xml和hdfs-site.xml,开启kerberos验证还需指定user.keytab和krb5.conf验证文件。hacluster是hadoop高可用名称,在core-site.xml的fs.default中有相关配置,在hdfs-site.xml中也有hacluster相关配置。于是我将问题定位到这几个地方
1.本地/etc/hosts没有相关配置
添加平台host文件中配置(无效)

2.core-site.xml文件中相关配置不匹配
修改fs.defaultFS配置,将value改为hdfs://host:port/ (无效)
添加fs.default.name配置(无效)
删除fs.defaultFS配置(无效)

3.hdfs-site文件中相关配置不匹配
将文件中的host名改为ip形式(无效)

4.比对部署成功的OpenLooKeng配置
将core-site.xml和hdfs-site.xml与当前配置文件的配置项一一比对,发现dfs.client.failover.proxy.provider.hacluster配置项的value有所不同,一个是ConfiguredFailoverProxyProvider,本地是AdaptiveFailoverProxyProvider,修改该配置项为ConfiguredFailoverProxyProvider后终于得到解决(有效)

反思

dfs.client.failover.proxy.provider.hacluster配置项的作用是什么呢?

在Hadoop HA集群中,一般有两个NameNode(简写为NN),一个是Active NameNode(简写为ANN),另一个是Standby NameNode(简写为SBNN)。 只有ANN对外提供读写功能,那么当客户端想要对文件系统元数据进行修改操作时,比如创建文件,删除文件,重命名文件等,客户端是如何连接到ANN的呢?dfs.client.failover.proxy.provider.hacluster就是来指定HDFS客户端连接集群中Active状态节点的Java类,而ConfiguredFailoverProxyProvider的意思是按照配置文件的方式去找active NN

怎么按照配置文件找active NN呢?

查看ConfiguredFailoverProxyProvider的源码,在它的构造方法中可以找到答案
在这里插入图片描述

下面这行代码返回值map的key为nameServiceId,由hdfs-site.xml中的dfs.nameservices来获取,而
value作为NN的通信地址,由hdfs-site.xml中的dfs.namenode.rpc-address,dfs.ha.namenodes来获取。

Map<String, Map<String, InetSocketAddress>> map = DFSUtilClient.getHaNnRpcAddresses(conf);

将获取的地址添加到proxies中,proxies这个list存储了多个NN的通信地址

 this.proxies.add(new ConfiguredFailoverProxyProvider.AddressRpcProxyPair(address));

外部可通过getProxy()接口来实现访问

public synchronized ProxyInfo<T> getProxy() {
    ConfiguredFailoverProxyProvider.AddressRpcProxyPair<T> current = (ConfiguredFailoverProxyProvider.AddressRpcProxyPair)this.proxies.get(this.currentProxyIndex);
    return this.getProxy(current);
}

总结

由OpenLooKeng的安装与连接Hive数据源的使用中引发的问题定位到HDFS组件,再由HDFS的内部流程加深了配置文件及配置项的理解,有用的知识又增加了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值