OpenLooKeng连接hive出现UnknownHostException
背景
忍者头像
最近在验证⼀个计算的⽅案,使⽤的是华为开源的数据虚拟化引擎OpenLookeng(hetu),底层基于presto引擎来提供交互式查询分析能⼒。先前成功部署过⼀套,添加hive,mysql等数据源⼀切正常。后重新在其他环境进⾏部署时,连接hive时出现
问题定位与解决
连接hive数据源需要指定两个配置⽂件l和l,开启kerberos验证还需指定ur.keytab和f验证⽂件。hacluster是hadoop⾼可⽤名称,在l的fs.default中有相关配置,在l中也有hacluster相关配置。于是我将问题定位到这⼏个地⽅
千字文读后感
1.本地/etc/hosts没有相关配置
添加平台host⽂件中配置(⽆效)
<-l⽂件中相关配置不匹配
中外寓言故事
修改fs.defaultFS配置,将value改为hdfs://host:port/ (⽆效)
添加fs.default.name配置(⽆效)
删除fs.defaultFS配置(⽆效)
3.hdfs-site⽂件中相关配置不匹配
将⽂件中的host名改为ip形式(⽆效)
马唐4.⽐对部署成功的OpenLooKeng配置
将l和l与当前配置⽂件的配置项⼀⼀⽐对,发现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,由l中的dfs.namervices来获取,⽽
播音稿子value作为NN的通信地址,由l中的dfs.namenode.rpc-address,dfs.ha.namenodes来获取。
Map<String, Map<String, InetSocketAddress>> map = HaNnRpcAddress(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.curre ntProxyIndex);
Proxy(current);
}
总结
唯美图片背景由OpenLooKeng的安装与连接Hive数据源的使⽤中引发的问题定位到HDFS组件,再由HDFS的内部流程加深了配置⽂件及配置项的理解,有⽤的知识⼜增加了。