在java中处理hbase连接和表的最佳实践?

时间:2017-04-25 02:25:15

标签: hbase

我正在使用hbase-client 1.2.3,我看到Connection.getTable()方法中有一条注释:

  
      
  • 检索用于访问表的Table实现。

  •   
  • 返回的表不是线程安全的,应该是一个新实例   为每个使用线程创建。

  •   
  • 这是一个轻量级的操作,汇集或缓存   返回表

  •   
  • 既不需要也不需要。

  •   

所以我开始想知道处理连接和表的最佳做法是什么?

例如,我有一个主类,会启动几个线程,让我们调用A,B,C ......

现在我调用“Connection connection = ConnectionFactory.createConnection();”在main方法中,将连接传递给每个线程作为每个线程的参数。然后在每个线程中使用init class。

我想知道这是最好的方法吗?它会导致某些线程安全或效率或任何其他问题吗?

1 个答案:

答案 0 :(得分:0)

根据documentation

创建连接是一项繁重的操作。连接实现是线程安全的,因此客户端可以一次创建一个连接,并与其他线程共享。另一方面,表和管理实例重量轻且不是线程安全的。 通常,实例化每个客户端应用程序的单个连接,并且每个线程都将获得自己的Table实例。不建议对Table和Admin进行缓存或池化。

因此,我建议您仅初始化一次连接,并在每次需要时创建一个新表。

示例代码:

//initialize connection
Configuration hBaseConfig = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(hBaseConfig);

//initialize table
try (Table table = connection.getTable(TableName.valueOf("table-name"))) {
    //use table
}