码迷,mamicode.com
首页 > 其他好文 > 详细

mapreduce(2)--combiner使用和mr流程解析

时间:2019-05-03 16:45:06      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:大量   NPU   结果   inpu   font   ast   reduce   不一致   color   

一.准备工作

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(2)--combiner使用和mr流程解析

标签:大量   NPU   结果   inpu   font   ast   reduce   不一致   color   

原文地址:https://www.cnblogs.com/ManchesterCityCoder/p/10804595.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!