
# 实现Hive进程访问多ZooKeeper
#### 功能简介
FusionInsight支持在同一个客户端进程内同时访问FusionInsight ZooKeeper和第三方的ZooKeeper，分别通过"testConnectHive"和"testConnectApacheZK"方法实现。
在hive-jdbc-example-multizk包中的"JDBCExample"类中，main方法的代码结构如下：
```
public static void main(String[] args) throws InstantiationException,IllegalAccessException, ClassNotFoundException, SQLException, IOException{
     testConnectHive();//访问FusionInsight ZooKeeper的方法
     testConnectApacheZk();//访问开源ZooKeeper的方法
 }
```
#### 访问FusionInsight ZooKeeper
如果仅需运行访问FusionInsight Zookeeper方法，需注释掉main函数中的"testConnectApacheZk"方法。
使用"testConnectHive"方法访问FusionInsight ZooKeeper前需执行如下操作：
1. 修改JDBCExample中"init"方法中的"USER_NAME"参数的值。"USER_NAME"对应的用户用于访问FusionInsight ZooKeeper，需拥有FusionInsight Hive、Hadoop普通用户组权限。
2. 进入客户端解压路径"FusionInsight_Cluster_1_Services_ClientConfig_ConfigFiles\\Hive\\config"，手动将"core-site.xml"、"hiveclient.properties"文件放到样例工程的"hive-jdbc-example-multizk\\src\\main\\resources"目录下。
3. 检查并修改resources目录下hiveclient.properties文件中"zk.port"和"zk.quorum"参数的值： 
   - zk.port：为访问FusionInsight ZooKeeper的端口，通常保持默认，根据实际使用情况修改。
   
   - zk.quorum：为访问ZooKeeper quorumpeer的地址，请修改为集群部署有FusionInsight ZooKeeper服务的IP地址。
   
   
   
   
#### 访问开源 ZooKeeper
使用"testConnectApacheZk"连接开源ZooKeeper的代码，只需要将以下代码中的"xxx.xxx.xxx.xxx"修改为需要连接的开源的ZooKeeper的IP，端口号按照实际情况修改。如果仅需运行访问第三方Zookeeper的样例，需注释掉main函数中的"testConnectHive"方法。
```
digestZK = new org.apache.zookeeper.ZooKeeper("xxx.xxx.xxx.xxx:端口号", 60000, null);
```
![](https://support.huaweicloud.com/devg-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
ZooKeeper连接使用完后需要关闭连接，否则可能导致连接泄露。可根据业务实际情况进行处理，代码如下：
```
//使用try-with-resources方式，try语句执行完后会自动关闭ZooKeeper连接。
try (org.apache.zookeeper.ZooKeeper digestZk =
    new org.apache.zookeeper.ZooKeeper("xxx.xxx.xxx.xxx:端口号", 600000, null)) {
    ...
}
```
