MapReduce原理

原创 2015年11月20日 10:50:28

1、MapReduce简介

MapReduce是现今一个非常流行的分布式计算框架,它被设计成用于并行计算海量数据,第一个提出该技术框架的是Google公司,MapReduce框架的核心步骤主要分两部分:Map和Reduce,当你向MapReduce提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每一个Map任务处理输入数据中的一部分,当Map任务完成后,会生产一些中间文件,这些中间文件将会作为Reduce任务的输入数据,Reduce的任务主要目标就是把前面若干个Map的输出汇总到一起并输出,从高层抽象来看,MapReduce的数据流图如下图所示:


2、MapReduce流程分析


2.1 Map过程

  1. 每一个输入分片会让一个Map任务来处理,默认情况下,以HDFS的一个块的大小(默认为64MB)为一个分片,当然我们也可以设置块的大小。Map输出的结果会暂且放在一个环形内存缓冲区中(该缓冲区的大小默认为100M,由io.sort.mb属性控制),当该缓冲区快要溢出时(默认缓冲区大小的80%,由Io.sort.spill.percent属性控制),会在本地文件系统中创建一个溢出文件,将该缓冲区的数据写入到这个文件中;
  2. 在写入磁盘之前,线程首先会根据reduce任务的数目划分相同数目的分区,也就是一个reduce任务对应一个分区的数据。这样做就是为了避免有些reduce任务分配到大量数据,而有些reduce分配到很小的数据,甚至没有数据。其实分区就是对数据进行hash的过程,然后对每个分区中的数据进行排序,如果此时设置了combiner,将排序后的结果进行Combia操作,这样做的目的是让尽可能少的数据写入到磁盘;
  3. 当Map任务输出到最后一个记录是,可能会有很多的溢出文件,这时需要将这些文件合并,合并的过程中会不断进行排序和combia操作,目的有两个:
  4. 将分区中的数据拷贝给相对应的reduce任务,有人可能会问:分区中的数据怎么知道它对应的reduce呢?其实Map任务一直和其父TaskTracker保持联系,而TaskTracker又一直和JobTracker保持心跳,所以JobTracker中保存了整个集群中的宏观信息,只要reduce任务向JobTracker获取对应的Map输出位置就可以了。
    • 尽量减少每次写入磁盘的数据量;
    • 尽量减少下一复制阶段网络传输的数据量,最后合并成了一个已分区已排序的文件,为了减少网络传输的数据量,这里可以将数据压缩,只要将Mapred.compress.map.out设置为true就可以。
2.2 Reduce过程
  1. Reduce会接收到不同map任务传来的数据,并且每个map传来的数据都是有序的。如果reduce端接收的数据量相当小,则直接存储在内存中(缓冲区大小由mapred.shuffle.input.buffer.percent属性控制,表示用作此用途的堆空间的百分比),如果数据量超过了该缓冲区大小的一定比例(由mapred.job.shuffle.merge.percent决定),则对数据合并后溢写到磁盘中;
  2. 随着溢写文件的增多,后台线程会将他们合并成一个更大的有序文件,这样做是为了给后面的合并节省时间,其实不管在map端还是reduce端,MapReduce都是反复地执行排序,合并操作;
  3. 合并的过程中会产生许多的中间文件(写入磁盘了),但MapReduce会让写入磁盘的数据尽可能地少,并且最后一次合并的结果并没有写入磁盘,而是直接输入到reduce函数。
  1. Reduce会接收到不同map任务传来的数据,并且每个map传来的数据都是有序的。如果reduce端接受的数据量相当小,则直接存储在内存中(缓冲区大小由mapred.job.shuffle.input.buffer.percent属性控制,表示用作此用途的堆空间的百分比),如果数据量超过了该缓冲区大小的一定比例(由mapred.job.shuffle.merge.percent决定),则对数据合并后溢写到磁盘中;
2.3 MapReduce工作机制剖析

  1. 在集群中的任意一个节点提交MapReduce程序;
  2. JobClient收到作业后,JobClient向JobTracker请求获取一个Job ID;
  3. 将运行作业所需的资源文件复制到HDFS上(包括MapReduce程序打包的JAR文件,配置文件和客户端计算所得的输入划分信息),这些文件都从放在JobTracker专门为该作业创建的文件夹中,文件夹名为该作业的Job ID;
  4. 或得作业ID后,提交作业;
  5. JobTracker接收到作业后,将其放在一个作业队列中,等待作业调度器进行调度,当作业调度器根据自己的调度算法调度到该作业时,会根据输入划分信息为一个划分创建一个map任务,并将map任务分配给TaskTracker执行;
  6. 对于Map和Reduce任务,TaskTracker根据主机的数量和内存大小有固定数量的map槽和reduce槽,这里需要强调的是:map任务不是随随便便地分配给某个TaskTracker的,这里有个概念叫:数据本地化(Data-Local)。意思是:将map任务分配给含有该map处理的数据块的TaskTacker上,同时将程序JAR包复制到该TaskTacker上来运行,这叫“运算移动,数据不移动”;
  7. TaskTracker每隔一段时间会给JobTacker发送一个心跳,告诉JobTracker她依然在运行,同时心跳中还携带者很多的信息,比如当前map任务的进度等信息。当JobTacker收到作业的最后一个任务完成信息时,便把该作业设置成“成功”。当JobClient查询状态时,他将得知任务以完成,便显示一条消息给用户;
  8. 运行的TaskTracker从HDFS中获取运行所需的资源,这些资源包括MapReduce程序打包的JAR文件、配置文件和客户端计算所得的输入划分等信息;
  9. TaskTracker获取资源后启动新的JVM虚拟机;
  10. 运行每一个任务;

版权声明:本文为博主原创文章,未经博主允许不得转载。

Hadoop MapReduce原理及实例

MapReduce是用于数据处理的一种编程模型,简单但足够强大,专门为并行处理大数据而设计。1. 通俗理解MapReduceMapReduce的处理过程分为两个步骤:map和reduce。每个阶段的输...
  • bingduanlbd
  • bingduanlbd
  • 2016年07月16日 22:14
  • 9758

Hadoop2.6(新版本)----MapReduce工作原理

最近在研究Hadoop,发现网上的一些关于Hadoop的资料都是以前的1.X版本的,包括MapReduce的工作原理,都是以前的一些过时了的东西,所以自己重新整理了一些新2.X版本的MapReduce...
  • tanggao1314
  • tanggao1314
  • 2016年04月28日 17:01
  • 20914

MapReduce基本原理与WordCount程序

MapReduce原理   通过简单的Mapper和Reducer的抽象提供一个编程模型,可以在一个由几十台上百台PC组成的不可靠集群上并发地,分布式处理大量的数据集,而把并发、分布式(机器间通信)...
  • lfw2016
  • lfw2016
  • 2016年05月07日 15:24
  • 1001

mapreduce原理全剖析map+shuffle+reducer 全部过程

1.mapreduce原理全剖析map+shuffle+reducer  全部过程        wordcount为例      1.mapper开始运行,调用InputFormat组...
  • a920259310
  • a920259310
  • 2016年04月15日 00:08
  • 2369

Hadoop学习笔记(7)-简述MapReduce计算框架原理

1. MapReduce基本编程模型和框架1.1 MapReduce抽象模型大数据计算的核心思想是:分而治之。如下图1所示。把大量的数据划分开来,分配给各个子任务来完成。再将结果合并到一起输出。 注...
  • xummgg
  • xummgg
  • 2016年05月30日 21:08
  • 2383

走向云计算之MapReduce原理和运行流程详解

一、概述MapReduce的设计理念源自于Google的MapReduce论文(发表于2004年12月),Hadoop MapReduce是Google MapReduce克隆版。MapReduce采...
  • xiaokang123456kao
  • xiaokang123456kao
  • 2017年06月13日 22:07
  • 590

MapReduce的基本原理

MapReduce是一个软件框架,可方便的编写应用程序,以并行的方式在数千商用硬件组成的集群节点中处理数TB的数据,并且提供了可靠性和容错的能力。 MapReduce处理模型包括两个独立的步骤: ...
  • u013063153
  • u013063153
  • 2016年11月10日 15:50
  • 641

MAPREDUCE原理

mapreduce的shuffle机制 3.1.1 概述:  mapreduce中,map阶段处理的数据如何传递给reduce阶段,是mapreduce框架中最关键的一个流程,这个流程就叫s...
  • u014033218
  • u014033218
  • 2017年07月17日 18:37
  • 290

Hadoop系列--Hadoop核心之MapReduce的原理

1 MapReduce核心原理  “分而治之,并行计算”是MapReduce的核心原理,其实也是大数据处理的中心思想。1.1 分而治之  在MapReduce中,分而治之,就是,    一个任务...
  • qq_33429968
  • qq_33429968
  • 2017年08月12日 18:25
  • 264

Hadoop 2.6 MapReduce运行原理详解

Hadoop 2.6 MapReduce运行原理详解   市面上的hadoop权威指南一类的都是老版本的书籍了,索性学习并翻译了下最新版的Hadoop:The Definitive Guide,...
  • u011007180
  • u011007180
  • 2016年09月04日 20:06
  • 5628
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MapReduce原理
举报原因:
原因补充:

(最多只允许输入30个字)