HBase Zookeeper紧密连接

HBase Zookeeper紧密连接,hbase,apache-zookeeper,Hbase,Apache Zookeeper,我试图创建一个简单的Web服务,它运行在ApacheTomcat上,只有一个操作可以进行HBase表扫描。 以下是我获取配置的方式: Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "hdp-node"); Htable table = new HTable(config, "myTable"); ... scanner ... scanner.c

我试图创建一个简单的Web服务,它运行在ApacheTomcat上,只有一个操作可以进行HBase表扫描。 以下是我获取配置的方式:

Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "hdp-node");

Htable table = new HTable(config, "myTable");       

... scanner ...

scanner.close()
table.close()
问题是到
Zookeeper
的连接保持打开状态,当我连接到一定数量的连接时,
Zookeeper
开始放弃

进行扫描后,如何关闭我的
Zookeeper
连接


谢谢你运行的是什么版本的ZooKeeper?很可能是你在击球


尝试将ZooKeeper升级到3.3.2或更高版本。

到HBase和ZooKeeper的连接由静态对象管理。此对象是(实际上)对象到对象的映射

HConnectionManager允许您通过调用配置实例的方法来清理其连接

因此,如果要强制关闭连接,只需在代码段底部添加以下行:

//free resources and close connections
HConnectionManager.deleteConnection(config,true);
然而

HBase API旨在通过单个HConnection多路传输客户端事务,只要多个实例共享同一配置对象,它们将使用相同的HConnection。这将为重复事务节省所有连接设置和拆卸开销

这是什么意思


这意味着,如果可能,您确实希望限制每个进程的HBaseConfiguration实例数,即使它们在多个线程之间共享。但是,请记住,的实例,因此它们不应该被多个线程修改。

我也有类似的问题。我解决这个问题的方法是使配置对象保持静态。通过这种方式,每个jvm应该只有一个连接。

不要忘记-如果您看到问题的正确答案,请单击答案旁边的复选框“接受”它。