HBase分布式扫描仪

时间:2009-07-13 10:20:10

标签: hadoop hbase

在HBase文档的“入门”页面的“API使用示例”中,有一个扫描仪使用示例:

  

扫描仪扫描仪= table.getScanner(新的   串[] { “myColumnFamily:columnQualifier1”});

RowResult rowResult = scanner.next();
 while (rowResult != null) {
  //...
  rowResult = scanner.next(); 
     

}

据我了解,此代码将在一台计算机(名称节点)上执行,并且不会分发所有扫描和过滤工作。仅分发数据存储和数据加载。我如何使用分布式扫描程序,它将在每个节点上进行分析。

哪种快速数据过滤最佳做法? 感谢。

2 个答案:

答案 0 :(得分:1)

无论如何,这是旧的:扫描仪只是一个类似光标的api,用于检索计算结果。对于计算,您使用MapReduce作业(hbase.mapred)。

答案 1 :(得分:1)

扫描仪的工作方式是从第一个区域开始,扫描行并从一个区域跳到另一个区域。您可以做的一个技巧是创建多个扫描程序,每个扫描程序在一个区域的开始和结束键上开始和结束,然后创建多个并行读取并在一个输出队列中写入的线程。现在,您的流程需要足够快速地读取,处理和从该队列中删除项目,否则您可能会在客户端OOM,以防您有太多行进入太快。您还需要使用并发结构来避免同步延迟。

您可以使用HTable上的getRegionLocations检索区域信息: http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HTable.html#getRegionLocations()

另请注意,如果您没有足够快地读取扫描程序,扫描程序可能会超时,因此在您的队列变空之前阻塞您的使用者线程可能不是一种选择。