| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
ygp8
9年前发布

Hadoop 排重优化

如果觉得有帮助的话就顶下吧

在统计的时候经常会用到排重,比如想统计每日登陆用户,但是一个用户一次多次登陆情况,或者一个产品被多少个用户下载。。等等情况

截图一是我之前写的代码:

Hadoop 排重优化

下面是我优化后代码

public static class ReduceTask extends Reducer<Text, Text, Text, IntWritable> {        private IntWritable rval = new IntWritable();      private Multiset<Text> multiset=HashMultiset.create();        @Override      protected void reduce(Text key, Iterable<Text> values, Context context)              throws IOException, InterruptedException {            multiset.clear();          for (Text item:values){              multiset.add(item);          }            rval.set(multiset.elementSet().size());          context.write(key, rval);      }  }

Multiset,会将相同的key,存到value种,只要将key遍历出来取值的个数就是排重后的数据。

前者是循环嵌套查找但是占用内存少 ,1179个组,平均每个组被分到6万条,最坏情况下(6w/2)^2*1179级别的循环,后者利用hashmap高效的存取值方式,是O(n)的级别,但是占用内存比较大

性能对比,下图是输入的数据,经过map的筛选,,

Hadoop 排重优化

下图是代码1执行的用时

Hadoop 排重优化

执行了一小时还没结束,下图是代码二的时间 只要俩分钟不到,执行速度有大幅提升

Hadoop 排重优化

来自:http://my.oschina.net/osenlin/blog/500819

 本文由用户 ygp8 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1441422311675.html
Hadoop 分布式/云计算/大数据