在HBase文档中关于“入门”页面的"API使用示例“中,有一个扫描仪使用的示例:
扫描器=table.getScanner(新的String[]{“myColumn族:columnQualifier1 1”});
RowResult rowResult = scanner.next();while (rowResult != null) {//.rowResult = scanner.next();
}
据我所知,这段代码将在一台计算机(名称节点)上执行,并且所有的扫描和过滤工作都不会被分发。只有数据存储和数据加载才会被分发。如何使用分布式扫描器,它将在每个节点上单独工作。
快速数据过滤的最佳实践是哪一个?谢谢。
发布于 2009-12-20 20:13:31
无论如何,这是旧的:扫描器只是一个用于检索计算结果的类似游标的api。对于计算,可以使用MapReduce作业(hbase.mapred)。
发布于 2013-02-27 20:01:16
扫描仪的工作方式是从第一个区域开始,扫描行并从一个区域跳到下一个区域。您可以做的一个技巧是创建多个扫描器,每个扫描器在一个区域的开始键和结束键上开始和结束,然后创建多个线程,这些线程并行读取并写入一个输出队列。现在,您的流程需要足够快地从队列中读取、处理和移除项目,否则您可能会对客户端进行OOM,以防太多行进入太快。您还需要使用并发结构来避免同步延迟。
可以使用getRegionLocations检索HTable:http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HTable.html#getRegionLocations()上的区域信息
另外,请记住,如果读取不够快,扫描器可能会超时,因此阻塞使用者线程直到队列变为空可能不是一种选择。
https://stackoverflow.com/questions/1118676
复制相似问题