HIVE -- unable to read hiveserver2 configs zookeeper(开启ranger)

hive 通过beeline 连接 hive报错unable to read hiveserver2 configs zookeeper:
首先会在zookeeper里面创建一个namespace:并创建hiveserver2 znode。

image.png

可以看到是serverUri开头的几个节点。
此时用客户端(如beeline)连接hs2时,url需使用
jdbc:hive2://zk1:2181,zk2:2181,zk3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
此时zk会随机从多个实例中随机拿一个实例供连接使用,过程在代码中体现如下:
image.png

先去指定的znode(/hiveserver2)下拿到所有实例,再通过Random随机拿其中一个去连接;也正因为这个随机的过程,此种方式的hs2高可用一定程度上实现了hiveserver2的负载均衡。
关于/hiveserver2下的leader节点如何产生:
当你同时开启了鉴权的服务(如ranger),hs2在启动时不仅会注册hs2的实例,还会注册一个leader节点,因为leader节点的存在,使上面讲的随机拿的过程中就可能会拿到这个leader节点,而该节点实际不是有效的hs2实例,故此时连接会报错“Unable to read HiveServer2 configs from ZooKeeper”.
鉴权模型不为null:
image.png
image.png
导致zk 随机节点出错。
这个leader节点是有作用的:hiveserver2有高可用模式,ActivePassiveHA,此时leader节点才会发挥作用,但是hiveserver2实例之间并没有namenode那种主备的必要性,ActivePassiveHA是使用leader来实现active的作用,并且没有具体的实践案例,此处选择在hive随机znode时过滤leader节点。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容