HBase 阅读:为了提高性能,如何使用 hbase java REST api 对 get 请求进行批处理

HBase read : To improve on performance , how to do batch processing of get request using hbase java REST api

我是 HBase REST 的新手 API 并试图找到一种方法,我可以通过 get 命令获得一组 Id 的结果。由于批处理有助于提高我的代码的性能,而不是为 table.

的每个 ID 发出获取请求

一些示例 Hbase java 其余 api 代码会有所帮助。

提前致谢。

您应该可以使用扫描仪(HBase 搜索 API)来实现它。下面例如

Scan scan = new Scan();
scan.setTimeRange( lowerBound, upperBound );

 Call it for each Column
scan.addColumn //

scan.setCaching( 1000 ) // how many rows for caching that will be passed to scanners.
ResultScanner scanner = table.getScanner( scan );
Iterator< Result > iterator = scanner.iterator();

有很多文章可以获取更多详细信息,例如https://www.cloudera.com/documentation/enterprise/5-4-x/topics/admin_hbase_scanning.html

您可以为每个 ID 单独执行一组 Get 个请求。

curl -vi -X GET \
         -H "Accept: text/xml" \
         "http://example.com:20550/users/row1"

或者创建过滤器并使用指定的过滤器执行请求:

curl -vi -X PUT \
         -H "Accept: text/xml" \
         -H "Content-Type:text/xml" \
         -d @filter.txt \
         "http://example.com:20550/users/scanner/"

<Scanner batch="100">
  <filter>
    {
      "type": "PrefixFilter",
      "value": "row_id_starts_with"
    }
  </filter>
</Scanner>

cloudera 文档中有关 REST API 的更多信息:https://www.cloudera.com/documentation/enterprise/5-9-x/topics/admin_hbase_rest_api.html

Result[] results = table.get(List<Get> gets)

满足您的需求。您应该会看到显着的性能改进。

如果你只是想知道键是否存在:

boolean[] exists = exists(List<Get> gets);

甚至可以比 get 更快,因为它只有 returns truefalse.