HBase Shell前缀过滤器的速度比静态端点快100倍

时间:2018-10-05 19:16:36

标签: c# hbase hdinsight hbase-shell

如果我在HBase Shell上使用前缀过滤器运行扫描,则无论我使用什么前缀,都可以在不到1秒的时间内得到响应。 (0对9或“ a”对“ z”的响应速度没有差别。)

但是,当我从Microsoft HBase库(在C#中)进行相同的查询时,最多可能需要90秒才能得到答案。有趣的是,如果我选择一个更接近于0的前缀,则它越快,离0越远,花费的时间就越长。 (作为前缀过滤器,“ a”比“ f”要快)。

不确定如何确定shell与静态查询的不同之处,或者如何使静态查询的性能更高。

一些细节:

  • 此表中的记录超过20,000,000条
  • 行键设计为[guid] _ [inverse timestamp],例如a6fc9620-5ff0-41c0-9ed9-660bc3fbb65c_9223370501253811889

对我应该寻找或试图改善其余api请求的任何想法吗?

1 个答案:

答案 0 :(得分:0)

结果证明这不是问题。我没有像我想的那样在shell和其余API上运行相同的命令。

在其余的API上,我提供了两个过滤器,一个页面过滤器和一个前缀过滤器。

我正在运行的HBase shell上

scan 'beacon', {STARTROW => 'ff', FILTER => "PageFilter(25)"}

STARTROW与前缀过滤器不同。实际上,它做的更多事情是设置一个完整的开始行键,从而使扫描性能更高,因为它没有遍历整个表。

结果是,这也是我在其余API调用中应该做的事情。除了前缀过滤器和页面过滤器之外,当我设置开始行和结束行时,它可以按预期快速运行。

https://community.hortonworks.com/articles/55204/recommended-way-to-do-hbase-prefix-scan-through-hb.html

Should I use prefixfilter or rowkey range scan in HBase