我是并行计算的新手,刚刚开始在Amazon AWS上尝试MPI和Hadoop + MapReduce。但是我对何时使用一个而不是另一个感到困惑。
例如,我看到的一个常见的经验法则建议可以概括为......
- 大数据,非迭代,容错=>MapReduce
- 速度,小数据,迭代,非映射器-化简器类型 => MPI
但是,我也看到了MapReduce在MPI(MR-MPI)上的实现,它不提供容错能力,但在某些基准测试上似乎比Hadoop上的MapReduce更有效,并且似乎使用核心外内存处理大数据。
相反,在新一代Hadoop Yarn及其分布式文件系统(HDFS)上也有MPI实现(MPICH2-YARN)。
此外,MPI(Scatter-Gather,Checkpoint-Restart,ULFM和其他容错)中似乎有一些条款模仿了MapReduce范式的几个功能。
Mahout,Mesos和Spark如何适应这一切?
在Hadoop MapReduce,MPI,Mesos,Spark和Mahout之间(或组合)之间做出决定时可以使用哪些标准?
这个决定可能有很好的技术标准,但我还没有看到任何关于它的文章。 似乎存在一种文化鸿沟,人们认为MapReduce用于筛选企业环境中的数据,而科学工作负载使用MPI。 这可能是由于这些工作负载对网络性能的潜在敏感性。 以下是有关如何找出答案的一些想法:
许多现代 MPI 实现可以在多个网络上运行,但针对 Infiniband 进行了大量优化。 MapReduce的规范用例似乎是通过以太网连接的"白盒"商品系统集群。 快速搜索"MapReduce Infiniband"会发现 http://dl.acm.org/citation.cfm?id=2511027 这表明在MapReduce环境中使用Infiniband是一个相对较新的事情。
那么,为什么要在一个针对Infiniband高度优化的系统上运行呢? 它比以太网贵得多,但具有更高的带宽,更低的延迟,并且在网络争用频繁的情况下可以更好地扩展(参考: http://www.hpcadvisorycouncil.com/pdf/IB_and_10GigE_in_HPC.pdf)。
如果你有一个应用程序对Infiniband优化的影响很敏感,这些效果已经融入了许多MPI库,也许这对你很有用。 如果你的应用对网络性能相对不敏感,并且花费更多时间在不需要进程之间通信的计算上,也许MapReduce是更好的选择。
如果您有机会运行基准测试,则可以对可用的任何系统进行预测,以查看网络性能的改进会有多大帮助。 尝试限制您的网络:例如,将GigE降频到100mbit或Infiniband QDR到DDR,在结果中画一条线,看看购买由MPI优化的更快的互连是否会让你到达你想去的地方。
您在MapReduce上发布的有关FEM的链接:链接
使用 MPI。它抽象地陈述了它。他们将MPI的编程模型(非并行)与HDFS相结合,以"暂存"数据以利用数据局部性。
Hadoop纯粹是为了令人尴尬的并行计算。任何需要进程以复杂方式组织自己和交换数据的东西都将在Hadoop中获得糟糕的性能。这既可以从算法复杂性的角度来证明,也可以从测量的角度来证明。