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

Sol*_*olo 7 hbase

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

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

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

  • 这是返回Table的轻量级操作,池化或缓存

  • 既不需要也不需要.

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

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

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

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

小智 1

根据文档

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

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

示例代码:

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

//initialize table
try (Table table = connection.getTable(TableName.valueOf("table-name"))) {
    //use table
}
Run Code Online (Sandbox Code Playgroud)