【问题标题】:Best practice of handling hbase connection and table in java?在java中处理hbase连接和表的最佳实践?
【发布时间】:2017-04-25 02:25:14
【问题描述】:

我用的是hbase-client 1.2.3,看到Connection.getTable()方法里面有注释:

  • 检索表实现以访问表。

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

  • 这是一个轻量级操作,池化或缓存 返回表

  • 既不需要也不需要。

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

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

现在我调用“连接连接 = ConnectionFactory.createConnection();”在 main 方法中,并将连接作为每个线程的参数传递给每个线程。然后在每个线程中初始化 Table 类。

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

【问题讨论】:

    标签: hbase


    【解决方案1】:

    根据documentation

    连接创建是一个重量级的操作。连接实现是线程安全的,因此客户端可以创建一次连接,并与不同的线程共享它。另一方面,Table 和 Admin 实例是轻量级的并且不是线程安全的。 通常,每个客户端应用程序都会实例化一个连接,并且每个线程都将获得自己的 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      相关资源
      最近更新 更多