当前位置: 首页 > news >正文

MapReduce【Shuffle-Combiner】

 概述

5551bf9e66bd4d1fa7b8c5437b7af2fa.png

         Conbiner在MapReduce的Shuffle阶段起作用,它负责局部数据的聚合,我们可以看到,对于大数据量,如果没有Combiner,将会在磁盘上写入多个文件等待ReduceTask来拉取,但是如果有Combiner组件,我们可以通过Combiner来减小中间结果文件的大小,从而增加传输的效率。

        以wordcount为例,从map出来的kv已经经过了排序是有序的,我们可以进行一次Combiner将相同key的value进行一个合并,从而减少数据量。接着再进行一次归并排序,将多个溢写文件合并到一起。如果溢写的文件特别多,一次归并排序不能全部合并(默认一次归并10个溢写文件),可以再进行一次归并。最终只有一个中间结果文件产生。

  1. Combiner是MapReduce程序中Mapper和Reducer之外的一个组件。
  2. Combiner组件的父类就是Reducer
  3. Combiner和Reducer的区别在于运行的位置
  4. Combiner的意义就是对每一个MapTask的输出进行局部汇总,以减小网络传输量。
  5. Combiner能够应用的前提是不能影响最终的业务逻辑,而且,Combiner的输出kv应该跟Reducer的输入kv类型要对应起来。
    1. 比如wordcount案例,我们可以对它增加一个Combiner,因为这样不会影响最终结果。
    2. 但是对于求平均值这种案例,比如(3+5+7+2+6)/5 != (3+5+7)/3 + (2+6)/2

实现

Combiner只需要继承Reducer类并重写reduce方法即可,我们只需要在wordcount案例基础之上增加一个类WordCountCombiner并在Runner类中修改job的属性即可。

WordCountCombiner类

public class WordCountCombiner extends Reducer<Text, LongWritable,Text,LongWritable> {private LongWritable OUT_KEY = new LongWritable();@Overrideprotected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;for (LongWritable value : values) {sum += value.get();}OUT_KEY.set(sum);context.write(key,OUT_KEY);}}

修改job属性

//设置combinerjob.setCombinerClass(WordCountCombiner.class);

 

 

http://www.lryc.cn/news/70064.html

相关文章:

  • postman接口自动化测试
  • 历经70+场面试,我发现了大厂面试的套路都是···
  • 可视区域兼容性问题的思考及方法封装
  • 安全工具 | CMSeeK [指纹识别]
  • Android新logcat使用技巧
  • 使用Makefile笔记总结
  • npm下载依赖项目跑不起来--解决方案
  • SolVES模型生态系统服务功能社会价值评估
  • Godot引擎 4.0 文档 - 入门介绍 - 学习新功能
  • 如何进行MySQL漏洞扫描
  • C语言函数大全-- x 开头的函数(3)
  • 计算机图形学-GAMES101-12阴影
  • iOS_Swift高阶函数
  • 探索Vue的组件世界-组件复用
  • OMA通道-2
  • SAP 用CO13冲销工序报工,但是没有产生货物移动(TCODE:CO1P 、 SE38 :CORUPROC,CORUAFWP)
  • 信息收集-服务器信息
  • 连续签到积分兑换试用流量主小程序开发
  • C语言—自定义类型(结构体、枚举、联合)
  • Node.js博客项目开发思路笔记
  • python 之 shutil 文件的复制、删除、移动文件以及目录,并支持文件的归档、压缩和解压
  • jface
  • 六级备考28天|CET-6|听力第一讲|基本做题步骤与方法|13:30~14:30
  • 系统设计 - 设计一个速率限制器
  • [技术分享]Android平台实时音视频录像模块设计之道
  • JDKMissionControl官方用户指南--人工翻译
  • MySql-高级(分库分表问题简析) 学习笔记
  • 【5.20】五、安全测试——安全测试工具
  • 【13900k】i9 核显升级驱动
  • 使用Python将绿色转换为红色、红色转换为蓝色的图像处理