Java Hbase扫描与Mapreduce的动态计算
我需要计算HBase表上的聚合 假设我有这个hbase表:“元数据”列系列:M列:n 这里元数据对象有一个字符串列表 类元数据 { 列出标签 } 我需要计算我正在考虑使用mapreduce或直接扫描hbase的标记数 结果必须动态返回。那么在这个场景中我可以使用哪一个呢?扫描hbase并计算聚合或mapreduce Mapreduce最终将扫描hbase并计算计数Java Hbase扫描与Mapreduce的动态计算,java,performance,hadoop,mapreduce,hbase,Java,Performance,Hadoop,Mapreduce,Hbase,我需要计算HBase表上的聚合 假设我有这个hbase表:“元数据”列系列:M列:n 这里元数据对象有一个字符串列表 类元数据 { 列出标签 } 我需要计算我正在考虑使用mapreduce或直接扫描hbase的标记数 结果必须动态返回。那么在这个场景中我可以使用哪一个呢?扫描hbase并计算聚合或mapreduce Mapreduce最终将扫描hbase并计算计数 使用这两种方法的优缺点是什么?我怀疑您不知道HBase的优缺点是什么,它不适合计算大型数据集的实时聚合 让我们先说MapReduce
使用这两种方法的优缺点是什么?我怀疑您不知道HBase的优缺点是什么,它不适合计算大型数据集的实时聚合 让我们先说MapReduce本身就是一个计划作业,您将无法动态返回响应,任务跟踪器初始化作业的时间不少于15秒 最后,MapReduce作业将做完全相同的事情:HBase扫描,立即执行扫描与MapReduce之间的区别在于并行化和数据局部性,当您有数百万/数十亿行时,这一点非常好。如果您的查询只需要读取几千个连续的行来聚合它们,当然,您可以只进行一次扫描,它可能有一个可接受的响应时间,但是对于较大的数据集,在查询时不可能做到这一点 HBase最适合处理成吨的原子读写,这样,您就可以实时维护这些聚合,不管您需要多少预聚合计数器,也不管您将接收多少请求:通过正确的行键设计和拆分策略,您可以扩展以满足需求
可以将其视为字数计数,您可以将所有字数存储在一个列表中,并在请求时在查询时对其进行计数,或者您可以在插入时处理该列表,并将每个字数在文档中的使用次数存储为全局计数器,并存储在每日、每月、每年、每个国家、每个作者的表格(甚至家庭)中.定义“动态”。在调用API时进行计算,而不是安排作业。