Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcp 为什么不是';Hadoop是用MPI实现的吗?_Tcp_Hadoop_Protocol Buffers_Mpi_Distributed Computing - Fatal编程技术网

Tcp 为什么不是';Hadoop是用MPI实现的吗?

Tcp 为什么不是';Hadoop是用MPI实现的吗?,tcp,hadoop,protocol-buffers,mpi,distributed-computing,Tcp,Hadoop,Protocol Buffers,Mpi,Distributed Computing,如果我错了,请纠正我,但我的理解是Hadoop不使用MPI在不同节点之间进行通信 技术原因是什么 我可以大胆地猜测一下,但我对MPI是如何“在引擎盖下”实现的了解还不够,不知道我是否正确 想想看,我也不完全熟悉Hadoop的内部结构。我在概念层面上理解这个框架(map/combine/shuffle/reduce以及它在高层次上是如何工作的),但我不知道具体的实现细节。我一直认为Hadoop是通过TCP连接传输序列化数据结构的(可能),例如在洗牌阶段。如果不是这样,请告诉我。Hadoop/map

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

技术原因是什么

我可以大胆地猜测一下,但我对MPI是如何“在引擎盖下”实现的了解还不够,不知道我是否正确


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

Hadoop/map reduce的一个重要功能是容错。大多数(任何?)当前MPI实现都不支持容错。目前正在考虑未来版本的

有一个使用MPI的map reduce版本,但它缺乏容错性。

在MapReduce 2.0(MRv2)中,或纱线应用程序可以在纱线上写入(或移植运行)

因此,本质上会有下一代ApacheHadoopMapReduce(MapReduce-279)和一种支持多种编程范例的方法。因此可以在纱线上编写MPI应用程序。MapReduce编程范例将始终作为默认支持


应该了解所有应用程序都是在什么基础上开发的,包括开放式MPI。

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

使用Hadoop分布式文件系统的MapReduce可以复制数据,以便您可以在本地存储中进行计算—从磁盘流式传输到处理器。因此,MapReduce在处理大数据时利用本地存储来避免网络瓶颈

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


总而言之:Hadoop(以及之前Google的东西)没有使用MPI,因为它不可能使用MPI并工作。MapReduce系统是根据硬件的发展趋势专门针对MPI的缺点而开发的:磁盘容量爆炸(以及随之产生的数据)、磁盘速度停滞、网络速度缓慢、处理器千兆赫兹峰值、多核取代摩尔定律。

事实上,Hadoop可以使用MPI实现。自从MPI出现以来,MapReduce就一直通过MPI使用。MPI具有“bcast”-广播所有数据、“alltoall”-将所有数据发送到所有节点、“reduce”和“allreduce”等功能。Hadoop通过将传出的通信命令打包为reduce命令,消除了显式实现数据分发和收集结果方法的要求。好处是,在实现Hadoop之前,您需要确保您的问题符合“reduce”函数。可能是您的问题是更适合“分散”/“聚集”,您应该将Torque/MAUI/SGE与MPI结合使用,而不是使用Hadoop。最后,MPI不会像另一篇文章中所描述的那样将数据写入磁盘,除非您按照receive方法写入磁盘。它的工作原理与Hadoop相同,它将您的进程/数据发送到其他地方来完成工作。重要的是要足够详细地了解您的问题,以确保MapReduce是最有效的并行化策略,并且要知道还有许多其他策略。

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

也许hadoop没有使用MPI,因为MPI通常需要用C或Fortran进行编码,并且具有更科学/学术的开发人员文化,而hadoop似乎更受IT专业人员的驱动,他们对Java有着强烈的偏见。MPI的级别非常低,并且容易出错。它允许非常有效地使用硬件、RAM和网络。Hadoop试图保持高水平和健壮性,但会降低效率。MPI编程需要纪律性和谨慎性,以便于移植,并且仍然需要从每个平台上的源代码进行编译。Hadoop具有高度的可移植性,易于安装,并且允许非常快速和肮脏的应用程序开发。这是一个不同的范围


尽管如此,在hadoop大肆宣传之后,可能会有更多资源效率更高的替代方案,可能是基于MPI的。

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

那么,您是说原因不是MPI范式本身固有的,只是当前的实现?因此,目前看来,损坏的网络消息或变化无常的节点可能会导致MPI系统崩溃。假设这两个因素都被去除了。有什么理由不实现Hadoop吗