MapReduce 的输入输出

MapReduce 框架运转在<key,value> 键值对上,也就是说,框架把作业的输入看成是一组<key,value>键值对,同样也产生一组<key,value>键值对作为作业的输出,这两组键值对可能是不同的。

一个 MapReduce 作业的输入和输出类型如下图所示:可以看出在整个标准的流程中,会有三组<key,value>键值对类型的存在。


MapReduce的处理流程

1.  Mapper任务执行过程详解

  第一阶段是把输入目录下文件按照一定的标准逐个进行逻辑切片,形成切片规划。默认情况下,Split size = Block size。每一个切片由一个MapTask 处理。(getSplits)

  第二阶段是对切片中的数据按照一定的规则解析成<key,value>对。默认规则是把每一行文本内容解析成键值对。key 是每一行的起始位置(单位是字节),value 是本行的文本内容。(TextInputFormat)

  第三阶段是调用 Mapper 类中的 map 方法。上阶段中每解析出来的一个<k,v>,调用一次 map 方法。每次调用 map 方法会输出零个或多个键值对。

  第四阶段是按照一定的规则对第三阶段输出的键值对进行分区。默认是只有一个区。分区的数量就是 Reducer 任务运行的数量。默认只有一个Reducer 任务。

  第五阶段是对每个分区中的键值对进行排序。首先,按照键进行字典序排序,对于键相同的键值对,按照值进行排序。比如三个键值对<2,2>、<1,3>、<2,1>,键和值分别是整数。那么排序后的结果是<1,3>、<2,1>、<2,2>。

  如果有第六阶段,那么进入第六阶段;如果没有,直接输出到文件中。

  第六阶段是对数据进行局部聚合处理,也就是 combiner 处理。键相等的键值对会调用一次 reduce 方法。经过这一阶段,数据量会减少。 本阶段默认是没有的

2.  Reducer 任务 任务 执行过程详解

  第一阶段是 Reducer 任务会主动从 Mapper 任务复制其输出的键值对。Mapper 任务可能会有很多,因此 Reducer 会复制多个 Mapper 的输出。

  第二阶段是把复制到 Reducer 本地数据,全部进行合并,即把分散的数据合并成一个大的数据。再对合并后的数据排序。

  第三阶段是对排序后的键值对调用 reduce 方法。键相等的键值对调用一次reduce 方法,每次调用会产生零个或者多个键值对。最后把这些输出的键值对写入到 HDFS 文件中。

  在整个MapReduce 程序的开发过程中,我们最大的工作量是覆盖map 函数和覆盖reduce 函数。


Mapreduce的combiner

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

  • combiner 是 MR 程序中 Mapper 和 Reducer 之外的一种组件
  • combiner 组件的父类就是 Reducer
  • combiner 和 reducer 的区别在于运行的位置:
    •   Combiner 是在每一个 maptask 所在的节点运行
    •   Reducer 是接收全局所有 Mapper 的输出结果;
  • combiner 的意义就是对每一个 maptask 的输出进行局部汇总,以减小网络传输量
  • 具体实现步骤:      1、自定义一个 combiner 继承 Reducer,重写 reduce 方法
    • 2、在 job 中设置: job.setCombinerClass(CustomCombiner.class)
  • combiner 能够应用的前提是不能影响最终的业务逻辑,而且,combiner 的输出 kv 应该跟 reducer 的输入 kv 类型要对应起来

  如果业务中 涉及中位数等跟数据顺序 个数相关的 不要使用

  combiner本质上就是reduce 只不过是局部的reduce 进行局部汇总

转载于:https://www.cnblogs.com/jifengblog/p/9277367.html

MapReduce输入输出的处理流程及combiner相关推荐

  1. MapReduce简述、工作流程

    MapReduce简述.工作流程 MR编程模型之执行步骤: 1.准备map处理的输入数据 2.mapper处理 3.Shuffle 4.Reduce处理 5.结果输出 (input)<k1,v1 ...

  2. MapReduce on Yarn 的流程和架构图

    Yarn: job app application 都指的是作业 ResourceManager 资源作业管理者 Applications Manager 所有的作业管理 Resource Sched ...

  3. MapReduce概述及工作流程

    内容 mapreduce原语(独创) mapreduce工作流程(重点) MR作业提交流程(重点) YARN RM-HA搭建(熟练) 运行自带的wordcount(了解) 动手写wordcount(熟 ...

  4. map-reduce的八个流程

    下面讲解这八个流程  Inputformat-->map-->(combine)-->partition-->copy&merge-->sort-->red ...

  5. MapReduce的详细工作流程

    MR的详细工作流程 上图给的是MR(任务:将200M的数据按照单子首字母是a-p,q-z分为两个区)的工作流程 1.获取将要处理的文本数据 2.将数据进行切片处理 3.提交所需的基本信息,class文 ...

  6. mapreduce 文件可以切分吗_MapReduce的任务流程

    我们按照图中的流程,梳理一下MapReduce的任务流程. 初始时,是上述的一个文本.MapReduce接收到作业输入后,会先进行数据拆分. 数据拆分完成之后,会有多个 小文本 数据,每个小文本都会作 ...

  7. MapReduce详细工作流程解析

    MapReduce工作流程 一.流程示意图 二.流程详解 1.split阶段 2.map阶段 3.Shuffle阶段 4.Reduce阶段 5.注意 三.各个阶段的工作机制 1.InputFormat ...

  8. hadoop之MapReduce自定义二次排序流程实例详解

    一.概述 MapReduce框架对处理结果的输出会根据key值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的.在我们实际的需求当中,往往有要对reduce输出结果进行二次排序的需求 ...

  9. Mapreduce基本工作流程

    MapReduce分布式计算框架 基本流程: 1,大数据经split划分成大小相等的数据块(数据块的大小一般等于HDFS一个块的大小)以及用户作业程序. 2,系统中有一个负责调度的Master节点和许 ...

最新文章

  1. windows常用命令有哪些(整理)
  2. opencv对图像是软解码_在图像识别上深度学习和opencv有什么不同啊,我只用过opencv,对深度学习不了解...
  3. 精通python网络爬虫-精通Python网络爬虫:核心技术、框架与项目实战
  4. 最全三大框架整合(使用映射)——applicationContext.xml里面的配置
  5. java学习(88):Charactor包装类
  6. github上传的项目代码语言类型修改
  7. MySQL索引的使用知识有哪些?
  8. 【令人头秃的线段树】线段树入门题目详解(代码逐句分析)
  9. 原生社区交友婚恋视频即时通讯双端APP源码ONE兔2.0版
  10. 半全局匹配算法:SGBM
  11. Android Studio 下载教程
  12. froglt教你使用色相环配色(原创理论)
  13. opencv 绿色通道提取
  14. 吃货在东京 -- 记那段吃不饱的日子 之三 筑地的生鱼刺身
  15. Gdevops峰会北京站归来
  16. 自主创新高科技IC企业的数字化转型 ——上海达策助力上海芯钛迈向企业发展新赛道
  17. 翻译官方Vellum教程:Breaking and tearing(破裂撕开)
  18. vue文件下载进度条
  19. openwrt屏蔽广告不生效
  20. 【解决】ScriptableObject.ctor is not allowed to be called from a MonoBehaviour constructor...

热门文章

  1. 修改AspNetSqlMembershipProvider的密码规则
  2. please wait while windows configures microsoft visual studio professional 2013
  3. 何谓程序员?何谓中国的程序员?
  4. 几种常用的图像处理函数库
  5. windows哪些版本可以免费升级win10
  6. 代码解析深度学习系统编程模型:TensorFlow vs. CNTK
  7. Scala进阶之路-面向对象编程之类的成员详解
  8. 阿里代码规范插件 中文使用手册 FOR Eclipse
  9. 关系计划笔谈(9-1):泛BOM与虚拟产品
  10. mysql event 学习