对MapReduce的一点理解
摘要
MapReduce是一个编程模型,和处理,产生大数据集的相关实现.用户指定一个map函数处理一个key/value对,从而产生中间的key/value对集.然后再指定一个reduce函数合并所有的具有相同中间key的中间value.下面将列举许多可以用这个模型来表示的现实世界的工作.
以这种方式写的程序能自动的在大规模的普通机器上实现并行化.这个运行时系统关心这些细节:分割输入数据,在机群上的调度,机器的错误处理,管理机器之间必要的通信.这样就可以让那些没有并行分布式处理系统经验的程序员利用大量分布式系统的资源.
我们的MapReduce实现运行在规模可以灵活调整的由普通机器组成的机群上,一个典型的MapReduce计算处理几千台机器上的以TB计算的数据.程序员发现这个系统非常好用:已经实现了数以百计的MapReduce程序,每天在Google的机群上都有1000多个MapReduce程序在执行.
MapReduce
初次接受到MapReduce,看了Google MapReduce 中文版,完全不知所云,对于它的概念或许连门道都没摸到,后来查阅资料,偶然间看到了娄岩的《大数据技术概论(从虚幻走向真实的数据世界》,书中写道:
这里是“MapReduce处理数据的两个核心阶段是Map(映射)和Reduce(化简)。简单来说,Map负责将数据打散,Reduce负责将数据进行聚集。”“,,,,,,我们利用MapReduce解决一个有趣的扑克牌问题,即统计54张扑克牌中有多少张黑桃,最直观的做法:自己在54张扑克牌中一张一张的数出有13张黑桃。而MapReduce的做法及步骤如下:
(1)给在座的所有牌友(比如4个人)尽可能的平均分配这54张牌;
(2)让每个牌友数自己手中的牌有几张是黑桃,比如老张是3张,老李是5张,老王是1张,老蒋是4张,然后每个牌友把黑桃的数目汇报给你;
(3)你把所有牌友的黑桃数目加起来,得到最后的结论—一共13张黑桃。
这个例子告诉我们,MapReduce的两个主要功能Map和Reduce。
(1)Map:把统计黑桃数目的任务分配给每个牌友分别计数。
(2)Reduce:每个牌友不需要把黑桃牌递给你,而是让他们把各自的黑桃数目告诉你。
本来还有一些迷糊,但看到这个形象的比喻,顿时头脑清晰了很多,总算明白了MapReduce的概念了,至于下面介绍的,一脸懵逼。不过我在网上还是找到了很多IT大佬的分析,至少不是那么不知所云了。
在我了解到的知识里,MapReduce是一个软件框架,一个抽象的模型,可以在其中编写一些软件,更重要的是擅长处理海量的数据,而且很可靠,主要是采用了分布式计算。MapReduce离不开分布式计算,所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。在上文说到过Map和Reduce作用。简单点来说,Map就是把收集来的数据打散,而Reduce就是把打散的数据中得到所需要的结果进行汇总。
至于Google MapReduce一文中的编程模型,,原文所说,,,
MapReduce 编程模型的原理是:利用一个输入 key/value pair 集合来产生一个输出的 key/value pair 集合。MapReduce 库的用户用两个函数表达这个计算:Map 和 Reduce。 用户自定义的 Map 函数接受一个输入的 key/value pair 值,然后产生一个中间 key/value pair 值的集合。MapReduce 库把所有具有相同中间 key 值 I 的中间 value 值集合在一起后传递给 reduce 函数。 用户自定义的 Reduce 函数接受一个中间 key 的值 I 和相关的一个 value 值的集合。Reduce 函数合并这些value 值,形成一个较小的 value 值的集合。一般的,每次 Reduce 函数调用只产生 0 或 1 个输出 value 值。通常我们通过一个迭代器把中间 value 值提供给 Reduce 函数,这样我们就可以处理无法全部放入内存中的大量的 value 值的集合。
好像就是这么一回事,,,,不是现在我能理解的。想更详细地了解认识MapReduce可以看看链接。
MapReduce更详细的介绍
其他的我还没有理解,,,更别说再介绍了,,,
结语
MapReduce编程模型已经在Google成功的用在不同的目的.我总结了一下,首先,MapReduce进行了封装处理,,使得其数据库易于使用;其次,它的应用很广泛;最后,Google 实现了在数千个计算机集群上部署运行MapReduce。种种原因让Google成功了。