本节书摘来异步社区《MapReduce 2.0源码分析与编程实战》一书中的第1章,第1.4节,作者: 王晓华 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.4 MapReduce与Hadoop
如果将Hadoop比作一头大象的话,那么MapReduce就是那头大象的大脑。MapReduce是Hadoop核心编程模型。在Hadoop中,数据处理核心为MapReduce程序设计模型。MapReduce把数据处理和分析分成两个主要阶段,即Map阶段和Reduce阶段。Map阶段主要是对输入进行整合,通过定义的输入格式获取文件信息和类型,并且确定读取方式,最终将读取的内容以键值对的形式保存。而Reduce是用来对结果进行后续处理,通过对Map获取内容中的值进行二次处理和归并排序从而计算出最终结果。MapReduce的处理过程,如图1-1所示。
在MapReduce处理过程中,首先对数据进行分块处理,之后将数据信息交给Map任务去进行读取,对数据进行分类后写入,根据不同的键产生相应的键值对数据。之后进入Reduce阶段,而Reduce的任务是执行定义的Reduce方法。具有相同键的值从多个数据表中被集合在一起进行分类处理,并将最终结果输出到相应的磁盘空间中。
小提示:
MapReduce是Hadoop的核心处理程序,也是奇迹发生的地方。MapReduce是在Hadoop简单应用基础上产生的一种简洁并行计算模型,其在系统层面上满足了存储空间的扩展性、一致性及容错性等要求。程序设计人员编写的自定义的MapReduce处理程序可以方便地在大规模集成数据库上执行,从而可以做到对大规模数据的分析应用。
MapReduce使用和借鉴了函数方式程序设计语言的设计思想。其过程的实现是首先 通过指定一个Map方法,将传递进来的数据通过键值对的形式进行映射,从而形成一个 新的键值对供后续处理。Reduce作为一个约束方法,将具有相同键的值作为一个集合合并在一起。
MapReduce作为Hadoop的核心处理程序,在诞生之初就为了处理大数据而采用了“分治式”的数据处理模式,将数据分散到各个节点中进行相应的处理。一般情况下,每个节点会就近读取本地存储的数据,进行相应的合并和排序后发送给Reduce进行下一步处理。这个过程可以依据要求具体编写,好处是避免了大数据处理框架所要求进行的大规模数据传输,从而节省了时间,提高了处理效率。
MapReduce程序是由Java语言编写的,而Java语言本身的特点就是可移植性强。“一次编写,到处运行”是Java的特点。因此,MapReduce继承了这个特点,具有很强的定制性。MapReduce的程序中会有很多的算法和设计模式,都是很直观和固定的,不会因为所要处理对象和内容的不同具有太多的变化。同时,MapReduce作为通用的Hadoop处理核心,需要面对的问题一定是千差万别的。因此,MapReduce使用面向对象的程序设计模式抽出了这些数据内容的一些公共部分进行总结和程序设计。
和Java语言本身又带有极强的扩展性和应用性一样,MapReduce也具有较好的程序扩展机制,能够满足程序设计人员定义各种各样所需要的算法和程序。
MapReduce是Hadoop的核心内容,也是这头“大象”的大脑。MapReduce指挥着“大象”的前进方向和步伐,从而能够对Hadoop数据处理提供最大限度地支持。