更新时间:2024-08-03 GMT+08:00

实现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. 下载导入该用户的krb5.conf和user.keytab文件到hive-jdbc-example-multizk包中的resources目录下。
  4. 检查并修改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);

ZooKeeper连接使用完后需要关闭连接,否则可能导致连接泄露。可根据业务实际情况进行处理,代码如下:

//使用try-with-resources方式,try语句执行完后会自动关闭ZooKeeper连接。
try (org.apache.zookeeper.ZooKeeper digestZk =
    new org.apache.zookeeper.ZooKeeper("xxx.xxx.xxx.xxx:端口号", 600000, null)) {
    ...
}