现在的位置: 首页 > 综合 > 正文

Hadoop–MapReduce简述

2013年10月11日 ⁄ 综合 ⁄ 共 2317字 ⁄ 字号 评论关闭

概述

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

一个Map/Reduce 作业(job) 通常会把输入的数据集切分为若干独立的数据块,由 map任务(task)以完全并行的方式处理它们。框架会对map的输出先进行排序, 然后把结果输入给reduce任务。通常作业的输入和输出都会被存储在文件系统中。 整个框架负责任务的调度和监控,以及重新执行已经失败的任务。

 

通常,Map/Reduce框架和分布式文件系统是运行在一组相同的节点上的,也就是说,计算节点和存储节点通常在一起。这种配置允许框架在那些已经存好数据的节点上高效地调度任务,这可以使整个集群的网络带宽被非常高效地利用。

 

Map/Reduce框架由一个单独的master JobTracker 和每个集群节点一个slave TaskTracker共同组成。master负责调度构成一个作业的所有任务,这些任务分布在不同的slave上,master监控它们的执行,重新执行已经失败的任务。而slave仅负责执行由master指派的任务。

 

应用程序至少应该指明输入/输出的位置(路径),并通过实现合适的接口或抽象类提供map和reduce函数。再加上其他作业的参数,就构成了作业配置(job configuration)。然后,Hadoop的 job client提交作业(jar包/可执行程序等)和配置信息给JobTracker,后者负责分发这些软件和配置信息给slave、调度任务并监控它们的执行,同时提供状态和诊断信息给job-client。

 

在Hadoop官方文档介绍了Hadoop中MapReduce的三个步骤:

map(主要是分解并行的任务)、combine(主要是为了提高reduce的效率)和reduce(把处理后的结果再汇总起来)。

1.map

由于map是并行地对输入的文件集进行操作,所以它的第一步(FileSplit)就是把文件集分割成一些子集。如果单个的文件大到影响查找效率时,它会被分割成一些小的文件。要指出的是,分割这一步是不知道输入文件的内部逻辑结构的。比如,以行为逻辑分割的文本文件会被以任意的字节界限分割,所以这个具体分割要由用户自己指定。然后每个文件分割体都会对应地有一个新的map任务。

当单个map任务开始时,它会对每个配置过的reduce任务开启一个新的输出流(writer),这个输出流会读取文件分割体。Hadoop中的类InputFormat用于分析输入文件并产生键值(key/value)对。

Hadoop中的Mapper类是一个可以由用户实现的类,经过InputFormat类分析的键值(key/value)对都传给Mapper类,这样,用户提供的Mapper类就可以进行真正的map操作。

当map操作的输出被收集后,它们会被Hadoop中的Partitioner类以指定的方式区分地写入输出文件里。

 

2.combine

当map操作输出它的键值(key/value)对时,出于性能和效率的考虑,Hadhoop框架提供了一个合成器(combine)。有了这个合成器,map操作所产生的键值(key/value)对就不会马上写入输出文件,它们会被收集在一些list中,一个key值对应一个list,当写入一定数量的键值(key/value)对时,这部分list会被合成器处理。

比如,hadoop案例中的word count程序,它的map操作输出是(word,1)键值对,在map操作的输入中,词的计数可以使用合成器来加速。合成操作会在内存中收集处理list,一个词一个list。当一定数量的键值对输出到内存中时,就调用合成操作的reduce方法,每次都以一个唯一的词为key,values是list的迭代器,然后合成器输出(word, count-in-this-part- of-the-input)键值对。

 

3.reduce

当一个reduce任务开始时,它的输入分散在各个节点上的map的输出文件里。如果在分布式的模式下,需要先把这些文件拷贝到本地文件系统上。

一旦所有的数据都被拷贝到reduce任务所在的机器上时,reduce任务会把这些文件合并到一个文件中。然后这个文件会被合并分类,使得相同的key的键值对可以排在一起。接下来的reduce操作就很简单了,顺序地读入这个文件,将键(key)所对应的值(values)传给reduce方法完成之后再读取一个键(key)。

 

简单描述工作原理:

“主机” 接收到要被处理的输入数据。 输入的数据被分成更小的块,所有这些块被分布在多个工作节点上并行处理。 这一步被称为“映射”。工作节点将结果返回给“主机”,“主机”聚合这些结果,并计算出最终结果。这一步被称为“化简”

 

通过现实事例理解:

我在网上看个视频,讲述了这么一个例子,来说明这个理论:

假如我们要做一道菜,西红柿炒鸡蛋,那么我们要做一个前期准备,洗好西红柿并切好,搅拌好鸡蛋,这个过程就属于MAP,待都处理好后我们就需要将两者搅拌在一起开始炒菜,这个过程就属于Reduce。

 

图片:

物理架构:

 

 

执行流程:

 

 参考网站:

http://hadoop.apache.org/docs/r0.19.1/cn/mapred_tutorial.html

http://sishuok.com/

http://www.oschina.net/translate/an-introduction-to-apache-hadoop-hdfs-mapreduce

抱歉!评论已关闭.