我正在进行并行编程,我正在研究mapreduce和其他分布式算法。最好只学习mapreduce还是有更通用的算法可以更好地为我服务?
答案 0 :(得分:4)
这取决于你打算使用什么算法。
MapReduce是一个通用且非常有用的编程模型。 (谷歌基于它的许多内部索引流程)。学习它肯定不会对你造成伤害。
MapReduce是一种编程模型 一个相关的实现 处理和生成大数据 集。用户指定地图功能 处理键/值对 生成一组中间体 键/值对和reduce函数 合并所有中间值 与相同的中间体相关联 键。许多现实世界的任务都是 在这个模型中可以表达,如图所示 论文。
要学习的最重要的并行处理概念非常简单:如果要获得有效的加速,同步就是您需要最小化的。
争取:
答案 1 :(得分:2)
如果您想了解有关并行处理的内容,我不认为选择单一算法会为您提供重要的见解。
Mapreduce是map
和reduce
操作的组合。这些是函数式语言提供的典型高阶函数。
我建议先学习一种函数式语言,例如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等基础知识是很好的。