目录
1.概述
MapReduce是一个用java编写的分布式的计算编程框架,其主要由三个组件构成,分别为Map、Reduce和负责调度前两者运行的Driver,这三者去共同处理一个从输入到输出(键值对)的计算过程。有时候我们为了优化MapReduce作业,会在Map和Reduce之间加上一个Combiner组件,下面给出MapReduce从输入到输出的一个流程模型。
由上图可以看到,从最原始的键值对输入到最后的键值对输出数据一共经历了四个阶段,分别由三个组件进行处理,下面分别来详细讨论map、reduce、combine在MapReduce框架中所扮演的角色及其工作原理。
2.Map
2.1 工作原理
map负责原始输入到中间输出的计算过程,所以map的主要工作是对原始输入数据进行提取,进行排序后(根据键的字典序)形成中间结果的键值对输出,并将中间结果传递给下一个组件(combine或者reduce)。
下面结合样本数据来讨论Map的工作原理:
假设有一个文本文件记录着某地区1949年和1950年的气温数据,每一行记录着年份信息和气温,我们需要计算1949年和1950年的最高气温。
首先map函数以键值对的形式接收文件中每一行的数据,key为每一行起始位置相对于文件起始位置的偏移量,value为每一行的具体数据。map函数将对value进行处理,提取出每一行中的年份信息和对应的气温值,组成键值对,假设提取出的数据为:
(1950,0)
(1950,22)
(1950,-11)
(1949,111)
(1949,78)
map函数将对上述键值对根据key的字典序进行排序后传递给下一个组件。