【问题标题】:HBase Data Access performance improvement using HBase API使用 HBase API 改进 HBase 数据访问性能
【发布时间】:2015-04-19 05:54:46
【问题描述】:

我正在尝试使用 HBase 表中的前缀过滤器扫描一些行。我在 HBase 0.96 上。

我想增加每个 RPC 调用的吞吐量,以减少访问该区域的请求数。

我在扫描对象上尝试了 getCaching(int) 和 setCacheBlocks(true)。我还尝试添加 resultScanner.next(int)。使用所有这些组合我仍然无法减少 RPC 调用的数量。我仍在为每个键访问 HBase 区域,而不是为每个 RPC 调用带来多个键。

HBase 区域服务器/Datanode 分配了足够的 CPU 和内存。此外,我的数据均匀分布在不同的区域服务器上。此外,我每个键带回的数据也不多。

我观察到,当我向表中添加更多数据时,请求所需的时间会增加。当请求数量增加时,它也会增加。

感谢您的帮助。

R

【问题讨论】:

  • 你能给你看一些代码吗?特别是前缀过滤器
  • 这里是部分过滤器 ArrayList filters = new ArrayList(); for(String flag : periodFlags) { byte[] prefix = Bytes.toBytes(key1 + "" + key2 + ""); filters.add(new PrefixFilter(prefix)); } FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE, filters);扫描标准 = 新扫描(Bytes.toBytes(key1 + "_")); criteria.setFilter(filterList);

标签: hadoop hbase


【解决方案1】:

前缀过滤器通常是性能杀手,因为它们执行全表扫描,总是在扫描中使用开始和停止行而不是前缀过滤器。

Scan scan = new Scan(Bytes.toBytes("prefix"),Bytes.toBytes("prefix~"));

当从ResultScanner迭代Result时,每次迭代都是一次RPC调用,你可以调用resultScanner.next(n)一次性得到一批结果。

【讨论】:

  • 我了解前缀过滤器是性能杀手,但我没有预先掌握完整的关键信息。所以我不能用这个。是否有前缀过滤器的开始和停止?谢谢
  • 我写的本质上是一个前缀过滤器
  • 让我试试看。谢谢
  • @user3771144 起始行不需要精确
  • 我测试了你给出的想法,请求的数量并没有减少。我也在考虑减少请求时间。我观察到的是随着并发请求数量的增加,所花费的时间也会增加。它也会随着表格大小的增加而增加?有没有办法我也可以减少这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 2014-08-12
  • 2023-03-24
相关资源
最近更新 更多