在我们的环境中,我们使用多线程通过hbase Java Client调用hbase,并且在每个线程中我们在完成操作时调用Connection.close(),但是我们发现Connection.close()花了大约10毫秒,我可以知道是否可以在不关闭连接的情况下重用线程之间的连接?
答案 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,......它们会打开在您完成处理后必须关闭的资源。