Hive 高可用
metastore
在 hive-site.xml 中的hive.metastore.uris配置中,配置多个节点,如
<property>
<name>hive.metastore.uris</name>
<value>thrift://node1:9083, thrift://node2:9083, thrift://node3:9083</value>
</property>
在 node1~node3 三台服都启动 metastore
在 Hive 客户端进行查询的时候,始终使用第一个 URI 连接到 metastore 服务器
若第一个 URI 不可用,则从剩下的 URI 中随机选择一个并尝试与之建立连接
HiveServer2
Hive从0.14开始,使用Zookeeper实现了HiveServer2的HA功能(ZooKeeper Service Discovery),Client端可以通过指定一个nameSpace来连接HiveServer2,而不是指定某一个host和port
在已经部署好 ZK 集群的前提下,配置 hive-site.xml
<property>
<name>hive.server2.support.dynamic.service.discovery</name>
<value>true</value> <!--服务发现-->
</property>
<property>
<name>hive.server2.zookeeper.namespace</name>
<value>hiveserver2_zk</value> <!--hive在zk的命名空间-->
</property>
<property>
<name>hive.zookeeper.quorum</name>
<value> zkNode1:2181,zkNode2:2181,zkNode3:2181</value> <!--zk集群列表-->
</property>
<property>
<name>hive.zookeeper.client.port</name>
<value>2181</value> <!--zk端口号-->
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hostname</value> <!-- 这个不同的机器上面,对应不同的主机名 -->
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10001</value> <!--两个HiveServer2实例的端口号要一致-->
</property>
配置完毕后,在各个节点上启动hive
hive --service hiveserver2 &
hive --service metastore &
随后在zkCli.sh里执行ls /hiveserver2_zk即可看见 hive 在 zk 的命名空间及其下的各个节点