MapReduce执行过程
分析MapReduce执行过程
MapReduce运行的时候,会通过Mapper运行的任务读取HDFS中的数据文件,然后调用自己的方法,处理数据,最后输出。
Reducer任务会接收Mapper任务输出的数据,作为自己的输入数据,调用自己的方法,最后输出到HDFS的文件中。整个流程如图所示
Mapper任务的执行过程详解
每个Mapper任务是一个java进程,它会读取HDFS中的文件,解析成很多的键值对,经过我们覆盖的map方法处理后,转换为很多的键值对再输出。整个Mapper
任务的处理过程又可以分为以下几个阶段,如图所示
上图中,Mapper任务的运行过程分为六个阶段。
1.把输入文件按照一定的标准分片,每一个输入片由一个Mapper进程处理。
2.对输入片中的记录按照一定规律解析成键值对。健是每个行的起始位置,值是本行的文本内容
3.上阶段解析出来的每一个键值对,调用一次map()方法输出新的键值对
4.按照规则对第三阶段输出的键值对进行分区
5.对每个分区的键值进行排序,然后直接输出到本地linux文件中
Reducer任务的执行过程详解
每个Reducer任务是一个java进程。Reduce任务接收Mapper任务的输出,归纳处理后写入到HDFS中,分为如下图所示的几个阶段
1.Reduce任务主动从Mapper任务中复制其输出的键值对。
2.把复制下来的本地数据全部合并,即把分散的数据合并成一个大的数据。再对合并后的数据进行排序
3.对排序后的键值对调用Reduce方法。键相等的键值对调用一次Reduce方法,最后把输出的键值写入到HDFS文件中
键值对的编号
在对Mapper任务、Reduce任务的分析过程中,出现多次键值对,容易混淆
所以对键值对进行分别编号,方便大家理解键值对的变化情况,如下图所示
对于Mapper任务输入的键值对,定义为k1,v1
对于map方法处理后输出的键值对,定义为k2,v2
对于reduce方法接收k2,v2处理后输出的键值对,定义为k3,v3