`

MapReduce工作原理

阅读更多

文章转自:http://weixiaolu.iteye.com/blog/1474172

 

1.MapReduce作业运行流程


下面贴出我用visio2010画出的流程示意图:

 

 

 

 

 

 

 

 

流程分析:

 


1.在客户端启动一个作业。

 


2.向JobTracker请求一个Job ID。

 


3.将运行作业所需要的资源文件复制到HDFS上,包括MapReduce程序打包的JAR文件、配置文件和客户端计算所得的输入划分信息。这些文件都存 放在JobTracker专门为该作业创建的文件夹中。文件夹名为该作业的Job ID。JAR文件默认会有10个副本(mapred.submit.replication属性控制);输入划分信息告诉了JobTracker应该为这 个作业启动多少个map任务等信息。

4.JobTracker接收到作业后,将其放在一个作业队列里,等待作业调度 器对其进行调度(这里是不是很像微机中的进程调度呢,呵呵),当作业调度器根据自己的调度算法调度到该作业时,会根据输入划分信息为每个划分创建一个 map任务,并将map任务分配给TaskTracker执行。对于map和reduce任务,TaskTracker根据主机核的数量和内存的大小有固 定数量的map槽和reduce槽。这里需要强调的是:map任务不是随随便便地分配给某个TaskTracker的,这里有个概念叫:数据本地化 (Data-Local)。意思是:将map任务分配给含有该map处理的数据块的TaskTracker上,同时将程序JAR包复制到该 TaskTracker上来运行,这叫“运算移动,数据不移动”。而分配reduce任务时并不考虑数据本地化。


5.TaskTracker每隔一段时间会给JobTracker发送一个心跳,告诉JobTracker它依然在运行,同时心跳中还携带着很多的信息, 比如当前map任务完成的进度等信息。当JobTracker收到作业的最后一个任务完成信息时,便把该作业设置成“成功”。当JobClient查询状 态时,它将得知任务已完成,便显示一条消息给用户。

以上是在客户端、JobTracker、TaskTracker的层次来分析MapReduce的工作原理的,下面我们再细致一点,从map任务和reduce任务的层次来分析分析吧。

2.Map、Reduce任务中Shuffle和排序的过程

 

 

 

 

流程分析:

Map端:

1.每个输入分片会让一个map任务来处理,默认情况下,以HDFS的一个块的大小(默认为64M)为一个分片,当然我们也可以设置块的大小。map输出 的结果会暂且放在一个环形内存缓冲区中(该缓冲区的大小默认为100M,由io.sort.mb属性控制),当该缓冲区快要溢出时(默认为缓冲区大小的 80%,由io.sort.spill.percent属性控制),会在本地文件系统中创建一个溢出文件,将该缓冲区中的数据写入这个文件。

2.在写入磁盘之前,线程首先根据reduce任务的数目将数据划分为相同数目的分区,也就是一个reduce任务对应一个分区的数据。这样做是为了避免 有些reduce任务分配到大量数据,而有些reduce任务却分到很少数据,甚至没有分到数据的尴尬局面。其实分区就是对数据进行hash的过程。然后 对每个分区中的数据进行排序,如果此时设置了Combiner,将排序后的结果进行Combia操作,这样做的目的是让尽可能少的数据写入到磁盘。

同样贴出我在visio中画出的流程示意图:

3.当map任务输出最后一个记录时,可能会有很多的溢出文件,这时需要将这些文件合 并。合并的过程中会不断地进行排序和combia操作,目的有两个:1.尽量减少每次写入磁盘的数据量;2.尽量减少下一复制阶段网络传输的数据量。最后 合并成了一个已分区且已排序的文件。为了减少网络传输的数据量,这里可以将数据压缩,只要将mapred.compress.map.out设置为 true就可以了。

4.将分区中的数据拷贝给相对应的reduce任务。有人可能会问:分区中的数据怎么知道它对应的reduce是哪个呢?其实map任务一直和其父 TaskTracker保持联系,而TaskTracker又一直和JobTracker保持心跳。所以JobTracker中保存了整个集群中的宏观信 息。只要reduce任务向JobTracker获取对应的map输出位置就ok了哦。

到这里,map端就分析完了。那到底什么是Shuffle呢?Shuffle的中文意思是“洗牌”,如果我们这样看:一个map产生的数据,结果通过hash过程分区却分配给了不同的reduce任务,是不是一个对数据洗牌的过程呢?呵呵。

Reduce端:

1.Reduce会接收到不同map任务传来的数据,并且每个map传来的数据都是有序的。如果reduce端接受的数据量相当小,则直接存储在内存中 (缓冲区大小由mapred.job.shuffle.input.buffer.percent属性控制,表示用作此用途的堆空间的百分比),如果数据 量超过了该缓冲区大小的一定比例(由mapred.job.shuffle.merge.percent决定),则对数据合并后溢写到磁盘中。

2.随着溢写文件的增多,后台线程会将它们合并成一个更大的有序的文件,这样做是为了给后面的合并节省时间。其实不管在map端还是reduce端,MapReduce都是反复地执行排序,合并操作,现在终于明白了有些人为什么会说:排序是hadoop的灵魂。

3.合并的过程中会产生许多的中间文件(写入磁盘了),但MapReduce会让写入磁盘的数据尽可能地少,并且最后一次合并的结果并没有写入磁盘,而是直接输入到reduce函数。

分享到:
评论

相关推荐

    Hadoop介绍,HDFS和MapReduce工作原理

    Hadoop介绍,HDFS和MapReduce工作原理

    Hadoop技术MapReduce工作原理共9页.pdf

    以下是MapReduce的工作原理、核心概念以及其在大数据处理中的应用。 **一、MapReduce工作流程** MapReduce的工作流程主要分为三个阶段:Map阶段、Shuffle阶段(也称为排序和分区)和Reduce阶段。 1. **Map阶段**...

    17_尚硅谷大数据之MapReduce框架原理1

    **3.1 MapReduce工作流程** 1. **提交阶段**:客户端将应用程序(包括map和reduce代码以及输入数据)打包成JAR文件,并提交给JobTracker(在YARN中是ResourceManager)。 2. **作业初始化**:JobTracker解析JobConf...

    Hadoop技术-MapReduce工作原理.pptx

    MapReduce的工作原理包括MapTask和ReduceTask两个主要阶段。MapTask负责数据的输入、处理和本地溢写,而ReduceTask则处理数据的传输、合并、排序和reduce操作。理解这两个阶段的内部机制对于优化Hadoop作业性能至关...

    Mapreduce原理

    ### MapReduce原理详解 #### 一、MapReduce与Hadoop概述 MapReduce是Apache Hadoop项目的核心组件之一,主要用于处理大规模数据集的分布式计算。它不仅是一种编程模型,还是一套支持这种模型的软件框架。MapReduce...

    MapReduce工作知识原理.pdf

    MapReduce工作原理详解 Hadoop是一个开源的分布式计算框架,起源于Apache项目,专注于大规模数据的分布式存储和处理。它的核心特性包括可扩展性、经济性、高效性和可靠性,使得处理PB级别的数据变得可能,同时利用...

    MapReduce原理及实现介绍

    分布式处理系统,适合集群式处理。提高运行效率以及容错率

    JavaScript mapreduce工作原理简析

    JavaScript MapReduce工作原理简析 MapReduce是一种编程模型,由谷歌在2004年的OSDI会议上提出,它主要用于大规模数据集的并行处理。该模型借鉴了函数式编程的概念,将复杂的数据处理任务分解为两个主要阶段:Map...

    Map-Reduce原理体系架构和工作机制,eclipse与Hadoop集群连接

    ### Map-Reduce原理体系架构和工作机制 #### 一、Map-Reduce原理概述 Map-Reduce是一种编程模型,用于处理大规模数据集(通常是TB级或更大),该模型可以在大量计算机(称为集群)上进行并行处理。Map-Reduce的...

    Hadoop MapReduce教程.pdf

    #### MapReduce工作原理 MapReduce的工作流程分为两个阶段:Map阶段和Reduce阶段。 - **Map阶段**:输入的数据被切分成多个小块,每个Map任务读取其中一小块数据,进行处理,并将结果输出到一组中间键值对中。 - *...

    mapreduce源码

    这个压缩包文件包含了Hadoop MapReduce项目的源代码,提供了深入理解MapReduce工作原理、内部机制和优化策略的宝贵资源。以下是对MapReduce源码的一些关键知识点的详细阐述: 1. **MapReduce架构**:MapReduce将...

    Hadoop应用系列2--MapReduce原理浅析(上)

    本文将深入浅出地解析MapReduce的工作原理,帮助读者理解这一强大的大数据处理模型。 MapReduce是由Google在2004年提出的一种并行计算模型,其设计灵感来源于函数式编程中的映射(map)和归并(reduce)操作。...

    mapreduce 实现朴素贝叶斯算法-源码

    **MapReduce工作原理:** MapReduce将大数据处理任务分解为两个主要阶段:Map阶段和Reduce阶段。Map阶段将输入数据分割成多个小块,然后对每个块进行独立处理,生成中间键值对。Reduce阶段则负责聚合这些中间结果,...

    mapreduce原理

    MapReduce 原理 MapReduce 的定义和架构 MapReduce 是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的式并行处理上 T 级别的数据集。 MapReduce...

Global site tag (gtag.js) - Google Analytics