我需要计算 HBase 表的聚合。
假设我有这个 hbase 表:'metadata' 列族:M 列:n
这里的元数据对象有一个字符串列表
类元数据 { 列出标签;
我需要计算我考虑使用 mapreduce 或直接扫描 hbase 的标签的数量。
结果必须即时返回。那么在这种情况下我可以使用哪个呢?扫描 hbase 并计算聚合或 mapreduce?
Mapreduce 最终将扫描 hbase 并计算计数。
使用这两种方法的优缺点是什么?
最佳答案
我怀疑你不知道HBase的优缺点,它不适合计算大型数据集的实时聚合。
首先让我们说 MapReduce 本身是一个计划作业,您将无法即时返回响应,预计任务跟踪器初始化作业的时间不少于 15 秒。
最后,MapReduce 作业将做完全相同的事情:HBase 扫描,立即执行扫描与 MapReduce 之间的区别只是并行化和数据局部性,这在您拥有数百万/数十亿的数据时表现出色行。如果你的查询只需要读取几千个连续的行来聚合它们,当然,你可以只进行一次扫描,它可能会有一个可接受的响应时间,但对于更大的数据集,在查询时就不可能做到这一点.
HBase 最适合处理大量的原子读写,这样一来,无论您需要多少预聚合计数器或您将收到多少请求,您都可以实时维护这些聚合:通过适当的行键设计和拆分策略,您可以扩展以满足需求。
将其视为单词计数,您可以将所有单词存储在一个列表中,并在请求时在查询时对它们进行计数,或者您可以在插入时处理该列表并存储每个单词在其中使用的次数文档,作为全局计数器,并在每日、每月、每年、每个国家/地区、每个作者的表格(甚至家庭)中。
关于java - Hbase 扫描与 Mapreduce 的动态计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27064373/