问题:Hbase 扫描与 Mapreduce 进行即时计算

我需要在 HBase 表上计算聚合。

假设我有这个 hbase 表:'元数据'列族:M 列:n

这里元数据对象有一个字符串列表

类元数据 { 列出标签;

}

我需要计算我正在考虑使用 mapreduce 或直接扫描 hbase 的标签数量。

结果必须即时返回。那么在这种情况下我可以使用哪一个呢?扫描 hbase 并计算聚合或 mapreduce?

Mapreduce 最终将扫描 hbase 并计算计数。

使用这两种方法的优缺点是什么?

解答

我怀疑你不知道 HBase 的优缺点是什么,它不适合计算大型数据集的实时聚合。

让我们首先说 MapReduce 本身就是一个预定的作业,您将无法即时返回响应,预计任务跟踪器初始化作业的时间不少于 15 秒。

最后,MapReduce 作业将做完全相同的事情:HBase 扫描,立即执行扫描和 MapReduce 之间的区别只是并行化和数据局部性,当您拥有数百万/数十亿行时,它会表现出色。如果您的查询只需要读取几千个连续行来聚合它们,当然,您可以只进行一次扫描,它可能会有可接受的响应时间,但对于较大的数据集,在查询时就不可能做到这一点.

HBase 最适合处理大量的原子读写,这样,无论您需要多少预聚合计数器或将接收多少请求,您都可以实时维护这些聚合:适当的行键设计和拆分策略可以扩展以满足需求。

将其视为字数统计,您可以将所有单词存储在一个列表中,并在请求时在查询时对其进行计数,或者您可以在插入时处理该列表并存储每个单词在文档中使用的次数,作为全球计数器,并在每日、每月、每年、每个国家、每个作者表(甚至家庭)中。

Logo

更多推荐