Hadoop MapReduce简介
本节首先简单介绍大数据批处理概念,然后介绍典型的批处理模式 MapReduce,最后对 Map 函数和 Reduce 函数进行描述。
批处理模式
批处理模式是一种最早进行大规模数据处理的模式。批处理主要操作大规模静态数据集,并在整体数据处理完毕后返回结果。批处理非常适合需要访问整个数据集合才能完成的计算工作。

例如,在计算总数和平均数时,必须将数据集作为一个整体加以处理,而不能将其视作多条记录的集合。这些操作要求在计算进行过程中数据维持自己的状态。

需要处理大量数据的任务通常最适合用批处理模式进行处理,批处理系统在设计过程中就充分考虑了数据的量,可提供充足的处理资源。

由于批处理在应对大量持久数据方面的表现极为出,因此经常被用于对历史数据进行分析。


为了提高处理效率,对大规模数据集进行批处理需要借助分布式并行程序。

传统的程序基本是以单指令、单数据流的方式按顺序执行的。这种程序开发起来比较简单,符合人们的思维习惯,但是性能会受到单台计算机的性能的限制,很难在给定的时间内完成任务。

而分布式并行程序运行在大量计算机组成的集上,可以同时利用多台计算机并发完成同一个数据处理任务,提高了处理效率,同时,可以通过增加新的计算机扩充集的计算能力。

Google 最先实现了分布式并行处理模式 MapReduce,并于 2004 年以论文的方式对外公布了其工作原理,Hadoop MapReduce 是它的开源实现。Hadoop MapReduce 运行在 HDFS 上。
MapReduce 简释
如图 1 所示,如果我们想知道相当厚的一摞牌中有多少张红桃,最直观的方式就是一张张检查这些牌,并且数出有多少张是红桃。这种方法的缺陷是速度太慢,特别是在牌的数量特别高的情况下,获取结果的时间会很长。

图 1  出有多少张红桃
MapReduce 方法的规则如下。
把这摞牌分配给在座的所有玩家。
让每个玩家数自己手中的牌中有几张是红桃,然后把这个数目汇报上来。
把所有玩家汇报的数字加起来,得到最后的结论。

显而易见,MapReduce 方法通过让所有玩家同时并行检查牌来出一摞牌中有多少红桃,可以大大加快得到答案的速度。

MapReduce 方法使用了拆分的思想,合并了两种经典函数。

1)映射(Map)

对集合中的每个元素进行同一个操作。如果想把表单里每个单元格乘以二,那么把这个函数
单独地应用在每个单元格上的操作就属于映射(Map)。

2)化简(Reduce)

遍历集合中的元素来返回一个综合的结果。如果想出表单里所有数字的总和,那么输出表单里一列数字的总和的任务就属于化简(Reduce)。

mapreduce是什么意思下面使用 MapReduce 数据分析的基本方法来重新审视前面分散纸牌出红桃总数的例子。在这个例子里,玩家代表计算机,因为他们同时工作,所以他们是个集。

把牌分给多个玩家并且让他们各自数数,就是在并行执行运算,此时每个玩家都在同时计数。这就把这项工作变成了分布式的,因为多个不同的人在解决同一个问题的过程中并不需要知道他们的邻居在干什么。

告诉每个人去数数,实际上就是对一项检查每张牌的任务进行了映射。不是让玩家把红桃牌
递回来,而是让他们把想要的东西化简为一个数字。

需要注意的是牌分配得是否均匀。如果某个玩家分到的牌远多于其他玩家,那么他数牌的过程可能比其他人要慢很多,从而会影响整个数牌的进度。

进一步还可以问一些更有趣的问题,例如,“一摞牌的平均值是什么?”。我们可以通过合并“所有牌的值的和是什么?”及“我们有多少张牌?”这两个问题来得到答案。用这个“和”除以“牌的张数”就得到了平均值。

MapReduce 算法的机制要远比数牌复杂得多,但是主体思想是一致的,即通过分散计算来分析大量数据。无论是 Google、百度、腾讯、NASA,还是小创业公司,MapReduce 都是目前分析互联网级别数据的主流方法。