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. 对ASP.NET Entity FrameWork进行单元测试

    添加一个测试用的类库:将Web.config中的connectionstrings节点下的东东复制一份到刚添加的类库的app.config下 使用NUint+TestDriven.net进行测试: 如 ...

  2. python解析页面上json字段

    一般来说,当我们从一个网页上拿下来数据,就是一个字符串,比如: url_data = urllib2.urlopen(url).readline() 当我们这样得到页面数据,url_data是全部页面 ...

  3. java-servlet-jsp

    =========================servletjavax.servlet    javax.servlet.http    javax.annotation    javax.ser ...

  4. Java入门到精通——基础篇之面向对象

    一.概述. Java属于面向对象的一种语言,因为Java是面向对象的语言所以这个语言的诞生需要有五个基本特性: 1)万物皆为对象. 2)程序是对象的集合. 3)每个对象都有自己的由其他对象所构成的存储 ...

  5. Linux内核学习笔记——VFS

    概念: ①硬链接:若一个 inode 号对应多个文件名,则称这些文件为硬链接.即硬链接就是同一个文件使用了多个别名.硬链接可由命令 link 或 ln 创建. 其特性: 文件有相同的 inode 及 ...

  6. Mybatis 实现手机管理系统的持久化数据访问层

    最近公司需要对客户手机进行管理并提供二维码存储手机串号的加密字符.供其他接入系统通过扫面二维码解析使用.系统提供手机信息管理,客户管理,用户管理功能. 1.使用到的POJO类 1.1 User pac ...

  7. spring 基本操作总结主要是aop以及依赖注入的基本配置

    一所需架包 spring commom-logging.jar  spring.jar 注解 common-annotation.jar aop面向切面 aspectjrt.jar    aspect ...

  8. [转]WinExec、ShellExecute和CreateProcess及返回值判断方式

    [转]WinExec.ShellExecute和CreateProcess及返回值判断方式 http://www.cnblogs.com/ziwuge/archive/2012/03/12/23924 ...

  9. POC - ASP.NET & IIS 部分

    终于得到了我VM的管理员权限啦啦.接下来不需要把IIS架在我自己的电脑上了,将架在我的VM上. 1. 先添加ISAP和CGI的组件. 2. 将defaultAppPool的MODE设为CLASSIC, ...

  10. Valuable site on github

    https://thegrid.io/?utm_source=adwords&utm_medium=cpc&utm_campaign=thegrid-display-english&a ...