我最近偶然发现了谷歌的MapReduce。
我已经阅读了两次描述/文档,但我仍然无法理解它到底是什么,或者何时使用它。
谢谢。
Google App Engine为您提供了一个API(java和python(,用于在App Engine上运行MapReduce Jobs。虽然您无法查看所有源代码(调度程序、作业跟踪器、任务跟踪器等模块(,但您可以查看 API 的源代码(包括映射器、化简器、分区器等(。GAE 还为您提供了一个软件开发工具包 (SDK(,您可以在其上测试您的应用程序。对应用的性能感到满意后,您可以将其上传到 GAE,任何人都可以访问它。
我做了一个这样的应用程序,它在 shaileshmapreduce.appspot.com 找到。它不会让你运行MapReduce作业,因为我必须将你的gmail id添加到用户列表中,但你可以查看界面和所有内容。
你也可以试试他们的MapReduce演示 https://developers.google.com/appengine/docs/python/dataprocessing/helloworld
当然,你需要确保你的机器上安装了SDK和所需的MapReduce库。
以下是对map reduce的一个很好的解释:
http://www.joelonsoftware.com/items/2006/08/01.html
简短回答:
当您希望具有数据并行性时。
解释:
当您有一些需要多个 CPU 的繁重计算时,应该使用映射归约框架。在mapreify中,任务首先被划分为独立的块。然后单独计算这些块。计算完所有块后,结果将合并以给出最终输出。一个常见的例子是机器学习。许多用于计算系数向量的计算可以单独执行,然后将结果组合在一起。简而言之,如果你有多个 CPU,那么只考虑使用 map reduce,否则就没有意义了。
请允许我引用维基百科:
MapReduce是一个框架,用于使用大量计算机(节点(处理大型数据集中高度可分发的问题,统称为集群或网格。计算处理可以对存储在文件系统(非结构化(或数据库(结构化(中的数据进行。
这个问题已经得到了很好的回答,但我想我会添加一些东西。在我看来,问题的症结在于map-reduce本身是不被理解的。Google map-reduce只是一种实现。还有Hadoop和各种各样的东西。以下是map-reduce的helloworld的概要:
假设你有一本书,你想计算每个单词的字数。这是一种方法:
word_dict = {}
for line in book_file_handler:
for word in line.split():
word_dict[word] = word_dict.get(word,0)+1
这有点过于简化,因为标点符号,但又如何。
所以这段代码有效。如果您想通过使用闪亮的集群使其运行得非常快怎么办?将书的一部分发送到参与计算的每台计算机,让每台计算机计算一些单词,然后组合结果,那就太好了。这是可能的,因为书中的每一行都独立于其他每一行。这就是map-reduce的用途:
如果您的算法需要对许多独立对象执行相同的操作,以便操作的结果不依赖于任何其他对象的结果,则map-reduce是合适的。