MR数据流向示意图

步骤 1

输入文件从HDFS流向Mapper节点。在一般情况下,map所需要的数据就存在本节点,这就是数据本地化计算的优势,但是往往集群中数据分布不均衡(1000台节点,数据冗余度是10,每个文件并不能均匀分布在每个节点上),而MR的计算槽位是均匀分布在节点上的(配置文件中指定的map和reduce数量),所以势必有些计算节点需要通过数据传输从别的节点获取计算数据。

步骤 2

Mapper输出到内存缓冲区。Mapper的计算结果并不是立即写入本地的文件系统,而是首先写入内存缓冲区,并且Partitioner也发生在这个阶段,就是map的计算结果写入到内存缓冲区的时候会进行Partitioner操作对输出键值对进行分区。

步骤 3

从内存缓冲区到本地磁盘。当内存缓冲区达到一定的阈值的时候就会将数据以临时文件的形式写入本地磁盘,这个过程称为spill,spill的是还会按照key的序列化字节做排序。当整个map任务结束的时候,会对这些临时文件以Partitioner为单位进行合并操作,对于同一个分区将进行多次合并,排序后生成一个大的Region文件。内存缓冲区的默认大小是100M,溢写比例默认是0.8(可以通过spill.percent参数来调节)。

如果用户作业设置了Combiner,那么spill之前会对map的输出键值对调用Combiner类做规约操作,这样可以降少写入到磁盘的数据量,从而进一步减少Shuffle阶段从Mapper到Reducer端的数据传输量。

步骤 4

从Mapper端的本地文件系统流入Reducer端。这也就是Reduce中的Shuffle阶段。这有分三种情况:第一种,对于多个Reduce的情况,需要将Mapper的Region文件远程复制到对应的Reduce节点(4-1)。第二种,Mapper所在的节点就有Reduce槽位(有reduce槽位就在本地执行reduce操作,因为本地化计算更快,并且reduce也是并行计算,在任何节点计算,结果都一样),则Mapper的输出Region文件会先写入本机Reduce的内存缓冲区(4-2)。第三种,本机的Reduce还会接收来自其他Mapper输出的分区Region文件(一个节点上可以有多个map,使用本机的一个reduce处理本机上多个map的输出)(4-3)。

步骤 5

从Reduce端的内存缓冲区流向Reduce端的本地磁盘。Reduce端的内存缓冲区也有阈值,当Region超过阈值时就会写入到Reduce端的本地文件系统。这个过程即使Reduce中的Merge和Sort阶段。Merge分为两种情况:内存文件合并(5-1)和磁盘文件合并(5-2),同时还会以key键进行排序,最终生成已经对相同key的value进行聚集并排过序的输出文件

步骤 6

Merge和Sort之后数据直接流向Reduce函数进行归约处理。

步骤 7

reduce完成之后根据用户指定的输出文件格式写入HDFS中,生成相应的part-*形式的文件。

参考

hadoop核心技术 p173-p174.

MapReduce数据流向分析的更多相关文章

  1. qemu网络虚拟化之数据流向分析三

    2016-09-27 前篇文章通过分析源代码,大致描述了各个数据结构之间的关系是如何建立的,那么今天就从数据包的角度,分析下数据包是如何在这些数据结构中间流转的! 这部分内容需要结合前面两篇文章来看, ...

  2. qemu网络虚拟化之数据流向分析二

    2016-09-27 上篇文章大致介绍了qemu网络虚拟化相关的数据结构,本篇就结合qemu-kvm源代码分析下各个数据结构是如何初始化以及建立联系的. 这里还是分为三个部分: 1.Tap设备区 2. ...

  3. qemu网络虚拟化之数据流向分析一

    插曲:   今天下午欣喜的想写点关于qemu网络部分的功能,但是中途出现了点小插曲,电脑被某人搞得死机了,并且文章也没有保存.结果,,,就只能重新写了!!所以这里强烈建议开发团队提供自动保存的功能! ...

  4. mapReduce 大数据离线分析

    数据分析一般分为两种,一种是在线一种是离线 流程: 一般都是对于日志文件的采集和分析 场景实例(某个电商网站产生的用户访问日志(access.log)进行离线处理与分析的过程) 1.需求: 基于Map ...

  5. 第二篇:智能电网(Smart Grid)中的数据工程与大数据案例分析

    前言 上篇文章中讲到,在智能电网的控制与管理侧中,数据的分析和挖掘.可视化等工作属于核心环节.除此之外,二次侧中需要对数据进行采集,数据共享平台的搭建显然也涉及到数据的管理.那么在智能电网领域中,数据 ...

  6. MapReduce总体架构分析

    转自:http://blog.csdn.net/Androidlushangderen/article/details/41051027 继前段时间分析Redis源码一段时间之后,我即将开始接下来的一 ...

  7. Vue--- VueX基础 (Vuex结构图数据流向)1.1

    Vuex基础 https://vuex.vuejs.org/zh-cn state --> view --> action -> state 多组件共享状态, 之前操作方式,由父组件 ...

  8. MapReduce源码分析之JobSubmitter(一)

    JobSubmitter,顾名思义,它是MapReduce中作业提交者,而实际上JobSubmitter除了构造方法外,对外提供的唯一一个非private成员变量或方法就是submitJobInter ...

  9. 在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析

    在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析 低成本的Blob存储是一个强大的.通用的Hadoop兼容Azure存储解决方式无缝集成HDInsight.通过Hadoop分布式 ...

随机推荐

  1. WPF:定制Checkbox样式,让“正确”绿得好看,让“错误”红的显眼

    WPF提供了样式.模板.触发器.状态管理.矢量形状等方式,让我们不需要背景图片,也可以轻松定制控件的风格样式.下面是笔者针对Checkbox进行的样式定制,让“正确”绿得好看,让“错误”红的显眼.  ...

  2. C/C++ 关于大小端模式

    大端模式:  数据的高字节存在低地址  数据的低字节存在高地址 小端模式:  数据的高字节存在高地址  数据的低字节存在低地址 如图,i为int类型占4个字节,但只有1个字节的值为1,另外3个字节值为 ...

  3. ThinkPHP3.2.2中开启REWRITE模式

    1. 在项目配置文件(\Application\Common\Conf\config.php)中配置URL模式 <?php return array( //URL模式 , ); 2. 在Thin ...

  4. Linux环境下的编译,链接与库的使用

    参考博客: http://www.cnblogs.com/qytan36/archive/2010/05/25/1743955.html http://m.blog.csdn.net/article/ ...

  5. Ubuntu下编译内核

    一.下载源代码和编译软件的准备 下载内核源代码:http://www.kernel.org/ 注意,点击2.6.25内核的F版,即完整版. 如果你懒得去网站点联接,运行下列命令:  代码: $cd ~ ...

  6. Stream,Reader/Writer,Buffered的区别(2)

    Reader: Reader的子类: 1.BufferedReader: FileReader 没有提供读取文本行的功能,BufferedReader能够指定缓冲区大小,包装了read方法高效读取字符 ...

  7. IBM MQ扩大队列最大消息长度

    要设置MQ的最大消息长度,需要考虑同时设置队列管理,队列以及通道的最大消息长度. 具体操作如下: runmqsc 队列管理器名称 alter qmgr maxmsgl(10000000) 1 : al ...

  8. Oracle用户密码过期问题解决

    一.用户密码即将过期,导致autotrace无法打开           如果用户密码即将过期,在登录数据库时会收到如下提示:           ERROR:            ORA-2800 ...

  9. meteor icons & splash配置

    ionic resources http://ionicframework.com/docs/cli/icon-splashscreen.html 用一条指令生成ionic生需Icons & ...

  10. [转]rpcndr.h和wtypes.h冲突Bug的解决方案

    [转]rpcndr.h和wtypes.h冲突Bug的解决方案 http://blog.csdn.net/tzwh_86/article/details/9495133 rpcndr.h和wtypes. ...