2012-02-15 17 views
2

我需要为我的adhoc查询在HBase表上进行扫描。目前我只用一个节点。我想知道是否在多台机器上以分布式模式运行HBase可能会使其速度更快。目前大约需要5分钟在m1.large EC2机器上对300万行进行扫描。 欢迎任何关于如何快速扫描的想法。目前,我已启用scan.setCaching,这对我有很大帮助如果在超过1台计算机上运行HBase,是否更快地在Hbase上运行扫描?

+0

您可以使用mapreduce程序更快地扫描并仅使用映射器类。 – userRaj 2016-06-09 10:01:28

回答

4

不,添加节点不会加速扫描。 HBase扫描是由于几个原因而连续进行的。

当你做出这样的HTable.getScanner(scan)什么是返回一个呼叫Result对象的迭代器 - 在调用了next()项目,HBase的实际执行使用您的扫描参数的下一行的另一个获取样查询。所有的Scan对象本身都会生成一个行键列表并提供一个可以在其中移动的迭代器(它实际上对缓存进行了更多的操作,并找出了行键存在于哪些区域,但我们可以忽略它) 。

除了HBase中的Scan的实际机制之外,还有regions作为物理存储磁盘上数据的基础架构。区域文件中最广泛的组织因素是列族。这很有意义,因为在同一列/系列中获取数据片段时,它可以减少开销。由于列族通常存在于一个区域(或一组区域,随着列族大小的增长),因此并行化扫描的效果会很小,除非您扫描的行数足以保证从多个区域读取,通常建议不要这样做(在某个点之后,使用map/reduce操作收集关于数据集的信息并对其进行计算会变得很有用)。