HBase Zookeeper紧密连接
我试图创建一个简单的Web服务,它运行在ApacheTomcat上,只有一个操作可以进行HBase表扫描。 以下是我获取配置的方式: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
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应该只有一个连接。不要忘记-如果您看到问题的正确答案,请单击答案旁边的复选框“接受”它。