大家都熟悉文件系统,在对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免费学习交流群:

最新文章

  1. table:设置边距,td内容过长用省略号代替
  2. android小技巧(二)
  3. Maven如何传递系统属性变量到TestNG
  4. cas的http配置和rmi远程调用
  5. android UI库
  6. LeetCode Longest Common Prefix 最长公共前缀
  7. [App]华为P6设置与Xamarin Studio连通测试
  8. JSON、XML 解析
  9. 关于jsp页面转换成excel格式下载遇到问题及解决
  10. J2EE和android的GZIP测试
  11. C# 图解教程 第一章 C#和.NET框架
  12. linux使用vim打开乱码问题
  13. ArcGIS中国工具2.5正式发布
  14. Mockito:一个强大的用于Java开发的模拟测试框架
  15. WebView之加载网页时增加进度提示
  16. linux 下 php 安装 pthreads
  17. spring-boot添加自定义拦截器
  18. IOS-网络(JSON解析数据与XML解析数据)
  19. Java学习第十九天
  20. 移动端的拖拽排序在react中实现 了解一下

热门文章

  1. HDU4825 Xor Sum(贪心+Trie树)
  2. 洛谷 P1000 超级玛丽游戏
  3. jquery点击完一个按钮,并且触发另一个按钮
  4. Vue 自定义全局消息框组件
  5. VC error link
  6. vs2015 EF code first 问题待解决
  7. 魅族MX5和努比亚布拉格手机參数对照
  8. 知无涯者(The Man Who Knew Infinity)
  9. android开发设计辅助工具整理
  10. Java vs C++:子类覆盖父类函数时缩小可访问性的不同设计