对combiner的理解

combiner其实属于优化方案,由于带宽限制,应该尽量map和reduce之间的数据传输数量。它在Map端把同一个key的键值对合并在一起并计算,计算规则与reduce一致,所以combiner也可以看作特殊的Reducer。

执行combiner操作要求开发者必须在程序中设置了combiner(程序中通过job.setCombinerClass(myCombine.class)自定义combiner操作)。

Combiner组件是用来做局部汇总的,就在mapTask中进行汇总;Reducer组件是用来做全局汇总的,最终的,最后一次汇总。

哪里使用combiner?

1,map输出数据根据分区排序完成后,在写入文件之前会执行一次combine操作(前提是作业中设置了这个操作);

2,如果map输出比较大,溢出文件个数大于3(此值可以通过属性min.num.spills.for.combine配置)时,在merge的过程(多个spill文件合并为一个大文件)中前还会执行combiner操作;

注意事项

不是每种作业都可以做combiner操作的,只有满足以下条件才可以:

1、Combiner 只能对 一个mapTask的中间结果进行汇总

2、如果想使用Reducer直接充当Combiner,那么必须满足: Reducer的输入和输出key-value类型是一致的。

1)处于两个不同节点的mapTask的结果不能combiner到一起

2)处于同一个节点的两个MapTask的结果不能否combiner到一起

3)求最大值、求最小值、求和、去重时可直接使用Reducer充当Combiner,但是求平均值时不能直接使用Reducer充当Combiner。

  原因:对2组值求平均值

  2 3 4 5 6 == 20 / 5 == 4

  4 5 6 == 15 / 3 == 5

  ***********************************************************************

  20+15 / 5+3 = 35 / 8

  4.5

最新文章

  1. SharePoint 部署时报错: 未能提取此解决方案中的cab文件
  2. 金融IC卡 ARQC和ARPC计算方法和实例(转)
  3. The template engine
  4. C++之路起航——标准模板库(vector)
  5. linux 下 `dirname $0`
  6. java程序执行顺序
  7. Fetch的使用
  8. MyEclipse保存文件时 自动格式化代码! 不包括文档注释
  9. Android有效解决加载大图片时内存溢出的问题
  10. sublime text 安装 SFTP
  11. 对比requirejs更好的理解seajs
  12. c运行时函数参考学习地址
  13. 微信for linux
  14. mongodb与java整合
  15. Maven项目pom.xml文件简单解析
  16. 使用sysbench 0.5 对mysql 进行性能、压力测试
  17. (备忘)打开office2010总是在配置进度
  18. postman(五):在不同接口之间传递数据
  19. ElasticSearch入门 第一篇:Windows下安装ElasticSearch
  20. 一个生产可用的mysql参数文件my.cnf

热门文章

  1. ssm项目快速搭建(注解)
  2. 常见IT英语短语一
  3. 武汉邀请赛 Key Logger 双向链表
  4. HTML绝对路径和相对路径
  5. 洛谷P5057 [CQOI2006]简单题(线段树)
  6. Vue.js学习(常用指令)
  7. Apache 2 解析html中的php
  8. 线性表的顺序存储结构之顺序表类的实现_Java
  9. QTableview 获取鼠标坐标的item(QModelIndex)
  10. EF6 code first 新建项目注意问题