2009-021hadoop源代码分析mapreduce概论大家都熟悉文件

2009-021hadoop源代码分析mapreduce概论大家都熟悉文件

ID:9315442

大小:2.30 MB

页数:23页

时间:2018-04-27

2009-021hadoop源代码分析mapreduce概论大家都熟悉文件_第1页
2009-021hadoop源代码分析mapreduce概论大家都熟悉文件_第2页
2009-021hadoop源代码分析mapreduce概论大家都熟悉文件_第3页
2009-021hadoop源代码分析mapreduce概论大家都熟悉文件_第4页
2009-021hadoop源代码分析mapreduce概论大家都熟悉文件_第5页
资源描述:

《2009-021hadoop源代码分析mapreduce概论大家都熟悉文件》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、2009-02-21Hadoop源代码分析(MapReduce概论)大家都熟悉文件系统,在对HDFS进行分析前,我们并没有花很多的时间去介绍HDFS的背景,毕竟大家对文件系统的还是有一定的理解的,而且也有很好的文档。在分析Hadoop的MapReduce部分前,我们还是先了解系统是如何工作的,然后再进入我们的分析部分。下面的图来自http://horicky.blogspot.com/2008/11/hadoop-mapreduce-implementation.html,是我看到的讲MapReduce最好的图。 以Hadoop带的wordcount为例子(下面是启动行):hadoopj

2、arhadoop-0.19.0-examples.jarwordcount/usr/input/usr/output用户提交一个任务以后,该任务由JobTracker协调,先执行Map阶段(图中M1,M2和M3),然后执行Reduce阶段(图中R1和R2)。Map阶段和Reduce阶段动作都受TaskTracker监控,并运行在独立于TaskTracker的Java虚拟机中。我们的输入和输出都是HDFS上的目录(如上图所示)。输入由InputFormat接口描述,它的实现如ASCII文件,JDBC数据库等,分别处理对于的数据源,并提供了数据的一些特征。通过InputFormat实现,可以

3、获取InputSplit接口的实现,这个实现用于对数据进行划分(图中的splite1到splite5,就是划分以后的结果),同时从InputFormat也可以获取RecordReader接口的实现,并从输入中生成对。有了,就可以开始做map操作了。map操作通过context.collect(最终通过OutputCollector.collect)将结果写到context中。当Mapper的输出被收集后,它们会被Partitioner类以指定的方式区分地写出到输出文件里。我们可以为Mapper提供Combiner,在Mapper输出它的时,键值对不会被马上写

4、到输出里,他们会被收集在list里(一个key值一个list),当写入一定数量的键值对时,这部分缓冲会被Combiner中进行合并,然后再输出到Partitioner中(图中M1的黄颜色部分对应着Combiner和Partitioner)。Map的动作做完以后,进入Reduce阶段。这个阶段分3个步骤:混洗(Shuffle),排序(sort)和reduce。混洗阶段,Hadoop的MapReduce框架会根据Map结果中的key,将相关的结果传输到某一个Reducer上(多个Mapper产生的同一个key的中间结果分布在不同的机器上,这一步结束后,他们传输都到了处理这个key的Reduc

5、er的机器上)。这个步骤中的文件传输使用了HTTP协议。排序和混洗是一块进行的,这个阶段将来自不同Mapper具有相同key值的对合并到一起。Reduce阶段,上面通过Shuffle和sort后得到的会送到Reducer.reduce方法中处理,输出的结果通过OutputFormat,输出到DFS中。2009-02-25Hadoop源代码分析(包org.apache.hadoop.mapreduce)有了前一节的分析,我们来看一下具体的接口,它们都处于包org.apache.hadoop.mapreduce中。 上面的图中,类

6、可以分为4种。右上角的是从Writeable继承的,和Counter(还有CounterGroup和Counters,也在这个包中,并没有出现在上面的图里)和ID相关的类,它们保持MapReduce过程中需要的一些计数器和标识;中间大部分是和Context相关的*Context类,它为Mapper和Reducer提供了相关的上下文;关于Map和Reduce,对应的类是Mapper,Reducer和描述他们的Job(在Hadoop中一次计算任务称之为一个job,下面的分析中,中文为“作业”,相应的task我们称为“任务”);图中其他类是配合Mapper和Reduce工作的一些辅助类。如果你

7、熟悉HTTPServlet,那就能很轻松地理解Hadoop采用的结构,把整个Hadoop看作是容器,那么Mapper和Reduce就是容器里的组件,*Context保存了组件的一些配置信息,同时也是和容器通信的机制。和ID相关的类我们就不再讨论了。我们先看JobContext,它位于*Context继承树的最上方,为Job提供一些只读的信息,如Job的ID,名称等。下面的信息是MapReduce过程中一些较关键的定制信息:(来自ht

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。