MapReduce:来自于Google的计算模式
MapReduce最早是由Google研究提出的一种面向大规模数据处理的并行计算模型和方法,其初衷主要是为了解决搜索引擎中大规模网页数据的并行化处理。由于MapReduce可以普遍应用于很多大规模数据的计算问题,Google进一步将其广泛应用于很多大规模数据处理问题。到目前为止,Google有上万个各种不同的算法问题和程序都使用MapReduce进行处理。
MapReduce的推出给大数据并行处理带来了巨大的革命性影响,使其已经成为事实上的大数据处理的工业标准。尽管MapReduce还有很多局限性,但普遍公认,MapReduce是到目前为止最为成功、最广为接受和最易于使用的大数据并行处理技术。
MapReduce的发展普及和带来的巨大影响远远超出了发明者和开源社区当初的意料,以至于马里兰大学教授、2010年出版的Data-Intensive Text Processing with MapReduce的作者Jimmy Lin在书中提出:
“MapReduce改变了我们组织大规模计算的方式,它代表了第一个有别于冯·诺依曼结构的计算模型,是在集群规模而非单个机器上组织大规模计算的新的抽象模型上的第一个重大突破,是到目前为止所见到的最为成功的基于大规模计算资源的计算模型”。
Google最初的MapReduce框架如下图所示,后来发展成了Hadoop的MapReduce框架。
在Google论文中提出的编程模型如下图,包括map和reduce两个过程,Hadoop的MapReduce框架完整地继承了Google的思想,无论是MR的组件、阶段还是编程时的类结构都一律全盘接收。
MapReduce示例程序WordCount过程
以Hadoop 2.7.3版本为例,MR所有示例在安装包的share/mapreduce目录下,名称为hadoop-mapreduce-examples-2.7.3.jar, 除了WordCount示例,其中还包括数据排序、二次排序、用户比赛的TeraSort和各种字符串处理程序,这些程序都是初学者学习MR的宝贵资料,但常常被忽略,实在可惜!从GitHub上可获取示例程序对应的源代码,细细研读体会,融会贯通,必有所得。
WordCount实现的示意图如下图所示,包括数据输入input、数据分片split、map、combine(相对于map端的reduce)、Shuffle&sort(混洗和排序,是由MR框架自动完成的)、reduce和输出ouput。
WordCount源码解析
package com.hikdata.utils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org<