Algorithm MapReduce只是另一种编程原则的推广吗?

Algorithm MapReduce只是另一种编程原则的推广吗?,algorithm,mapreduce,Algorithm,Mapreduce,我正在学习并行编程,我正在学习mapreduce和其他分布式算法。学习mapreduce最好还是有一种更通用的算法更好地为我服务?这取决于您打算使用该算法做什么 是一个通用且非常有用的编程模型。(谷歌的许多内部索引过程都基于此)。学习它当然不会对你有任何伤害 MapReduce是一种编程模型和 的关联实现 处理和生成大型数据 设置。用户指定映射函数 将密钥/值对处理为 生成一组中间值 键/值对和reduce函数 合并所有中间值的 与同一中间体有关 钥匙许多现实世界的任务是 可在此模型中表达,如中

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

这取决于您打算使用该算法做什么

是一个通用且非常有用的编程模型。(谷歌的许多内部索引过程都基于此)。学习它当然不会对你有任何伤害

MapReduce是一种编程模型和 的关联实现 处理和生成大型数据 设置。用户指定映射函数 将密钥/值对处理为 生成一组中间值 键/值对和reduce函数 合并所有中间值的 与同一中间体有关 钥匙许多现实世界的任务是 可在此模型中表达,如中所示 报纸

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

争取:

  • 工作块的大粒度
  • 保持工作块的大小相同
  • 尽量减少同步步骤的数量

如果你想了解并行处理的相关知识,我不相信选择一种算法能为你提供重要的见解

Mapreduce由
map
reduce
操作组成。这些是函数式语言提供的典型高阶函数


我建议首先学习函数式语言,例如Scheme或Clojure。对于Scheme,“计算机程序的结构和解释”似乎非常流行。

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

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

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


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

我想在很多方面使用该算法。只是我不是一个开发人员,所以我花了相当长的时间来学习mareduce,我想避免学习map reduce的情况,然后我发现我应该学习一些更一般的概念。我想我需要婴儿步:)@svante。谢谢你的建议。我猜这个并行编程比我最初想象的要复杂得多。我将检查您提到的方案mapreduce的功能实际上在于map和reduce阶段之间的内容,即,在将每个结果组馈送到reducer之前,按键对
map
的结果进行分组。现在,这是有意义的。我想,按键对结果进行分组是在每个本地节点上完成的?不,是通过分布式排序算法完成的。该算法的性能在很大程度上决定了mapreduce实现的性能。