据我所知,MPI让我能够更好地控制集群中不同节点的通信方式.
在MapReduce/Hadoop中,每个节点进行一些计算,与其他节点交换数据,然后整理其结果分区.看起来很简单,但由于您可以迭代这个过程,甚至像K-means或PageRank这样的算法也能很好地适应模型.在具有调度位置的分布式文件系统上,性能显然很好.相比之下,MPI让我可以明确控制节点如何相互发送消息.
任何人都可以描述一个集群编程场景,其中更通用的MPI模型比简单的MapReduce模型更明显吗?
几乎任何科学代码 - 有限差分,有限元等等.哪种类型导致循环答案,任何不容易映射到MapReduce的分布式程序都可以用更通用的MPI模型更好地实现.不确定这对你有多大帮助,我会在发布后直接回答这个问题.
虽然这个问题已得到解答,但我想补充/重申一个非常重要的观点.
MPI最适合需要大量进程间通信的问题.
当数据变大(PB,任何人?),并且几乎没有进程间通信时,MPI就变得很痛苦.这是因为进程将花费所有时间相互发送数据(带宽成为限制因素),并且您的CPU将保持空闲状态.也许更大的问题是阅读所有数据.
这是Hadoop之类的基本原因.数据也必须分发 - Hadoop分布式文件系统!
简而言之,MPI适用于任务并行,Hadoop适用于数据并行.