hadoop 排重优化

简介: java hadoop 排重 优化

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

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

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

image

下面是我优化后代码

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的筛选,,

image

下图是代码1执行的用时

image

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

image

文章转载自 开源中国社区[https://www.oschina.net]

相关文章
|
SQL 存储 缓存
Hadoop-Impala优化十大指导原则和最佳实践(二)
简介: 以下是性能准则和最佳做法。您可以使用在规划过程中实验,和hadoop集群一起进行impala的性能调整。所有这些信息也可在文档的其他地方更详细的impala文档;以下是优化的方法措施,强调优化调优技术提供最高的投资回报
1323 0
|
5月前
|
分布式计算 Hadoop Java
hadoop sdk 优化小结(裁剪、集成kerberos组件、定制等)
hadoop sdk 优化小结(裁剪、集成kerberos组件、定制等)
44 0
|
9月前
|
分布式计算 Kubernetes Hadoop
hadoop sdk 优化小结(裁剪、集成kerberos组件、定制等)
hadoop sdk优化、裁剪、集成kerberos组件、定制化等
87 0
|
存储 分布式计算 Java
大数据存储平台调优之Hadoop优化
大数据存储平台调优之Hadoop优化 在搭建完集群、完成Linux系统配置(优化)后以及建好HDFS上的目录后,我们接下来需要对Hadoop集群做一些优化的工作。我们从两个方面来说:一是HDFS存储方面,一是计算方面  1、 HDFS方面: 1> 存储格式的选择 对于分析类型的业务来说,最好的存储格式自然是列存储,因为数据量巨大,只扫关心的数据列无疑具有很大优势。
4782 0
|
SQL 分布式计算 Hadoop
【Hadoop技术篇】hive的优化,经典面试
1) 开启配置:set hive.optimize.bucketmapjoin = true; 2) 一个表的bucket数是另一个表bucket数的==整数倍== 3) bucket列 == join列 4) 满足map join条件
254 0
【Hadoop技术篇】hive的优化,经典面试
|
SQL 存储 分布式计算
Hadoop-Impala优化十大指导原则和最佳实践(一)
以下是性能准则和最佳做法。您可以使用在规划过程中实验,和hadoop集群一起进行impala的性能调整。所有这些信息也可在文档的其他地方更详细的impala文档;以下是优化的方法措施,强调优化调优技术提供最高的投资回报
1612 0
|
SQL 分布式计算 关系型数据库
|
分布式计算 安全 Hadoop
|
分布式计算 算法 大数据

相关实验场景

更多