2

我有一个大约 150k 行的 HBASE 表,每行包含 3700 列。

我需要一次选择多行,并将结果汇​​总回来,例如:

行[1][列1] + 行[2][列1] ... + 行[n][
列1] 行[1][列2] + 行[2][列2] ... + 行[n][ column2]
...
row[1][columnn] + row[2][columnn] ... + row[n][columnn]

我可以使用扫描仪来做到这一点,我认为问题在于,扫描仪就像一个光标,并且不会同时在多台机器上进行分配工作,而是从一个区域获取数据,然后跳到另一个区域region 以获取下一组数据,依此类推,我的结果跨越多个区域。

有没有办法以分布式方式扫描(一个选项,或者为每个区域的数据价值创建多个扫描仪[这本身可能是一罐蠕虫])还是必须在 map/reduce 工作中完成. 如果它是一个 M/R 工作,它对于实时查询是否足够“快”?如果没有,是否有一些很好的替代方法可以使用 NOSQL 类型的数据库实时进行这些类型的聚合?

4

1 回答 1

2

在这种情况下,我会做的是,有另一个表,我将在其中包含聚合摘要。也就是说,当 row[m] 被插入到表 2 中的表 1 中(第 1 列)(这是表 2 的行键)时,我会保存它的总和或其他聚合结果,无论是平均值、标准差、最大值、最小值等等

另一种方法是将它们索引到诸如 Lucene、Solr、Elastic Search 等搜索工具中,并在那里运行聚合搜索。以下是Solr中的一些示例。

最后,跨越多个区域的扫描或 M/R 作业不是为实时查询而设计的(除非以这种方式设计的集群,即超出数据要求的集群)。

希望能帮助到你。

于 2011-01-07T06:28:31.677 回答