为什么不使用MPI实现Hadoop?

时间:2011-01-04 04:34:55

标签: tcp hadoop protocol-buffers mpi distributed-computing

如果我错了,请纠正我,但我的理解是Hadoop不使用MPI进行不同节点之间的通信。

这有什么技术原因?

我可能会冒一些猜测,但我不知道MPI是如何在“引擎盖下”实施的,以了解我是否正确。

想想看,我对Hadoop的内部结构也不是很熟悉。我在概念层面理解框架(map / combine / shuffle / reduce以及它如何在高级别工作),但我不知道细节的实现细节。我一直认为Hadoop通过TCP连接传输序列化数据结构(可能是GPBs),例如在混洗阶段。如果不是这样,请告诉我。

6 个答案:

答案 0 :(得分:24)

Hadoop / map-reduce的一大特色是容错。大多数(任何?)当前MPI实现不支持容错。正在考虑OpenMPI的未来版本。

Sandia labs有一个使用MPI的map-reduce版本,但它缺乏容错能力。

答案 1 :(得分:18)

MPI是消息传递接口。就在名称中 - 没有数据位置。您将数据发送到另一个节点以进行计算。因此,在处理大数据时,MPI在性能方面受网络限制。

MapReduce与Hadoop分布式文件系统重复数据,以便您可以在本地存储中进行计算 - 从磁盘流式传输并直接进入处理器。因此,MapReduce利用本地存储来避免在处理大数据时出现网络瓶颈。

这并不是说MapReduce不使用网络......它确实:而且洗牌通常是工作中最慢的部分!但它尽可能少地使用它。

总结一下:Hadoop(以及谷歌之前的东西)没有使用MPI,因为它无法使用MPI而且工作正常。 MapReduce系统专门用于解决MPI在硬件趋势方面的缺点:磁盘容量爆炸(及其数据),磁盘速度停滞,网络速度慢,处理器千兆赫峰值,多核接管摩尔定律。

答案 2 :(得分:7)

事实是Hadoop可以使用MPI实现。只要MPI存在,MapReduce就已经通过MPI使用了。 MPI具有'bcast'等功能 - 广播所有数据,'alltoall' - 将所有数据发送到所有节点,'reduce'和'allreduce'。 Hadoop通过使用reduce命令打包传出通信命令,消除了显式实现数据分发和收集结果方法的要求。在实施Hadoop之前,您需要确保问题符合“减少”功能。这可能是你的问题更适合'scatter'/'gather',你应该使用Torque / MAUI / SGE与MPI而不是Hadoop。最后,MPI不会按照另一篇文章中的描述将您的数据写入磁盘,除非您使用写入磁盘的接收方法。它就像Hadoop一样,通过将您的进程/数据发送到其他地方来完成工作。重要的是要用足够的细节来理解你的问题,以确保MapReduce是最有效的并行化策略,并且要意识到存在许多其他策略。

答案 3 :(得分:3)

没有限制阻止MPI程序使用本地磁盘。当然,MPI程序总是尝试本地处理数据 - 在RAM或本地磁盘上 - 就像所有并行应用程序一样。在MPI 2.0(它不是未来的版本,已经存在了十年)中,可以动态地添加和删除进程,这使得可以实现可以从例如...恢复的应用程序。在某个节点上死亡的过程。

也许hadoop没有使用MPI,因为MPI通常需要在C或Fortran中编码,并且具有更科学/学术的开发人员文化,而hadoop似乎更多地受到具有强大Java偏见的IT专业人员的驱动。 MPI非常低级且容易出错。它可以非常有效地使用硬件,RAM和网络。 Hadoop试图成为高级别且强大的,并且效率降低。 MPI编程需要纪律和非常谨慎才能移植,并且仍然需要从每个平台上的源代码编译。 Hadoop具有高度的可移植性,易于安装,可以快速,简单地开发应用程序。它的范围不同。

尽管如此,或许也会有更多资源有效的替代方案,可能是基于MPI。

答案 4 :(得分:1)

在MapReduce 2.0(MRv2)或YARN应用程序中,可以在YARN上编写(或移植到运行)。

因此,基本上会有下一代Apache Hadoop MapReduce(MAPREDUCE-279)以及一种支持多种编程范例的方法。所以可以在YARN上编写MPI应用程序。总是默认支持MapReduce编程范例。

http://wiki.apache.org/hadoop/PoweredByYarn应该了解所有应用程序是在YARN之上开发的,包括Open MPI。

答案 5 :(得分:1)

如果我们只看一下Hadoop的Map / Reduce步骤和调度部分,那么我认为MPI是一种更好的方法/技术。 MPI支持许多不同的交换模式,如广播,屏障,全部收集,分散/收集(或称之为map-reduce)。但是Hadoop也有HDFS。这样,数据可以更接近处理节点。如果你看一下像Hadoop一样的问题空间技术,减少步骤的输出实际上相当大,你不希望所有的信息都淹没你的网络。这就是Hadoop将所有内容保存到磁盘的原因。但是控制消息可能已经使用了MPI,并且MPI消息可能只有指向磁盘上实际数据的指针(URL或文件句柄)......