对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

Hadoop学习之路(十八)MapReduce框架Combiner分区相关推荐

  1. 3台云腾讯云开始hadoop学习之路笔记二

    3台云腾讯云开始hadoop学习之路笔记二(接上) 大三党开始学习hadoop之路了,菜鸟学习hadoop,有啥错误请大佬指教.由于自己电脑配置不够,只能买3台腾讯云服务器来学习了.以下笔记都是记录我 ...

  2. 堆栈——Windows核心编程学习手札之十八

    堆栈 --Windows核心编程学习手札之十八 堆栈可以用来分配许多较小的数据块,可以不考虑分配粒度和页面边界之类的问题,但分配和释放内存块的速度比其他机制要慢,并且无法直接控制物理存储器的提交和回收 ...

  3. OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc

    OpenCV学习笔记(十六)--CamShift研究 CamShitf算法,即Continuously Apative Mean-Shift算法,基本思想就是对视频图像的多帧进行MeanShift运算 ...

  4. C/C++学习之路_八: 复合类型

    C/C++学习之路_八: 复合类型 目录 结构体 共用体(联合体) 枚举 typedef 1. 结构体 1. 概述 有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年 ...

  5. OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle()

    OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle() 1. ...

  6. MATLAB学习笔记(十八)

    MATLAB学习笔记(十八) 一.Simulink仿真基础 1.1 Simulink的启动 1.2 系统仿真模型的创建 1.3 仿真参数的设置 1.4 总结 二.子系统的创建与封装 2.1 子系统的创 ...

  7. JavaScript学习(七十八)—实现对数据的浅拷贝和深拷贝

    JavaScript学习(七十八)-实现对数据的浅拷贝和深拷贝 一.浅拷贝 浅拷贝:对于引用类型的数据只拷贝该数据的地址,这种拷贝称为浅拷贝 注意:拷贝出来的数据和原有的数据指向同一个空间,即他们操作 ...

  8. JavaScript学习(六十八)—表单校验案例

    JavaScript学习(六十八)-表单校验案例 学习内容 (一).如何获取页面的元素-利用id获取 格式:var 变量名称 =document.getElementById('要获取的元素的id的值 ...

  9. JavaScript学习(五十八)—作用域链

    JavaScript学习(五十八)-作用域链 一.作用域链 在每个作用域中都有一个对象,这个对象被称为变量对象. 变量对象的作用就是用来管理该作用域下面定义的变量和函数的,也就是在该作用域下面定义的变 ...

最新文章

  1. php 防火墙配置,rhel6+nginx+php+php-fpm 防火墙配置问题
  2. .Net IOC框架入门之三 Autofac
  3. java登录界面命令_Java命令行界面(第15部分):Jargo
  4. python实验练习-类的多继承
  5. java 53个关键字_java的保留(53个)关键字v11.docx
  6. achartengine画出动态折线图
  7. 2019年失业以后,他们都经历了什么?
  8. 微博表情 文本与图片对照表
  9. 编写注册表reg文件及批处理操作注册表
  10. 如何搜索得到综述文献?
  11. Result Maps collection does not contain value for错误提示
  12. 大数据分析笔记 (4) -关联规则(Association Rules)
  13. 时标网络图怎么画?详解两大画法
  14. 学画画软件app推荐_可以学画画的APP有哪些?
  15. CycleGan脱衣服(男人)
  16. 网络姻缘一线牵 大数据精准推广才能让合适的产品遇到合适的人!
  17. 扑克牌java发牌_Java练习——扑克牌发牌器
  18. SETUP FACTORY安装完成后自动运行软件
  19. 模拟购物车购物过程python,用函数模拟简单的购物车(Python)
  20. MySQL错误–超出了“ max_questions”资源(当前值:1000)

热门文章

  1. dateformat 返回类型_SpringBoot返回date日期格式化
  2. struts2+extjs文件上传完整实现(攻克了上传中的各种问题)
  3. Quartz.Net定时任务EF+MVC版的web服务
  4. sshfs的挂载与卸载
  5. C#如何开发多语言支持的Winform程序
  6. 优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)补充知识点:htmlcleaner使用案例...
  7. 通过ProGet搭建一个内部的Nuget服务器
  8. 动态代理3之代理工厂实现
  9. HttpWebRequest post上传文件
  10. EBS FORM开发问题总结