4

我最近偶然发现了 Google 的MapReduce

我已经阅读了两次描述/文档,但我仍然无法理解它到底是什么,或者何时使用它。

非常感谢。

4

5 回答 5

4

简短的回答:

当您希望具有数据并行性时。

解释:

当您有一些需要多个 CPU 的繁重计算时,应该使用 Map reduce 框架。在 map reduce 中,首先将任务分成独立的块。然后分别计算这些块。一旦所有的块都被计算出来,结果就会结合起来给出最终的输出。一个常见的例子是机器学习。许多用于计算系数向量的计算可以单独执行,然后可以将结果合并在一起。简而言之,如果您有多个 CPU,则只考虑使用 map reduce,否则没有意义。

于 2012-04-28T15:59:48.033 回答
4

这是对 map reduce 的一个很好的解释:

http://www.joelonsoftware.com/items/2006/08/01.html

于 2012-04-28T15:15:58.103 回答
4

Google App Engine 为您提供了一个 API(java 和 python),用于在其 App Engine 上运行 MapReduce 作业。虽然您无法查看所有源代码(调度程序、作业跟踪器、任务跟踪器等模块),但您可以查看 API 的源代码(包括映射器、减速器、分区器等)。GAE 还为您提供了一个软件开发工具包 (SDK),您可以在该工具包上测试您的应用程序。在您对应用程序的性能感到满意后,您可以将其上传到 GAE,任何人都可以访问它。

我制作了一个这样的应用程序,它可以在shaileshmapreduce.appspot.com找到。它不会让您运行 MapReduce 作业,因为我必须将您的 gmail id 添加到用户列表中,但您可以查看界面和所有内容。

您还可以尝试他们的 MapReduce 演示https://developers.google.com/appengine/docs/python/dataprocessing/helloworld

当然,您需要确保在您的机器上安装了 SDK 和所需的 MapReduce 库。

于 2012-04-28T15:17:34.543 回答
3

请允许我引用维基百科

MapReduce 是一个框架,用于使用大量计算机(节点)在巨大的数据集中处理高度可分布的问题,统称为集群或网格。计算处理可以对存储在文件系统(非结构化)或数据库(结构化)中的数据进行。

于 2012-04-28T15:12:16.603 回答
0

这个问题已经得到了很好的回答,但我想我会添加一些东西。在我看来,问题的关键在于 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 是合适的。

于 2016-01-11T05:58:06.250 回答