MapReduce的map流程
看了许久的代码,把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流程相关推荐
- 从源码角度分析MapReduce的reduce流程
文章目录 前言 流程图 Reduce都干了哪些事? 源码分析 1.run方法 1.1 比较器getOutputValueGroupingComparator 1.1.1 getOutputKeyCom ...
- 从源码角度分析MapReduce的map-output流程
文章目录 前言 流程图 源码分析 1 runNewMapper方法 2.NewOutputCollector方法 2.1 createSortingCollector方法 2.1.1 collecto ...
- 什么是MapReduce,MapReduce的工作流程和原理是什么
一.MapReduce的概念 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",和它 ...
- 【大数据入门笔记系列】第六节 分布式计算框架MapReduce的工作流程
[大数据入门笔记系列]第六节 分布式计算框架MapReduce的工作流程 前言 MapReduce分布式运算 MapReduceApplication MapTask ReduceTask split ...
- 【Debug跟踪Hadoop3.0.0源码之MapReduce Job提交流程】第三节 Job提交前的初始化
[Debug跟踪Hadoop3.0.0源码之MapReduce Job提交流程]第三节 Job提交前的初始化 回顾 Job提交前的初始化 后记 跳转 回顾 上一节中我们对 jobSubmitter(提 ...
- MapReduce之Map join操作
MapReduce之Map join操作(分布式缓存) 文章目录 MapReduce之Map join操作(分布式缓存) 案例结合 利用MapReduce中的setup方法与DistributedCa ...
- 运行wordcount的时候显示INFO mapreduce.Job: map 0% reduce 0%
错误提示: [xiaoqiu@s150 /home/xiaoqiu]$ hadoop jar wordcounter.jar com.cr.wordcount.WordcountApp hdfs:// ...
- 使用sqoop将数据从hdfs中导入mysql时,卡在INFO mapreduce.Job: map 100% reduce 0%的解决办法
最近在将hdfs中已经处理好的数据导入到mysql的时候遇到这么一个现象,当任务执行到 INFO mapreduce.Job: map 100% reduce 0% mapreduce任务卡在map1 ...
- 从源码的角度分析MapReduce的map-input流程
前言 之前我们对MapReduce中Client提交Job作业的流程进行了源码分析(点击查看Client提交Job作业源码分析),今天我们来分析一下map-input阶段的源码. 源码位置 hadoo ...
最新文章
- 深度学习框架的评估与比较
- oracle查询之null值转化
- boost::lower_bound相关的测试程序
- 【期望DP】概率充电器(luogu 4284)
- 苹果如何分屏_刚刚,苹果证实,iPhone12 刘海没了!
- Realsense D435i 运行 Vins-fusion
- 如何使用Magit管理Git项目
- 全站仪和手机连接软件_全站仪各方面应用的原理、操作及计算,看这篇就对了...
- 《An Introduction to Ray Tracing》—— 3.3 Ray-Surface Intersections
- 将火狐浏览器视频播放倍速设置为3倍速及其以上
- 两电脑间传输文件|免费PC到PC文件传输软件
- CCNet: Criss-Cross Attention for Semantic Segmentation论文解读
- hdd硬盘与sas硬盘_什么是硬盘驱动器(HDD)?
- 触屏收银机市场现状及未来发展趋势
- 新浪微博与微信公众号开发总结
- 泰国将于5月1日全面开放,来曼谷骑行探索老城区
- Dell730xd服务器与IntelX520万兆网卡兼容性问题解决过程
- 使用Excel连接WINCC生成报表的实现方法
- 排序算法之归并排序 ( C语言版 )
- 云服务PaaS、SaaS、IaaS