实现Hive进程访问多ZooKeeper
功能简介
FusionInsight支持在同一个客户端进程内同时访问FusionInsight ZooKeeper和第三方的ZooKeeper,分别通过“testConnectHive”和“testConnectApacheZK”方法实现。
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前需执行如下操作:
- 修改JDBCExample中“init”方法中的“USER_NAME”参数的值。“USER_NAME”对应的用户用于访问FusionInsight ZooKeeper,需拥有FusionInsight Hive、Hadoop普通用户组权限。
- 进入客户端解压路径“FusionInsight_Cluster_1_Services_ClientConfig_ConfigFiles\Hive\config”,手动将“core-site.xml”、“hiveclient.properties”文件放到样例工程的“hive-jdbc-example-multizk\src\main\resources”目录下。
- 下载导入该用户的krb5.conf和user.keytab文件到hive-jdbc-example-multizk包中的resources目录下。
- 检查并修改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)) { ... }