繁体   English   中英

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 的结果。 由于批处理将有助于提高我的代码的性能,而不是为表的每个 id 发出 get 请求。

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

提前致谢。

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

做你正在寻找的。 您应该会看到巨大的性能改进。

如果您只想知道密钥是否存在:

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

这可能比get更快,因为它只返回truefalse

您应该能够使用扫描仪(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM