原博客http://blog.csdn.net/chlaws/article/details/23709571
前言
MapReduce的源码分析是基于Hadoop1.2.1基础上进行的代码分析。
本篇,将不会涉及代码部分的分析,只是简单分析map的整体架构,并介绍map与reduce的运行过程,主要是为后续的分析做一个铺垫。至于 MapTask/ReduceTask的原理分析,JobTracker部分,以及TaskTracker如何启动一个Task这些都将在后续章节给出。
MR编程模型
MapReduce的编程模型是来自lisp,源于在函数式编程语言中可以通过reduce(map(fn())这种形式将问题进行拆分处理。
借鉴于此,MapReduce编程分为两个阶段,Map阶段和Reduce阶段。通过这种形式,用户只需要关心map函数和reduce函数的编写,就可以将复杂业务处理通过简单的MapReduce来实现。
map函数,接收输入数据的key/value键值对,进行处理,产生新的key/value键值对,作为中间数据,输出到磁盘上。MapReduce框架会对输出的key/value键值对,进行分区,同一个分区中的数据最后都会被同一个Reduce处理。
reduce函数,读取Map的输出结果,读取完成后进行排序,将排序后的有序的key/value键值对传递给reduce函数处理,处理完成后产生新的key/value键值对,输出到存储上(一般是hdfs上)。
MR架构
MapReduce框架的架构如上图所示,是采用比较常见的Master/Slave的架构模式。
在MapReduce中JobTracker负责作业的管理,资源监控。TaskTracker负责执行Task。Task可以分为MapTask和ReduceTask。
需要知道的是一个Job即代表了用户执行的一个分布式的计算过程的作业,而Task则表示一个作业会被拆分为许多个小的任务中的一个,Task可以分为 Map阶段的任务或者是Reduce阶段的任务,也就是说Task是任务处理中的一个单元,有这个小的单元去完成一部分计算的任务,最后所有任务都完成, 结果经过汇聚,就代表一个作业的处理完毕。
用户执行一个作业的过程如下:
1.用户提交作业,由JobClient将相关作业信息进行打包并传递到hdfs上,并通知JobTracker。
2.JobTracker接收到新的作业,对作业初始化。根据TaskTracker通过心跳汇报上来的负载信息,得知空闲资源分布情况。由任务调度器决定将任务下发到哪些有空闲资源的节点。
3.Tracker接收到任务后,启动单独的jvm运行Task。Task在运行过程中的状态都会先汇报给TaskTracker,再由TaskTracker汇报给JobTracker。
MapTask运行过程
一个MapTask的运行过程如上图所示。运行过程可以分为三个阶段,分别是数据读取阶段,Map阶段,分区阶段。
数据读取阶段,是指InputFormat负责理解数据格式并解析成key,value传递给map函数处理。InputFormat提供了 getInputSplit接口,负责将输入数据切分为一个个InputSplit(分片),同时还提供getRecordReader接口,负责解析 InputSplit,通过RecordReader提取出key/value键值对。这些键值对就是作为map函数的输入。
Map阶段,是指运行用户实现的Mapper接口中的map函数,该函数负责对输入的key/value数据进行初步处理,产生新的key/value键值对作为中间数据保存在本地磁盘上。
分区阶段,map输出的临时数据,会被分成若干个分区,每个分区都会被一个ReduceTask处理。
ReduceTask运行过程
ReduceTask的执行过程如上图所示。该过程可以分为三个阶段,分别为Shuffle阶段,sort阶段,reduce阶段。
Shuffle阶段,是指ReduceTask通过查询JobTracker知道有哪些Map处理完毕。一旦有MapTask处理完毕,就会远程读取这些MapTask产生的临时数据。
Sort阶段,是指将读取的数据,按照key对key/value键值对进行排序。
Reduce阶段,是指运行用户实现的Reducer接口中的reduce函数,该函数读取sort阶段的有序的key/value键值对,进行处理,并将最终的处理结果存到hdfs上。
多Map和多Reduce运行分析
上图所示,是一个多MapTask和多ReduceTask的数据处理流程。这个Job用户指定的是3个Map和2个Reduce。
其处理过程是:
JobTracker启动3个MapTask,每个MapTask都从读取对应的InputSplit。MapTask调用用户实现的map函数,产生新 的数据。至于数据会被划到哪个分区,这是有Partitioner控制的,默认情况下使用的HashPartitioner,相同的key最终都会被划到 一个分区中,因为指定了2个ReduceTask所以数据会被分为两个分区。在中间数据产生到磁盘前都会对数据进行排序。保证每个分区中的数据都是有序 的。
在Map运行中,会根据用户配置的Reduce在Map完成多少进度时启动。根据用户的配置JobTracker会在适当的时候向有空闲资源的 TaskTracker下发ReduceTask,由TaskTracker启动ReduceTask。ReduceTask启动后,查询 JobTracker获取它的输入源的Map是否已经有可读的数据。有则从发起http请求从这些MapTask输出的节点上拉取数据到本地。因为指定了 3个Map,因此一个Reduce需要从3个Map读取数据。读取后需要对读取的数据进行归并排序,以保障数据的有序性。这时,才会调用到用户实现的 reduce函数,做最后的处理,在处理完毕后,将数据存储到hdfs上。每个ReduceTask处理完成后,都会在hdfs上产生一个结果文件。因此 这里就会在hdfs上看到有两个结果文件
相关推荐
《MapReduce2.0源码分析与编程实战》比较系统地介绍了新一代MapReduce2.0的理论体系、架构和程序设计方法。全书分为10章,系统地介绍了HDFS存储系统,Hadoop的文件I/O系统,MapReduce2.0的框架结构和源码分析,...
《MapReduce 2.0源码分析与编程实战》比较系统地介绍了新一代MapReduce 2.0的理论体系、架构和程序设计方法。全书分为10章,系统地介绍了HDFS存储系统,Hadoop的文件I/O系统,MapReduce 2.0的框架结构和源码分析,...
### MapReduce2.0源码分析与实战编程-第一章 #### 大数据时代与MapReduce的重要性 在当今信息爆炸的时代背景下,“大数据”成为了各行业关注的焦点。本章节以“大象也能跳舞”这一形象比喻引入,意在说明即便是...
以下是对MapReduce源码的一些关键知识点的详细阐述: 1. **MapReduce架构**:MapReduce将大型数据集分解为小块,通过“Map”阶段并行处理这些块,然后在“Reduce”阶段汇总结果。这种分而治之的策略使得处理海量...
**MapReduce源码分析** 1. **JobTracker与TaskTracker**:MapReduce的作业调度和任务执行由JobTracker和TaskTracker完成。JobTracker负责分配任务,监控任务状态,而TaskTracker在工作节点上执行任务。源码分析可...
《Hadoop源码分析——MapReduce深度解析》 Hadoop,作为云计算领域的核心组件,以其分布式存储和计算能力,为大数据处理提供了强大的支持。MapReduce是Hadoop的主要计算框架,其设计思想源于Google的论文,旨在解决...
在Hadoop源码分析中,我们能看到这些Google技术的影子,例如Chubby和ZooKeeper,GFS和HDFS,BigTable和HBase,MapReduce和Hadoop。通过对比这些技术,学习者可以更容易地把握Hadoop的设计思路。 Hadoop源码复杂且...
1. Spark架构:解释Spark的基本组件和它们之间的交互,以及如何构建Spark应用程序。 2. RDD原理:深入剖析RDD的生命周期,包括创建、转换和行动操作,以及容错机制。 3. 调度系统:分析DAGScheduler和TaskScheduler...
### Storm源码分析 #### 一、Storm简介与应用场景 Apache Storm是一款开源的分布式实时计算系统,它提供了简单而强大的API来定义数据流处理逻辑,同时保证了消息处理的容错性和高性能。Storm的设计目标是成为实时...
《深入理解Spark:核心思想及源码分析》这本书旨在帮助读者深入掌握Apache Spark这一大数据处理框架的核心原理与实现细节。Spark作为一个快速、通用且可扩展的数据处理系统,已经在大数据领域得到了广泛应用。它提供...
### Hadoop源码分析知识点概览 #### 一、Hadoop概述与背景 - **Google核心技术**:Hadoop的设计理念很大程度上受到了Google一系列核心技术的影响,包括Google File System (GFS)、BigTable以及MapReduce等。这些...
本资料集“Hadoop源码分析”深入探讨了Hadoop的核心架构,帮助开发者理解其内部工作原理,从而更好地利用和优化这个强大的工具。 Hadoop主要由两个核心部分组成:HDFS(Hadoop Distributed File System)和...
标签为“源码”和“工具”,这表明文章可能涉及Hadoop MapReduce框架的源码研究,以及与MapReduce相关的编程工具或软件。 **文章内容知识点:** 1. **MapReduce框架:** - MapReduce是一种用于处理大规模数据集的...
这份“Hadoop源码分析完整版”资料深入剖析了Hadoop的核心组件及其工作原理,旨在帮助开发者理解并优化Hadoop系统。 1. **Hadoop概述** Hadoop由Apache基金会开发,其核心包括两个主要部分:Hadoop Distributed ...
Hadoop 的源代码分析可以帮助开发者更好地理解 Hadoop 的架构和实现机制,从而更好地使用 Hadoop 实现大数据处理和分析。 Hadoop 的关键部分集中在图中的蓝色部分,这也是我们考察的重点。Hadoop 的包的功能分析...
### Map-Reduce原理体系架构和工作机制 #### 一、Map-Reduce原理概述 Map-Reduce是一种编程模型,用于...在实际应用中,Map-Reduce已经被广泛应用于搜索引擎索引构建、社交网络数据分析、金融交易记录分析等领域。