基于zookeeper 搭建Hiveserver2 高可用集群遇到的坑

基于zookeeper 搭建Hiveserver2 高可用集群遇到的坑

 背景:

网上大部分的Hive搭建教程只是简单的介绍了Hive的搭建教程,大部分都是参照官网上的搭建步骤,而与生产上的搭建还有些区别。笔者是先搭建了一套Hadoop HA的集群(namnode 高可用),于是乎产生了搭建Hive的高可用集群,但是这个过程是非常痛苦的。

Hive高可用的实质:

hive有几种方式的连接,除客户端方式的连接外,hive还提供了jdbc方式连接。通过启动Hiveserver2服务,来提供jdbc方式的连接。当然在测试时使用单一的Hiveservice2服务变可以使用hive的jdbc方式连接hive,但是在实际的生成中,可能因为业务的不断更新,需要对hive的连接做负载均衡,或者是高可用。那么单一的Hiveservice2服务就无法满足生产的需求。

Hive高可用的搭建

hive高可用是基于zookeeper集群,这里我们假设hadoop,zookeeper集群都已经搭建完成,我们要做的就是修改下hive-size.xml配置。

分别启动master,node1节点上Hivesever2服务,

启动命令如下:nohup hive –service hiveserver2 >> ~/hiveserver2.log 2>&1 &

HiveServer2 jdbc连接方式

1:单节点的连接方式:jdbc:hive2://master:10000/default

2:zookeeper集群的连接方式:jdbc:hive2://master:2181,node1:2181,node2:2181/default”jdbc:hive2://master:2181,node1:2181,node2:2181/default;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk1

连接失败的原因:

笔者在搭建好hive后,采用zookeeper集群方式连接却失败了,网上查找了很多资料也没有找到原因,花了1个周时间看了下源码,大概定位到hive-jdbc.jar包中的处理连接字符串的方法

通过调试,发现该步的代码并没有正确的解析jdbcurl字符串。

怀疑导入的hive-jdbc.jar包版本有问题。

笔者的环境均基于cdh5.9.3版本搭建,而笔者采用的hive-jdbc.jar包则只是使用了maven的常规版本包,替换cloudera的maven包后,测试竟然连接成功了。

至此hive的高可用搭建完成。

吐槽:

在遇到连接失败的问题后,咨询了几个群,结果群内的大神说是jdbcUrl错误,要采用单节点的连接方式,这明显是连高可用的jdbcUrl连接方式都不知道。凡事都得靠自己摸索。如果有网友遇到这种棘手的问题,不防从版本上入手。这样能省很多时间。