我需要在HBase表上计算聚合。
假设我有这个hbase表:'metadata'列族:M列:n
此处元数据对象具有字符串列表
类元数据 { 列表标签;
}
我需要计算我正在考虑使用mapreduce或直接扫描hbase的标签数量。
结果必须即时返回。那么在这种情况下我可以使用哪一个?扫描hbase并计算聚合或mapreduce?
Mapreduce最终会扫描hbase并计算数量。
使用其中任何一种的优点和缺点是什么?
答案 0 :(得分:0)
我怀疑你不知道HBase的优点和缺点是什么,它不适合计算大型数据集的实时聚合。
让我们首先说MapReduce本身就是一个预定的工作,你不能动态地返回响应,期望任务跟踪器初始化工作不少于15秒
最后,MapReduce Job将完成同样的事情:HBase扫描,正确执行扫描与MapReduce之间的区别,它只是paralellization和数据位置,当你有数百万/数十亿行。如果您的查询只需要读取几千个连续的行来聚合它们,当然,您可以进行扫描,它可能会有一个可接受的响应时间,但对于较大的数据集,它只是不可能做到在查询时。
HBase最适合处理大量的原子读写操作,这样,无论您需要多少预先聚合的计数器或者您需要多少个请求,您都可以实时维护这些聚合。重新接收:通过适当的行键设计和拆分策略,您可以扩展以满足需求。将其视为单词计数,您可以将所有单词存储在列表中并在查询时在请求时对它们进行计数,或者您可以在插入时处理该列表并存储每个单词的使用次数该文件,作为全球计数器,以及每日,每月,每年,每个国家,每个作者的表格(甚至是家庭)。