首先,map的输入数据默认一个一个的键值对,键就是每一行首字母的偏移量,值就是每一行的值了。

  然后每一个输入的键值对都会用我们定义的map函数去处理,这里用wordcount来举例的话就是,每一个键值对的值都按对应的分隔符分隔成每一个单词作为输出的键,值都为1。

  接着,进入mapshuffle阶段,map函数处理后的数据会被放到一个环形缓冲区中,当放置的环形缓冲区的容量(默认100MB,可自定义)达到阈值(默认80%,可自定义)时就会进入溢写,

在真正溢写到本地磁盘前,会对要溢写的数据进行分区(Partitioner),这里分区的规则就是按数据输出到对应的不同的reduce进行划分的,然后对每个分区内的数据进行排序(Sort),

接下来是可优化的可选项就是分组(combiner),即先对相同的键的值进行合并,从而减少到时reduce来拉去的网络消耗和内存消耗.完成上述溢写的准备阶段后才会真正的写到磁盘。

  而每次的溢写都会生成一个小文件,当溢写的小文件个数达到一定阈值时会再进行排序后合并成大文件。直到将所有的map输出数据处理完成,map端的shuffle过程结束。

  接下来进入reduce端的shuffle过程,当map处理完成后,会通知ApplicationMaster(后文简称AM),AM就会启动reduce Task,reduce就会到对应的map中拉取对应的map输出结果文件,放到内存中,也跟map过程一样,进行溢写,唯一不同的是其会进行分组,也就是对相同的key进行分组,把相同key下的值进行合并后输出(这里,如果map端有进行combiner优化的话,

reduce分组的压力是不是就少很多了)。所有数据处理完后,reduce端的shuffle也就结束了。

  reduce端的shuffle过程的结果用咱们自定义的reduce函数进行处理,用wordcount程序为例的话,其实就是对key下的list值进行累加。

  最终作为mapreduce的输出结果。整个MapReduce过程结束。

下图以wordcount为例进行图解说明:

MapReduce过程(包括Shuffle)详解的更多相关文章

  1. Hadoop学习之路(二十三)MapReduce中的shuffle详解

    概述 1.MapReduce 中,mapper 阶段处理的数据如何传递给 reducer 阶段,是 MapReduce 框架中 最关键的一个流程,这个流程就叫 Shuffle 2.Shuffle: 数 ...

  2. MapReduce工作原理图文详解 (炼数成金)

    MapReduce工作原理图文详解 1.Map-Reduce 工作机制剖析图: 1.首先,第一步,我们先编写好我们的map-reduce程序,然后在一个client 节点里面进行提交.(一般来说可以在 ...

  3. 全网最详细的PLSQL Developer + Oracle client的客户端 或者 PLSQL Developer + Oracle server服务端的下载与安装过程(图文详解)

    不多说,直接上干货! 环境说明: 本地没有安装Oracle服务端,oracle服务端64位,是远程连接,因此本地配置PLSQL Developer64位. Oracle database使用在本机部署 ...

  4. VBA的过程及参数详解

    VBA的过程及参数详解 VBA中的过程(Procedure)有两种,一种叫函数(Function),另外一种叫子程序(Subroutine),分别使用Function和Sub关键字.它们都是一个可以获 ...

  5. Hadoop Mapreduce中shuffle 详解

    MapReduce 里面的shuffle:描述者数据从map task 输出到reduce task 输入的这段过程 Shuffle 过程: 首先,map 输出的<key,value >  ...

  6. Spark中的Spark Shuffle详解

    Shuffle简介 Shuffle描述着数据从map task输出到reduce task输入的这段过程.shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过s ...

  7. Spark技术内幕: Shuffle详解(一)

    通过上面一系列文章,我们知道在集群启动时,在Standalone模式下,Worker会向Master注册,使得Master可以感知进而管理整个集群:Master通过借助ZK,可以简单的实现HA:而应用 ...

  8. Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析

    转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PAREN ...

  9. Job流程:Shuffle详解

    此文承接Job流程:Mapper类分析.MapReduce为确保每个reducer的输入都按键排序,数据从map输出到reducer输入的这段过程成为Shuffle. map端 1).Spill溢写. ...

随机推荐

  1. Flume-ng源码解析之Channel组件

    如果还没看过Flume-ng源码解析之启动流程,可以点击Flume-ng源码解析之启动流程 查看 1 接口介绍 组件的分析顺序是按照上一篇中启动顺序来分析的,首先是Channel,然后是Sink,最后 ...

  2. KoaHub.JS用于Node.js的cron作业调度程序代码

    node-schedule A cron-like and not-cron-like job scheduler for Node. Node Schedule     Announcement:  ...

  3. SolrCloud的介绍

    SolrCloud(solr云)是Solr提供的分布式搜索方案. 当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud. 当索引量很大,搜索请求并发很高时,同样需要使用SolrClou ...

  4. windows phone 8.1开发:锁屏提醒

    原文出自:http://www.bcmeng.com/lockscreen/ 之前小梦和大家分享了toast通知,磁铁更新,今天小梦和大家分享windows phone 8.1开发中的锁屏提醒.相比t ...

  5. ArrayList去除重复元素(包括字符串和自定义对象)

    1.去除重复字符串 package com.online.msym; import java.util.ArrayList; import java.util.Iterator; @SuppressW ...

  6. iOS开发之数据存储之Preference(偏好设置)

    1.概述 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能. 每个应用都有个NSUserDefaults实例,通过它来存取偏好 ...

  7. yii2发送邮件(配置QQ版本)

    1:首先在配置文件main-local.php components=>[]里面配置 'mailer' => [              'class' => 'yii\swift ...

  8. NIO(四、Selector)

    目录 NIO(一.概述) NIO(二.Buffer) NIO(三.Channel) NIO(四.Selector) Selector 前面两个章节都描述了Buffer和Channel,那这个章节就描述 ...

  9. vue-miniQQ——基于Vue2实现的仿手机QQ单页面应用(接入了聊天机器人,能够进行正常对话)

    使用Vue2进行的仿手机QQ的webapp的制作,作品由个人独立开发,源码中进行了详细的注释. 由于自己也是初学Vue2,所以注释写的不够精简,请见谅. 项目地址 https://github.com ...

  10. So Easy-Ntp嵌入式软件移植

    一.导语和准备工作 Ntp是一种对时的软件,对客户端来说我们只要输入ntpdate IP,如ntpdate 192.168.1.254(192.168.1.254是ntp服务器,window电脑激活自 ...