3

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

扫描仪扫描仪 = table.getScanner(new String[]{"myColumnFamily:columnQualifier1"});

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

}

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

快速数据过滤的最佳实践是什么?谢谢。

4

2 回答 2

1

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

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

另请记住,如果您读取扫描程序的速度不够快,扫描程序可能会超时,因此在您的队列变空之前阻塞您的消费者线程有时可能不是一个选择。

于 2013-02-27T20:01:16.637 回答
1

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

于 2009-12-20T20:13:31.933 回答