MapReduce只是对另一种编程原理的概括吗?

时间:2010-03-09 08:12:05

标签: algorithm mapreduce

我正在进行并行编程,我正在研究mapreduce和其他分布式算法。最好只学习mapreduce还是有更通用的算法可以更好地为我服务?

4 个答案:

答案 0 :(得分:4)

这取决于你打算使用什么算法。

MapReduce是一个通用且非常有用的编程模型。 (谷歌基于它的许多内部索引流程)。学习它肯定不会对你造成伤害。

  

MapReduce是一种编程模型   一个相关的实现   处理和生成大数据   集。用户指定地图功能   处理键/值对   生成一组中间体   键/值对和reduce函数   合并所有中间值   与相同的中间体相关联   键。许多现实世界的任务都是   在这个模型中可以表达,如图所示   论文。

要学习的最重要的并行处理概念非常简单:如果要获得有效的加速,同步就是您需要最小化的。

争取:

  • 大粒度的工作块
  • 保持大小工作块大小相似
  • 最小化同步步骤数

答案 1 :(得分:2)

如果您想了解有关并行处理的内容,我不认为选择单一算法会为您提供重要的见解。

Mapreduce是mapreduce操作的组合。这些是函数式语言提供的典型高阶函数。

我建议先学习一种函数式语言,例如Scheme或Clojure。对于Scheme来说,“计算机程序的结构和解释”似乎风靡一时。

答案 2 :(得分:2)

对于许多“常规”串行算法,有并行版本,其中一些可以使用MapReduce建模。当然学习MapReduce,因为它是新的和令人兴奋的,但它只是你工具箱中的另一个工具,你当然可以学到更多,因为MapReduce有局限性(你会了解它们)。

答案 3 :(得分:1)

要真正了解并行编程,您应该学习几种并行编程模型,而不仅仅是一个并行编程框架。您应该研究共享内存(例如pthreads)和消息传递(例如MPI和MapReduce)并行编程方法。

MPI是一种用于创建消息传递应用程序的通用工具。如果您广泛使用MPI,您会发现MPI程序的某些元素反复出现,例如设置一个“主”进程,将工作分区为“工作”进程,并聚合结果。 MapReduce是消息传递框架的特定实现,并提供比MPI更简单的编程模型。它负责在并行应用程序中频繁出现的代码,更重要的是,它处理故障恢复和数据位置等问题。开源Hadoop试图模仿MapReduce。

我认为通过编写自己的几个MPI程序,您将能够更好地理解MapReduce的功能以及如何实现它。学习Hadoop并不会有什么坏处,但是当谈到并行编程的一般知识时,熟悉pthreads,OpenMP和MPI等基础知识是很好的。