MapReduce【Shuffle-Combiner】

简介: MapReduce【Shuffle-Combiner】

概述

        Conbiner在MapReduce的Shuffle阶段起作用,它负责局部数据的聚合,我们可以看到,对于大数据量,如果没有Combiner,将会在磁盘上写入多个文件等待ReduceTask来拉取,但是如果有Combiner组件,我们可以通过Combiner来减小中间结果文件的大小,从而增加传输的效率。


       以wordcount为例,从map出来的kv已经经过了排序是有序的,我们可以进行一次Combiner将相同key的value进行一个合并,从而减少数据量。接着再进行一次归并排序,将多个溢写文件合并到一起。如果溢写的文件特别多,一次归并排序不能全部合并(默认一次归并10个溢写文件),可以再进行一次归并。最终只有一个中间结果文件产生。

  1. Combiner是MapReduce程序中Mapper和Reducer之外的一个组件。
  2. Combiner组件的父类就是Reducer
  3. Combiner和Reducer的区别在于运行的位置
  4. Combiner的意义就是对每一个MapTask的输出进行局部汇总,以减小网络传输量。

5.Combiner能够应用的前提是不能影响最终的业务逻辑,而且,Combiner的输出kv应该跟Reducer的输入kv类型要对应起来。

  • 比如wordcount案例,我们可以对它增加一个Combiner,因为这样不会影响最终结果。
  • 但是对于求平均值这种案例,比如(3+5+7+2+6)/5 != (3+5+7)/3 + (2+6)/2

实现

Combiner只需要继承Reducer类并重写reduce方法即可,我们只需要在wordcount案例基础之上增加一个类WordCountCombiner并在Runner类中修改job的属性即可。

WordCountCombiner类

public class WordCountCombiner extends Reducer<Text, LongWritable,Text,LongWritable> {
    private LongWritable OUT_KEY = new LongWritable();
    @Override
    protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
        int sum = 0;
        for (LongWritable value : values) {
            sum += value.get();
        }
        OUT_KEY.set(sum);
        context.write(key,OUT_KEY);
    }
}

修改job属性

//设置combiner
        job.setCombinerClass(WordCountCombiner.class);


相关文章
|
8月前
|
分布式计算 Hadoop
Hadoop系列 mapreduce 原理分析
Hadoop系列 mapreduce 原理分析
89 1
|
8月前
|
存储 分布式计算 负载均衡
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
253 0
|
3月前
|
分布式计算 资源调度 Hadoop
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
135 3
|
7月前
|
分布式计算 Hadoop Java
Hadoop MapReduce编程
该教程指导编写Hadoop MapReduce程序处理天气数据。任务包括计算每个城市ID的最高、最低气温、气温出现次数和平均气温。在读取数据时需忽略表头,且数据应为整数。教程中提供了环境变量设置、Java编译、jar包创建及MapReduce执行的步骤说明,但假设读者已具备基础操作技能。此外,还提到一个扩展练习,通过分区功能将具有相同尾数的数字分组到不同文件。
74 1
|
7月前
|
数据采集 SQL 分布式计算
|
8月前
|
分布式计算 Hadoop Java
Hadoop MapReduce 调优参数
对于 Hadoop v3.1.3,针对三台4核4G服务器的MapReduce调优参数包括:`mapreduce.reduce.shuffle.parallelcopies`设为10以加速Shuffle,`mapreduce.reduce.shuffle.input.buffer.percent`和`mapreduce.reduce.shuffle.merge.percent`分别设为0.8以减少磁盘IO。
84 1
|
8月前
|
分布式计算 并行计算 搜索推荐
Hadoop MapReduce计算框架
【5月更文挑战第10天】HadoopMapReduce计算框架
66 3
|
7月前
|
存储 分布式计算 Hadoop
Hadoop生态系统详解:HDFS与MapReduce编程
Apache Hadoop是大数据处理的关键,其核心包括HDFS(分布式文件系统)和MapReduce(并行计算框架)。HDFS为大数据存储提供高容错性和高吞吐量,采用主从结构,通过数据复制保证可靠性。MapReduce将任务分解为Map和Reduce阶段,适合大规模数据集的处理。通过代码示例展示了如何使用MapReduce实现Word Count功能。HDFS和MapReduce的结合,加上YARN的资源管理,构成处理和分析大数据的强大力量。了解和掌握这些基础对于有效管理大数据至关重要。【6月更文挑战第12天】
305 0
|
7月前
|
分布式计算 Java Hadoop
简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行
简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行
67 0
|
7月前
|
分布式计算 Hadoop Java
使用Hadoop MapReduce分析邮件日志提取 id、状态 和 目标邮箱
使用Hadoop MapReduce分析邮件日志提取 id、状态 和 目标邮箱
108 0