Hadoop实现了Google的MapReduce编程模型。MapReduce是一种分布式计算模型,也是Hadoop的核心。它是开源的,任何人都可以使用这个框架进行并行编程。基于这个模型,分布式并行程序的编写变得非常简单。
逻辑模型
MapReduce把运行在大规模集群上的并行计算过程抽象为两个函数:Map和Reduce, 也就是映射和化简。简单说,MapReduce就是“任务的分解与结果的汇总”。Map把任务分解成为多个任务,Reduce把分解后多任务处理的结果汇总起来,得到最终结果。
适合用MapReduce处理的任务有一个基本要求:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。
一个MapReduce操作分为两个阶段:映射阶段和化简阶段。
在映射阶段,MapReduce框架将用户输入的数据分割为M个片断,对应M个Map任务。每一个Map操作的输入是数据片断中的键值对<K1,V1>集合,Map操作调用用户定义的Map函数,输出一个中间态的键值对<K2,V2>集合。接着,按照中间态的K2将输出的数据集进行排序,并生成一个新的<K2,list(V2)>元组,这样可以使得对应同一个键的所有值的数据都在一起。然后,按照K2的范围将这些元组分割为R个片断,对应Reduce任务的数目。
在化简阶段,每一个Reduce操作的输入是一个<K2,list(V2)>片断,Reduce操作调用用户定义的Reduce函数,生成用户需要的键值对<K3,V3>进行输出。