HBase Zookeeper关闭连接

时间:2011-03-10 16:30:31

标签: hbase apache-zookeeper

我正在尝试创建一个在Apache Tomcat上运行的简单Web服务,并且只有一个操作可以进行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连接?

由于

3 个答案:

答案 0 :(得分:3)

静态HConnectionManager对象管理与HBase和ZooKeeper的连接。此对象是Configuration(真正HBaseConfiguration)个对象到HConnection个对象的地图。

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

因此,如果您想强行关闭连接,只需将以下行添加到代码段的底部:

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

...然而

HBase API旨在通过单个HConnection复用客户端事务,只要HTable的多个实例共享同一个Configuration对象,它们就会使用相同的HConnection。这样可以节省所有连接设置并减少重复交易的开销。

这是什么意思?

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

答案 1 :(得分:1)

我有类似的问题。我解决它的方法是使Configuration对象静态。通过这种方式,应该只有一个连接(每个jvm)。

答案 2 :(得分:0)

您正在运行什么版本的ZooKeeper?很可能是你正在点击issue 846

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