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

以Hadoop带的wordcount为例子(下面是启动行):
hadoop jar hadoop-0.19.0-examples.jar wordcount /usr/input/usr/output
用户提交一个任务以后,该任务由JobTracker协调,先执行Map阶段(图中M1,M2和M3),然后执行Reduce阶段(图中R1和R2)。Map阶段和Reduce阶段动作都受TaskTracker监控,并运行在独立于TaskTracker的Java虚拟机中。
我们的输入和输出都是HDFS上的目录(如上图所示)。输入由InputFormat接口描述,它的实现如ASCII文件,JDBC数据库等,分别处理对于的数据源,并提供了数据的一些特征。通过InputFormat实现,可以获取InputSplit接口的实现,这个实现用于对数据进行划分(图中的splite1到splite5,就是划分以后的结果),同时从InputFormat也可以获取RecordReader接口的实现,并从输入中生成<k,v>对。有了<k,v>,就可以开始做map操作了。
map操作通过context.collect(最终通过OutputCollector. collect)将结果写到context中。当Mapper的输出被收集后,它们会被Partitioner类以指定的方式区分地写出到输出文件里。我们可以为Mapper提供Combiner,在Mapper输出它的<k,v>时,键值对不会被马上写到输出里,他们会被收集在list里(一个key值一个list),当写入一定数量的键值对时,这部分缓冲会被Combiner中进行合并,然后再输出到Partitioner中(图中M1的黄颜色部分对应着Combiner和Partitioner)。
Map的动作做完以后,进入Reduce阶段。这个阶段分3个步骤:混洗(Shuffle),排序(sort)和reduce。
混洗阶段,Hadoop的MapReduce框架会根据Map结果中的key,将相关的结果传输到某一个Reducer上(多个Mapper产生的同一个key的中间结果分布在不同的机器上,这一步结束后,他们传输都到了处理这个key的Reducer的机器上)。这个步骤中的文件传输使用了HTTP协议。
排序和混洗是一块进行的,这个阶段将来自不同Mapper具有相同key值的<key,value>对合并到一起。

Reduce阶段,上面通过Shuffle和sort后得到的<key, (list of values)>会送到Reducer. reduce方法中处理,输出的结果通过OutputFormat,输出到DFS中。

更多精彩内容请关注:http://bbs.superwu.cn

关注超人学院微信二维码:

关注超人学院java免费学习交流群:

转载于:https://blog.51cto.com/crxy2013/1658955

Hadoop源代码分析(MapReduce概论)相关推荐

  1. Hadoop源代码分析 - MapReduce(转载)

    1. Hadoop源代码分析(MapReduce概论) http://caibinbupt.javaeye.com/blog/336467

  2. Hadoop源代码分析

    http://wenku.baidu.com/link?url=R-QoZXhc918qoO0BX6eXI9_uPU75whF62vFFUBIR-7c5XAYUVxDRX5Rs6QZR9hrBnUdM ...

  3. Hadoop源代码分析(完整图文版) part 1

    在网上看到了很多此文章的装载,但是都是纯文字,这篇文章在没有图片的情况下阅读起来意义不大了.花了点时间上传了100多张图片,希望对大家学习hadoop有帮助. Hadoop源代码分析(一) 关键字:  ...

  4. Hadoop源代码分析(完整版)

    Hadoop源代码分析(一) 关键字: 分布式云计算 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施.  GoogleCluster:http:/ ...

  5. Hadoop源代码分析(包mapreduce.lib.input)

    接下来我们按照MapReduce过程中数据流动的顺序,来分解org.apache.hadoop.mapreduce.lib.*的相关内容,并介绍对应的基类的功能.首先是input部分,它实现了MapR ...

  6. Hadoop源代码分析之Configuration

    最近也觉得应该仔细的看一下Hadoop的源代码了,以前只是懂得基本的架构了使用,最近在做一个系统,觉得很多东西可以借鉴MapReduce的可扩展性.但是当我们的系统的0.1版本出现的时候才发现我们的配 ...

  7. Hadoop源代码分析(四)

    为org.apache.hadoop.io.compress等的分析预留位置 转载于:https://www.cnblogs.com/94julia/archive/2013/04/01/299281 ...

  8. Hadoop源代码分析(二)

    下面给出了Hadoop的包的功能分析. Package Dependences tool 提供一些命令行工具,如DistCp,archive mapreduce Hadoop的Map/Reduce实现 ...

  9. Hadoop源代码分析(IFile)

    为什么80%的码农都做不了架构师?>>>    Mapper的输出,在发送到Reducer前是存放在本地文件系统的,IFile提供了对Mapper输出的管理.我们已经知道,Mappe ...

最新文章

  1. vue webpack打包入口文件是哪个_Vue项目起步
  2. 突然发现我还有博客园的博客呢哈哈哈哈
  3. centos ruby通过rvm更新版本
  4. 数据中台产品经理面试指南(二)
  5. 特邀丨前阿里巴巴产品运营专家、中国计算机学会专业会员,揭秘增长共同点
  6. 影响了一代代前端人的 20 个里程碑式的顶级开源项目!- 2006 - 2021
  7. java 定时器 的中断程序,STM32定时器中断
  8. 我的工作网怎么样_分享一下我在珍爱网的相亲经历
  9. python相同怎么写_这两个index相同的dataframe我想把他们merge,怎么写?
  10. Qt 5.14 稳定版发布,带来更好的 HiDPI 支持和改进 3D 模块
  11. redis做分布式id
  12. 团队作业8----第二次项目冲刺(beta阶段)5.20
  13. 节选转载:你敢向代码库中添加Boost你就等着被开除吧
  14. php传引用和全局变量
  15. ET框架——demo与自定义登录
  16. 打印图片一直显示连接传真服务器,打印机打印时显示传真怎么办
  17. 2016年中南大学校赛镜像赛
  18. 嵌入式Linux开发8——UART串口通讯
  19. 为自己的APP搭建个简易后台
  20. 跨平台应用即将死亡!

热门文章

  1. python excel 数据匹配实现vlookup功能_如何用python实现excel中的vlookup功能?
  2. android 复用标题栏,Android基础---使用ToolBar教你打造一个通用的标题栏
  3. java gc机制新区域旧屋_Java 内存回收机制——GC机制-Go语言中文社区
  4. mysql 表2符合表1_MYSQL-表1和表2中所有可能性的所有行
  5. dog log 算子_DoG和LoG算子
  6. centos 怎样下载php,centos下怎样安装软件
  7. 查询结果取交集_Elasticsearch 查询过程中的 prefilter 原理
  8. java软件开发ea介绍_开发说明 — Eacloud 1.0 documentation
  9. mysql 相关搜索_MySQL单词搜索相关度排名
  10. phpgif图片包_PHP生成GIF动态图片验证码