我需要在HBase表上扫描我的adhoc查询。目前我只使用一个节点。我想知道在多于一台机器上以分布式模式运行HBase是否会使它更快。目前在m1.large EC2机器上对300万行进行扫描大约需要5分钟。 欢迎任何关于如何使扫描更快的想法。目前,我已经启用了scan.setCaching,这有很多帮助
答案 0 :(得分:4)
不,添加节点不会加快扫描速度。 HBase扫描是连续的,原因有两个。
当你像这样调用HTable.getScanner(scan)
时,返回的是Result
个对象的迭代器 - 在调用next()
项时,HBase实际上正在执行另一个Get-like查询使用扫描参数的下一行。所有Scan
对象本身都会生成一个行键列表,并提供一个迭代器,您可以使用它来移动它们(它实际上有关缓存和确定行键存在哪些区域的更多信息,但我们可以忽略那个)。
除了HBase中Scan
的实际机制之外,还有regions作为在磁盘上物理存储数据的基础架构。区域文件中最广泛的组织因素是列族。这是有道理的,因为它在同一列/系列中获取数据时允许更少的开销。由于列族通常存在于一个区域(或一组区域中,随着列族的大小增加),并行扫描的效果将是最小的,除非您对足够的行进行扫描以保证从多个区域读取,通常建议不要使用(在某一点之后,使用map / reduce操作收集信息和计算数据集会很有用)。