MapReduce是一种编程模型,其基于“映射”与“归约”的思想,把一堆杂乱无章的数据按照某种特征归纳起来,然后处理并得到最后的结果。MapReduce编程思想是将用于解决一些大问题可以被分解为许多子问题的场景,且这些子问题相对独立,将这些子问题并行处理完后,大问题也就被解决。
MapReduce最早是由Google公司研究提出的一种面向大规模数据处理的并行计算模型和方法。Google公司设计MapReduce的初衷主要是为了解决其搜索引擎中大规模网页数据的并行化处理。2003年和2004年,Google公司在国际会议上分别发表了两篇关于Google分布式文件系统和MapReduce的论文,公布了Google的GFS和MapReduce的基本原理和主要设计思想。Google公司发明了MapReduce之后首先用其重新改写了其搜索引擎中的Web文档索引处理系统。但由于MapReduce可以普遍应用于很多大规模数据的计算问题,因此自发明MapReduce以后,Google公司内部进一步将其广泛应用于很多大规模数据处理问题。Google公司内有上万个各种不同的算法问题和程序都使用MapReduce进行处理。
MapReduce是面向大数据并行处理的计算模型、框架和平台,它隐含了以下三层含义:
- MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure)。它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群。
- MapReduce是一个并行计算与运行软件框架(Software Framework)。它提供了一个庞大但设计精良的并行计算软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,将数据分布存储、数据通信、容错处理等并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,大大减少了软件开发人员的负担。
- MapReduce是一个并行程序设计模型与方法(Programming Model & Methodology)。它借助于函数式程序设计语言Lisp的设计思想,提供了一种简便的并行程序设计方法,用Map和Reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,以简单方便地完成大规模数据的编程和计算处理。
MapReduce极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
MapReduce设计上具有以下主要的技术特征:
- 向“外”横向扩展,而非向“上”纵向扩展:MapReduce集群的构建完全选用价格便宜、易于扩展的低端商用服务器,而非价格昂贵、不易扩展的高端服务器。对于大规模数据处理,由于有大量数据存储需要,显而易见,基于低端服务器的集群远比基于高端服务器的集群优越,这就是为什么MapReduce并行计算集群会基于低端服务器实现的原因。
- 失效被认为是常态:MapReduce并行计算软件框架使用了多种有效的错误检测和恢复机制,如节点自动重 启技术,使集群和计算框架具有对付节点失效的健壮性,能有效处理失效节点的检测和恢复。
- 把处理向数据迁移:MapReduce采用了数据/代码互定位的技术方法,计算节点将首先尽量负责计算其本地存储的数据,以发挥数据本地化特点,仅当节点无法处理本地数据时,再采用就近原则寻找其他可用计算节点,并把数据传送到该可用计算节点。
- 顺序处理数据、避免随机访问数据:为了实现面向大数据集批处理的高吞吐量的并行处理,MapReduce可以利用集群中的大量数据存储节点同时访问数据,以此利用分布集群中大量节点上的磁盘集合提供高带宽的数据访问和传输。
- 为应用开发者隐藏系统层细节:MapReduce提供了一种抽象机制将程序员与系统层细节隔离开来,程序员仅需描述需要计算什么(What to compute),而具体怎么去计算(How to compute)就交由系统的执行框架处理,这样程序员可从系统层细节中解放出来,而致力于其应用本身计算问题的算法设计。
- 平滑无缝的可扩展性:MapReduce在很多情形下能实现以上理想的扩展性特征。
资料来源:
1.黄山,王波涛,王国仁,于戈,李佳佳.MapReduce优化技术综述[J].计算机科学与探索,2013,7(10):885-905.
2.MapReduce https://segmentfault.com/a/1190000016544942
3.Hadoop 新 MapReduce 框架 Yarn 详解 https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/
4.谷歌技术"三宝"之MapReduce https://blog.csdn.net/opennaive/article/details/7514146
5.What is MapReduce? https://www.ibm.com/analytics/hadoop/mapreduce
6.Hadoop – MapReduce https://www.tutorialspoint.com/hadoop/hadoop_mapreduce.html
7.What is MapReduce? https://intellipaat.com/blog/what-is-mapreduce/