我什么时候使用谷歌的MapReduce。



我最近偶然发现了谷歌的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是合适的。

相关内容

  • 没有找到相关文章

最新更新