一、作用

1、combiner最基本是实现本地key的聚合,对map输出的key排序,value进行迭代。如下所示:

map: (K1, V1) → list(K2, V2) 
combine: (K2, list(V2)) → list(K2, V2) 
reduce: (K2, list(V2)) → list(K3, V3)

2、combiner还具有类似本地的reduce功能.

例如hadoop自带的wordcount的例子和找出value的最大值的程序,combiner和reduce完全一致。如下所示:
map: (K1, V1) → list(K2, V2) 
combine: (K2, list(V2)) → list(K3, V3) 
reduce: (K3, list(V3)) → list(K4, V4)

3、如果不用combiner,那么,所有的结果都是reduce完成,效率会相对低下。使用combiner,先完成的map会在本地聚合,提升速度。

4、对于hadoop自带的wordcount的例子,value就是一个叠加的数字,所以map一结束就可以进行reduce的value叠加,而不必要等到所有的map结束再去进行reduce的value叠加。

二、总结

1、combiner使用的合适,可以在满足业务的情况下提升job的速度,如果不合适,则将导致输出的结果不正确。

每一个map都可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,以减少在map和reduce节点之间的数据传输量,以提高网络IO性能,是MapReduce的一种优化手段之一

        1)、Combiner最基本是实现本地key的聚合,对map输出的key排序、value进行迭代。如下所示:

引用

        map:(key1,value1) ——> list(key2,value2)
        conbine:(key2,list(value2)) ——> list(key2,value2)
        reduce:(key2,list(value2)) ——> list(key3,value3)
       

2)、Combiner还有本地reduce功能(其本质上就是一个reduce):

引用

        map:(key1,value1) ——> list(key2,value2)
        conbine:(key2,list(value2)) ——> list(key3,value3)
        reduce:(key3,list(value3)) ——> list(key4,value4)
       

3)、如果不用Combiner,南无说有的结果都会在reduce端完成,效率比较低小,并且会占用很多的网络IO;使用Combiner先完成在map端的本地聚合,可以减少网络传输数据量,提高性能。

但是,不要以为在写MapReduce程序时设置了Combiner就认为Combiner一定会起作用,实际情况是这样的吗?答案是否定的。hadoop文档中也有说明Combiner可能被执行也可能不被执行。那么在什么情况下不执行呢?如果当前集群在很繁忙的情况下job就是设置了也不会执行Combiner。

另外还要注意,Combiner使用的合适的话会提高Job作业的执行数度,但是使用不合适的话,会导致输出的结果不正确。Combiner的输出是Reduce的输入,它绝不会改变最终的计算结果。
        Conbiner的适用场景比如说在汇总统计时,就可以使用Conbiner,但是在求平均数的时候就是适合适用了。

最后,我们再来看一下Combiner的执行时机。我们之前已对map端的shuffle做过比较升入的了解,详情请看MapTask详解。那么,Combiner会在map端的那个时期执行呢?实际上,Conbiner函数的执行时机可能会在map的merge操作完成之前,也可能在merge之后执行,这个时机由配置参数min.num.spill.for.combine(该值默认为3),也就是说在map端产生的spill文件最少有min.num.spill.for.combine的时候,Conbiner函数会在merge操作合并最终的本机结果文件之前执行,否则在merge之后执行。通过这种方式,就可以在spill文件很多并且需要做conbine的时候,减少写入本地磁盘的数据量,同样也减少了对磁盘的读写频率,可以起到优化作业的目的。

参考:http://blog.csdn.net/ipolaris/article/details/8723782

http://blog.csdn.net/cnbird2008/article/details/23788233

http://hadoop.apache.org/docs/r1.2.1/streaming.html#Hadoop+Streaming

转载于:https://www.cnblogs.com/myyan/p/4838113.html

hadoop——Map/Reduce中combiner的使用相关推荐

  1. Hadoop Map/Reduce教程

    Hadoop Map/Reduce教程 目的     先决条件     概述     输入与输出     例子:WordCount v1.0         源代码         用法        ...

  2. 一步一步跟我学习hadoop(5)----hadoop Map/Reduce教程(2)

    Map/Reduce用户界面 本节为用户採用框架要面对的各个环节提供了具体的描写叙述,旨在与帮助用户对实现.配置和调优进行具体的设置.然而,开发时候还是要相应着API进行相关操作. 首先我们须要了解M ...

  3. eclipse的plugins导入hadoop-eclipse-plugin-2.6.0.jar后Preference下没有hadoop Map/Reduce的解决方法

    参考文章:eclipse下的plugins导入hadoop-eclipse-plugin-2.7.1.jar,Preference下没有hadoop Map/Reduce的解决方法 这种现象一般是由于 ...

  4. Hadoop Map/Reduce的工作流

    问题描述 我们的数据分析平台是单一的Map/Reduce过程,由于半年来不断地增加需求,导致了问题已经不是那么地简单,特别是在Reduce阶段,一些大对象会常驻内存.因此越来越顶不住压力了,当前内存问 ...

  5. (转载)Hadoop map reduce 过程获取环境变量

    来源:http://www.linuxidc.com/Linux/2012-07/66337.htm   作者: lmc_wy Hadoop任务执行过程中,在每一个map节点或者reduce节点能获取 ...

  6. [转]自定义hadoop map/reduce输入文件切割InputFormat

    本文转载自:http://hi.baidu.com/lzpsky/blog/item/99d58738b08a68e7b311c70d.html hadoop会对原始输入文件进行文件切割,然后把每个s ...

  7. hadoop map reduce自定义数据类型时注意顺序,否则报错。

    2019独角兽企业重金招聘Python工程师标准>>> 自定义数据类型,实现Writable接口,重写write方法和readFields方法时,在操作字段时,必须保证顺序,如果在w ...

  8. [ZZ]Map/Reduce hadoop 细节

    转自:Venus神庙原文:http://www.cnblogs.com/duguguiyu/archive/2009/02/28/1400278.html 分布式计算(Map/Reduce) 分布式计 ...

  9. Hadoop学习:Map/Reduce初探与小Demo实现

    一.    概念知识介绍 Hadoop MapReduce是一个用于处理海量数据的分布式计算框架.这个框架攻克了诸如数据分布式存储.作业调度.容错.机器间通信等复杂问题,能够使没有并行 处理或者分布式 ...

  10. Hadoop完全分布式搭建过程、maven和eclipse配置hadoop开发环境、配置Map/Reduce Locations、简单wordcount测试!

    Hadoop完全分布式搭建及测试 项目开始前准备工作 1.下载并安装VM workstation pro 15安装包,这里选择: VMware-workstation-full-15.1.0-1359 ...

最新文章

  1. php万能注入密码,php下的SQL注入万能用户名和密码
  2. git作死之天坑记录
  3. php系统毕设答辩问题,计算机专业毕业论文答辩的一般程序及常见问题
  4. 当按下ESC键时,关闭应用程序
  5. restful 风格 web api规范
  6. Spring Boot 入门程序
  7. 在Extjs中对日期的处理,以及在后端数据在SQL语句的判断处理
  8. Blender场景建模练习:破旧的公寓楼
  9. cleanmymac x激活码免费下载激活及使用教程
  10. go panic 与 recover
  11. android 自定义锁屏
  12. 新锐房地产销售管理系统 (部分流程)技术解析(一)用三层架构搭建项目
  13. python-regex-thread-localhost
  14. python打印自动换行如何解决,python不换行打印的方法
  15. 电脑装双系统有什么好处和坏处?
  16. Android触摸事件进行画图简单实现
  17. JSON入门(Understanding JSON)
  18. java工程师的薪资真的有那么高吗?
  19. AX3600开启SSH功能
  20. map映射-----基础实验8-1.2 直捣黄龙 (30分)

热门文章

  1. 【ICLR 2018】模型集成的TRPO算法【附代码】
  2. 解决 IDEA 无法找到 java.util.Date 的问题
  3. 在eclipse下使用java调用weka
  4. 工具类篇——时间处理Calendar类
  5. mybatis-plus 从2.x到3.x升级指南
  6. hdmi中深度色彩像素打包
  7. NetCore控制台实现自定义CommandLine功能
  8. 分享一个高清壁纸网站
  9. CString int转换
  10. ES6+webpack实现Counter