我们可以重用多线程之间的hbase Java客户端连接吗?

时间:2017-01-06 04:45:31

标签: java hbase

在我们的环境中,我们使用多线程通过hbase Java Client调用hbase,并且在每个线程中我们在完成操作时调用Connection.close(),但是我们发现Connection.close()花了大约10毫秒,我可以知道是否可以在不关闭连接的情况下重用线程之间的连接?

1 个答案:

答案 0 :(得分:2)

来自HBase 1.2的API文档,org.apache.hadoop.hbase.client.Connection:https://hbase.apache.org/1.2/apidocs/org/apache/hadoop/hbase/client/Connection.html

  

连接创建是一项重量级的操作。连接   实现是线程安全的,因此客户端可以创建一个   连接一次,并与不同的线程共享。表和管理员   另一方面,实例重量轻,而不是   线程安全的。通常,每个客户端应用程序都有一个连接   实例化,每个线程都将获得自己的Table实例。   建议不要缓存或汇集表和管理员。

     

此类取代现已弃用的HConnection。

所以,是的,创建HBase连接很慢。但是获得的连接是线程安全的,您应该只在应用程序中有一个HBase连接(您应该只在应用程序的结束/关闭时关闭)。

但是,请注意关闭从Connection获取的对象:Table,Admin,ResultScanner,......它们会打开在您完成处理后必须关闭的资源。