架构原理介绍:
我准备在node1和node2上分别启用两个HiveServer2的实例,并通过zookeeper完成HA的配置。
1.Hive配置
注:这里假设你的Zookeeper已经安装好,并可用。
在两个安装了apache-hive-2.0.0-bin的机器上,分别编辑hive-site.xml,添加以下参数:
<property>
<name>spark.deploy.recoveryMode</name>
<value>ZOOKEEPER</value>
</property-->
<!--设置hiveserve支持动态-->
<property>
<name>hive.server2.support.dynamic.service.discovery</name>
<value>true</value>
</property>
<!--设置hiveserver2的命名空间-->
<property>
<name>hive.server2.zookeeper.namespace</name>
<value>hiveserver2_zk</value>
</property>
<!--设置zk集群的客户端地址-->
<property>
<name>hive.zookeeper.quorum</name>
<value>node5:2181,node4:2181,node3:2181</value>
</property>
<!--指定zk的端口,这个是否可以去掉,因为上一步已经配置了端口,由于时间关系,我没有做测试,有兴趣可以测试一下-->
<property>
<name>hive.zookeeper.client.port</name>
<value>2181</value>
</property>
<!--指定hive.server2.thrift.bind.host-->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value> //两个HiveServer2实例的端口号要一致
</property>
2.启动服务
启动分别启动两个hiveserver2服务
3.连接
3.1JDBC连接
JDBC连接的URL规范:
jdbc:hive2://zookeeper quorum/dbName;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=nameSpace
语法解析
zookeeper quorum:为Zookeeper的集群链接串,如node5:2181,node4:2181,node3:2181
dbName : 为Hive数据库(可不填, 默认为default)
serviceDiscoveryMode=zooKeeper : 指定模式为zooKeeper
zooKeeperNamespace=nameSpace : 指定ZK中的nameSpace,即参数hive.server2.zookeeper.namespace所定义,在hive-site.sh中定义为hiveserver2_zk
3.2 beeline连接
(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使用下列指令:
beeline -u jdbc:hive2://localhost:10000 -n henghe
4.测试
我们杀了了其中一个hiveserver2,比如hiveserver2-1,然后还可以请求,多次测试可以使用
参考:
1)https://editor.csdn.net/md?articleId=105050425
2)https://blog.csdn.net/qq_30950329/article/details/78024282?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
3)https://blog.csdn.net/dingyanming/article/details/78606971?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task