从 HBASE 数据返回聚合

Posted

技术标签:

【中文标题】从 HBASE 数据返回聚合【英文标题】:Returning aggregations from HBASE data 【发布时间】:2010-12-29 16:36:03 【问题描述】:

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

我需要一次选择多行,然后汇总结果,例如:

行[1][column1] + 行[2][column1] ... + 行[n][column1] 行[1][列2] + 行[2][列2] ... + 行[n][列2] ... 行[1][列] + 行[2][列] ... + 行[n][列]

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

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

【问题讨论】:

【参考方案1】:

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

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

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

希望对你有帮助。

【讨论】:

以上是关于从 HBASE 数据返回聚合的主要内容,如果未能解决你的问题,请参考以下文章

万亿级日志与行为数据存储查询技术剖析——Hbase系预聚合方案Dremel系parquet列存储预聚合系Lucene系

hbase 聚合操作

Hbase学习

Mongodb试图让选定的字段从聚合中返回

为啥我的聚合返回重复数据?

MongoDB——聚合操作