这里最主要的是利用了zk的命名空间,首先我们把两个hiserver2先后启动,注册到zk集群的,然后通过zk轮询做高可用,就是这么简单,下边详细讲解一下,安装配置
第一步 在两台节点上安装hive,除了配置的ip不同,其他的都相同,并在hive-site.xml中添加如下配置
<property>
<name>spark.deploy.recoveryModename>
<value>ZOOKEEPERvalue>
property>
<property>
<name>hive.server2.support.dynamic.service.discoveryname>
<value>truevalue>
property>
<property>
<name>hive.zookeeper.quorumname>
<value>node5:2181,node4:2181,node3:2181value>
property>
<property>
<name>hive.server2.thrift.bind.hostname>
<value>0.0.0.0value>
property>
<property>
<name>hive.server2.thrift.portname>
<value>10001value> //两个HiveServer2实例的端口号要一致
property>
然后保存文件
先启动第一部需要服务高可用的主机上的HiveServer2服务
sh $HIVE_HOME/bin/hiveserver2
再启动第二部需要服务高可用的主机上的HiveServer2服务
sh $HIVE_HOME/bin/hiveserver2
确认端口是否监听 netstat -lnp | grep 10000 ,默认端口是10000
JDBC连接的URL规范:
jdbc:hive2://<zookeeper quorum>/<dbName>;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=nameSpace
语法解析
# 为Zookeeper的集群链接串,如node5:2181,node4:2181,node3:2181
# 为Hive数据库(可不填, 默认为default)
serviceDiscoveryMode=zooKeeper # 指定模式为zooKeeper
zooKeeperNamespace=nameSpace # 指定ZK中的nameSpace,即参数hive.server2.zookeeper.namespace所定义,在hive-site.sh中定义为hiveserver2_zk
测试连接:
(1)启动beeline服务:
sh $HIVE_HOME/bin/beeline
(2)在beeline中输入以下连接指令:
!connect jdbc:hive2://node5:2181,node4:2181,node3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk
或者
beeline -u "jdbc:hive2://node5:2181,node4:2181,node3:2181/ding;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk" -nhadoop -phadoop123$
beeline -u
就不解释了node5:2181,node4:2181,node3:2181
表示zk集群的连接信息ding
表示要连接的hive库serviceDiscoveryMode=zooKeeper
表示指定hiveserver连接模式为zookeeper连接zooKeeperNamespace=hiveserver2_zk
指定配置文件中的命名空间-nhadoop
表示当前用户用hadoop用户连接beeline-phadoop123$
表示当前用户的密码(这里beeline的权限认证使用的是自定义的权限控制)然后进入客户端进新房操作
(3)如没使用HiveServer2服务高可用是,则连接beeline使用下列指令:
!connect jdbc:hive2://m1
我们杀了了其中一个hiveserver2,比如hiveserver2-1,然后还可以请求,多次测试可以使用
参考:
https://blog.csdn.net/dingyanming/article/details/78606971
https://blog.csdn.net/suifeng3051/article/details/49508261