Hive - MetaStore 以及 HiveServer2 高可用配置部署

1,561 阅读1分钟

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 的命名空间及其下的各个节点