看了许久的代码,把map的流程熟悉了下,不追求最准确的理解,记录下来以免忘记。

对于JobTracker和TaskTracker等大层面有控制和通讯的代码暂时不表

map过程俗气的先上一个图:

map这一端基本是这样的流程:

input split分解成map个数量的部分输入==》RecordReader分解成Mapper需要的(key,value)记录==》执行map方法==》执行的结果起初在内存当中==》

当内存记录过多的时候spill到硬盘上面,如果有分区(Partitioner的话),spill的文件会记录分区的信息,单个spill文件首先按分区排序,然后按key排序==》

如果有多个spill文件则需要merge成一个大文件,是对spill文件的归并排序.

input split部分:

通过实现InputFormat抽象类中的两个方法就能达到效果。

getSplits(JobContext context),实现此方法,实现输入的切分,切分成map个数量的独立输入,这样每一个split都对应一个map

createRecordReader(InputSplit split,TaskAttemptContext context),实现此方法可以从split中读取到map需要的(key,value)对,当然类型需要和map方法的key,value参数类型一致

map方法:

map(KEYIN key, VALUEIN value, Context context),是对外提供的主要方法,一般只要实现此方法就可以实现MapReduce程序中的map过程,对输入(key,value)处理完之后,通过Context的方法写入到内存当中

spill,sort,merge:

当map方法被执行的次数过多,内存肯定是不够,所以此时需要持久化到硬盘里面去,此时就是spill的过程,在spill之前呢,其实是需要进行排序的也就是sort过程,sort过程首先按照分区进行排序,这样每个分区的数据排在一起,因为一个分区的数据是一个reduce过程的输入数据(确切的说是部分数据,因为map是有很多节点的,所有节点的分区数据之和才是reduce的输入),之后还需要按照key进行排序(每个分区之内的key),这样每个分区里面的key是有序的。排序以后就spill到硬盘当中。

当map过程都结束以后,spill到硬盘的文件数最起码有一个,一般都是多个,这个时候就需要merge了,merge的时候是个典型的归并排序,因为每个spill文件都是按照分区,然后按照分区中的key排序,所以merge过程是一个个分区的key进行归并排序的。

其他:

一般实现一个mapreduce程序的map端需要做的事情有:

实现InputFormat,实现RecordReader,实现InputSplit,实现Mapper的map方法,如果有分区的话就实现Partitioner。对于性能方面的问题,另起一篇说明。

 

转载于:https://www.cnblogs.com/nod0620/archive/2012/05/10/2492105.html

MapReduce的map流程相关推荐

  1. 从源码角度分析MapReduce的reduce流程

    文章目录 前言 流程图 Reduce都干了哪些事? 源码分析 1.run方法 1.1 比较器getOutputValueGroupingComparator 1.1.1 getOutputKeyCom ...

  2. 从源码角度分析MapReduce的map-output流程

    文章目录 前言 流程图 源码分析 1 runNewMapper方法 2.NewOutputCollector方法 2.1 createSortingCollector方法 2.1.1 collecto ...

  3. 什么是MapReduce,MapReduce的工作流程和原理是什么

    一.MapReduce的概念 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",和它 ...

  4. 【大数据入门笔记系列】第六节 分布式计算框架MapReduce的工作流程

    [大数据入门笔记系列]第六节 分布式计算框架MapReduce的工作流程 前言 MapReduce分布式运算 MapReduceApplication MapTask ReduceTask split ...

  5. 【Debug跟踪Hadoop3.0.0源码之MapReduce Job提交流程】第三节 Job提交前的初始化

    [Debug跟踪Hadoop3.0.0源码之MapReduce Job提交流程]第三节 Job提交前的初始化 回顾 Job提交前的初始化 后记 跳转 回顾 上一节中我们对 jobSubmitter(提 ...

  6. MapReduce之Map join操作

    MapReduce之Map join操作(分布式缓存) 文章目录 MapReduce之Map join操作(分布式缓存) 案例结合 利用MapReduce中的setup方法与DistributedCa ...

  7. 运行wordcount的时候显示INFO mapreduce.Job: map 0% reduce 0%

    错误提示: [xiaoqiu@s150 /home/xiaoqiu]$ hadoop jar wordcounter.jar com.cr.wordcount.WordcountApp hdfs:// ...

  8. 使用sqoop将数据从hdfs中导入mysql时,卡在INFO mapreduce.Job: map 100% reduce 0%的解决办法

    最近在将hdfs中已经处理好的数据导入到mysql的时候遇到这么一个现象,当任务执行到 INFO mapreduce.Job: map 100% reduce 0% mapreduce任务卡在map1 ...

  9. 从源码的角度分析MapReduce的map-input流程

    前言 之前我们对MapReduce中Client提交Job作业的流程进行了源码分析(点击查看Client提交Job作业源码分析),今天我们来分析一下map-input阶段的源码. 源码位置 hadoo ...

最新文章

  1. 深度学习框架的评估与比较
  2. oracle查询之null值转化
  3. boost::lower_bound相关的测试程序
  4. 【期望DP】概率充电器(luogu 4284)
  5. 苹果如何分屏_刚刚,苹果证实,iPhone12 刘海没了!
  6. Realsense D435i 运行 Vins-fusion
  7. 如何使用Magit管理Git项目
  8. 全站仪和手机连接软件_全站仪各方面应用的原理、操作及计算,看这篇就对了...
  9. 《An Introduction to Ray Tracing》—— 3.3 Ray-Surface Intersections
  10. 将火狐浏览器视频播放倍速设置为3倍速及其以上
  11. 两电脑间传输文件|免费PC到PC文件传输软件
  12. CCNet: Criss-Cross Attention for Semantic Segmentation论文解读
  13. hdd硬盘与sas硬盘_什么是硬盘驱动器(HDD)?
  14. 触屏收银机市场现状及未来发展趋势
  15. 新浪微博与微信公众号开发总结
  16. 泰国将于5月1日全面开放,来曼谷骑行探索老城区
  17. Dell730xd服务器与IntelX520万兆网卡兼容性问题解决过程
  18. 使用Excel连接WINCC生成报表的实现方法
  19. 排序算法之归并排序 ( C语言版 )
  20. 云服务PaaS、SaaS、IaaS

热门文章

  1. 百度ueditor修改默认字体和大小
  2. Idea修改字体颜色
  3. 【CCCC】L2-023 图着色问题 (25分),,图的染色判定,遍历
  4. 【考研】2020,计算机,考研,划水复习帖
  5. ++递归 字符串全排列_一文看懂全排列算法
  6. c语言双精度型输出小数位数_4.1 C语言数据的输出
  7. p41_数据报与虚电路
  8. OpenGL基础36:天空盒
  9. OpenGL基础18:光照基础
  10. 数据库、数据库系统、数据库管理系统