Hadoop -- Map-Reduce具体实现详解

翻译 2007年10月08日 15:27:00

HadoopMapReduce

--Map-Reduce具体实现详解

Keyword:
    FileSplit:
文件的子集--文件分割体

简介:

  这篇文档描述在hadoopmapreduce操作是怎样具体完成的。如果你对GoogleMapReduce各式模式不熟悉,请先参阅MapReduce--http://labs.google.com/papers/mapreduce.html

Map

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

  当单个map任务开始时,它会对每个配置过的reduce任务开启一个新的输出书写器(writer).紧接着它(writer)会用从指定的特定InputFormat里得到的RecordReader去读它的文件分割体。InputFormat类分析输入文件并产生key-value键值对.同时InputFormat必需要处理在以文件分割时边界处的记录。比如TextInputFormat会读取分割边界的文件分割体有最后一行,如果当读取的分割体不是第一个时,TextInputFormat会忽略第一行的内容。


  InputFormat类并不需要产生一些对有意义的键值对。比如TextInputFormat类的默认输出是以输入文本的行内容为value,以行偏移量为key--大多数应用只用到而很少用到偏移量。

  传给用户配置的mapper的键值对都是从RecordReader读入的,用户提供的Mapper类就可以对键值对进行任意的操作再调用OutputCollector.collect 方法来重新收集自己定义后的键值对。产生的输出必需用一个Key类和一个value类,这是因为Map的输出结果要被以SequenceFile的形式写入磁盘,这种形式包括每个文件的类型信息和所有的记录都是同类形的(如果你想输出不同的数据结构你可以继承个子类出来)Map的输入和输出键值对不需要在类型上有联系.

  Mapper的输出被收集后,它们会被Partitioner类以指定的方式区分地写出到输出文件里。默认是以HashPartitioner类用key类的哈希函数产生的hashcode来区分(因此就要有一个很好的哈希函数,才可以使在各个reduce任务时负载匀衡)。详细可以查看MapTask类。N个输入可以产生Mmap任务去跑,每个map任务会产生配置的reduce任务数个输出文件。每个输出文件都会面向一个特定的reduce任务同时所有从map任务产生的键值对都会被送到reduce里。所以在一个特定的reduce任务中对于一个给定的key所有的键值对都会被处理。



Combine

  map操作输出它的键值对时他们已经在内存中存在了。为了性能和效率的考虑,有时候提供一个拥有reduce功能的合成器是有好处的。如果有 合成器,那么map的键值对就不会被马上写入到输出里,他们会被收集在list里,一个key值一个list,当写入一定数量的键值对时,这部分缓冲会被 送进合成器,每个key都的所有value都会被送进合成器的reduce方法里并且就像原先map输出的键值对一样。



  比如,hadoop案例中的word count程序,它的map操作输出是(word,1)键值对,在输入中的词的计数可以用合成器来加速这个操作。一个合成操作会在内存中收集处理lists,一个词一个list。当一定数量的键值对输出到内存中时,就调用合成操作的reduce方法,每次都以一个唯一的词为keyvalueslist的迭代器。然后合成器输出(word, count-in-this-part-of-the-input)键值对。从Reduce操作的观点来说合成器也拥有Map输出中相同的信息,但是这样会比原先远远减少硬盘的读写。

Reduce

  当一个reduce任务开始时,它的输入是分散在各个节点上的map的输出文件里。如果在分布式的模式下,他们需要先在拷贝步骤里拷贝到本地文件系统上。详细可以查看ReduceTaskRunner

  一旦所有的数据都在本地有效时,它会在添加步骤里加到一个文件里。然后这个文件会被合并分类这样相同的key的键值对就可以排在一起(分类步骤)。这样可以使真正的reduce操作变得简单,这个文件会被顺序地读入,值(values)会从输入文件里用一个迭代器传给reduce方法-直到下一个key。详细可以查看ReduceTask类。

  最后,输出由每个reduce任务的输出文件组成。面他们的格式可以由JobConf.setOutputFormat类指定,如果用到JobConf.setOutputFormat类,那么输出的key类和value类都要同时指定。

last edited 2007-08-10 09:26:55 by Arun C Murthy

翻译:吴志敏

原文:http://wiki.apache.org/lucene-hadoop/HadoopMapReduce

 

hadoop入门级总结二:Map/Reduce

在上一篇博客:hadoop入门级总结一:HDFS中,简单的介绍了hadoop分布式文件系统HDFS的整体框架及文件写入读出机制。接下来,简要的总结一下hadoop的另外一大关键技术之一分布式计算框架:...
  • zbc1090549839
  • zbc1090549839
  • 2016-07-09 17:12:57
  • 3021

Hadoop、HDFS和Map/Reduce

Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算框架。Hadoop的核心是分布式文件系统H...
  • lion19930924
  • lion19930924
  • 2016-08-17 22:33:45
  • 793

hadoop1之map到reduce中间的shuffle过程

huffle和排序 过程图如下:   MapReduce确保每个reduce的输入都按键排序,系统执行排序的过程——将map输出作为输入传给reduce——成为shuffle,理解shuff...
  • xiangxizhishi
  • xiangxizhishi
  • 2017-07-25 23:58:17
  • 252

一步一步跟我学习hadoop(4)----hadoop Map/Reduce教程(1)

Hadoop Map/Reduce说明     hadoop Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行...
  • wuyinggui10000
  • wuyinggui10000
  • 2015-07-19 22:47:16
  • 1901

Hadoop MapReduce原理及实例

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

hadoop的map和reduce任务的执行步骤

一共8个步骤: 1. map任务处理 1.1 读取hdfs中的文件。每一行解析成一个。(每一个键值对调用一次map函数) 1.2 覆盖map(),接收1.1产生的,进行处理,转换为新的输出 1.3 对...
  • xuxiaocheng1
  • xuxiaocheng1
  • 2013-12-22 14:45:29
  • 1727

Hadoop学习:Map/Reduce初探与小Demo实现

一、    概念知识介绍         Hadoop MapReduce是一个用于处理海量数据的分布式计算框架。这个框架解决了诸如数据分布式存储、作业调度、容错、机器间通信等复杂问题,可以使没有并行...
  • liyong199012
  • liyong199012
  • 2014-05-09 20:01:42
  • 11644

Hadoop之MapReduce

摘要:MapReduce是Hadoop的又一核心模块,从MapReduce是什么,MapReduce能做什么以及MapReduce的工作机制三方面认识MapReduce。 关键词:Hadoop ...
  • wangloveall
  • wangloveall
  • 2014-03-17 20:58:17
  • 36256

<em>Hadoop</em> <em>MapReduce</em>实战手册(完整版)

本书对<em>Hadoop</em> <em>Mapreduce</em>进行详细讲解,切合实际应用,能够更深入地学习<em>MapReduce</em>,确实是一本不错的书。&lt;br/&gt;&lt;br/&gt;这是一本学习<em>Hadoop</em> <em>MapReduce</em>的一站式指南,...
  • 2018年04月13日 00:00

Hadoop MapReduce执行过程详解(带hadoop例子)

转自 https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程。 分析MapRed...
  • miniykyk
  • miniykyk
  • 2016-10-26 01:05:54
  • 1991
收藏助手
不良信息举报
您举报文章:Hadoop -- Map-Reduce具体实现详解
举报原因:
原因补充:

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