mapreduce--combiner使用和mr流程解析

Posted manchestercitycoder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mapreduce--combiner使用和mr流程解析相关的知识,希望对你有一定的参考价值。

一.准备工作

1.需求

  • 在wordcount程序中使用自定义combiner
  • 解析mapreduce的流程

2.环境配置

(1)hadoop为本地模式

(2)pom文件代码如下

 

技术图片
<dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.3</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
</dependencies>
View Code

 二.使用自定义combiner的wordcount程序

1.combiner介绍

  • combiner程序可以在mapper程序输出结果的时候对每个reduce分区进行汇总,由于在wordcount中combiner做的事情和reducer做的事情是一样的,所以在wordcount中直接使用WordcountReducer类作为combiner
  • combiner使用需要注意业务场景,如果reduce是对每个分区求平均数,那么就不适合中间使用combiner,这是因为局部汇总结果会导致最终结果不一致。

2.使用自定义combiner的wordcount程序

  github链接:https://github.com/gulu2016/STBigData/tree/master/src/main/java/cn/gulu/bigdata/mr/wordcountWithCombiner

三.指定InputFormatCombineTextInputFormat的wordcount程序

1.为什么要使用指定InputFormat为CombineTextInputFormat

 

在没有指定InputFormat情况下,默认128MB一个切片,不足128MB的页作为一个切片,一个切片对应一个MapTask。
这样会产生一个问题,如果有大量的小文件,那么就会有大量的MapTask。
为了解决这个问题,可以指定InputFormat为CombineTextInputFormat,它可以合并多个小文件到一个切片。

 

2.指定InputFormat为CombineTextInputFormat的wordcount程序

  github链接:https://github.com/gulu2016/STBigData/tree/master/src/main/java/cn/gulu/bigdata/mr/wordcountWithCombineTextInputFormat

3.效果对比

在没有使用CombineTextInputFormat的情况下,处理5个小文件会分为5个切片,对应地,有5个MapTask进行处理。

技术图片

 

在使用CombineTextInputFormat之后,同样处理5个小文件,这5个小文件会被划分成同一个切片,这样就会启动一个MapTask。

技术图片

四.mr流程解析

 

以上是关于mapreduce--combiner使用和mr流程解析的主要内容,如果未能解决你的问题,请参考以下文章

大数据之Hadoop(MapReduce):Combiner合并案例实操

5G核心网技术基础自学系列 | MR-DC:签约QoS流E-RAB和MR-DC承载

费用流 ICPC 2016 China Final J. Mr.Panda and TubeMaster

瀑布流效果的一些收获

bzoj4200[Noi2015]小园丁与老司机 STL-map+dp+有上下界最小流

weekend110(Hadoop)的 第三天笔记