今天又翻阅了hadoop的那篇google的GFS论文,想到一个问题,为何MPI作了那么多年都没搞起来,而hadoop反而能搞起来呢?python
并行计算,分布式计算,集群,学术界已经搞了几十年了,我研究生那会儿听杨广文老师的并行计算课程,OpenMP和MPI是两大技术流派,分别对应于SMP和cluster,那时候多核技术刚刚出来,本觉得这正是并行计算扬眉吐气之时,何曾想到,这两个技术至今仍是扶不起来,反却是hadoop异军突起,遮天蔽日。程序员
网上有一段文字,对此有精辟论述,我直接引用在此:数据库
“一、Hadoop与MPI的主要区别体如今数据存储和数据处理在系统中位置不一样。MPI是计算与存储分离,Hadoop是计算向存储迁移。这一点体现出,hadoop系统中数据存储的位置更重要。MPI是一种基于消息传递机制的并行编程标准,它为程序设计者提供了丰富而方便的通讯函数,在程序设计上很是简单并且符合普通程序员的编程习惯。然而MPI有一个比较大的缺陷,即底层没有一个分布式的文件系统对其进行支持。在MPI中数据存储的节点和数据处理的节点每每是不一样的,通常在每次计算开始时MPI须要从数据存储节点读取须要处理的数据分配给各个计算节点,而后进行数据处理,即MPI的数据存储和数据处理是分离的。对于计算密集型的应用MPI能表现出良好的性能,但对于处理TB级数据的数据密集型应用,大量的数据在节点间进行交换,网络通讯时间将成为影响系统性能的重要因素,性能会大大下降。用“计算换通讯”也是MPI并行程序设计中的基本原则 。在Hadoop中有HDFS文件系统的支持,数据是分布式存储在各个节点的,计算时各节点读取存储在本身节点的数据进行处理,从而避免了大量数据在网络上的传输,实现“计算向存储的迁移”。这对处理TB级的海量数据有很大的优点。Hadoop从上层架构上看是一种典型的主从式结构,主从式的结构在MPI并行程序设计中也是一种重要的并行程序设计方法,主节点负责对整个系统的数据和工做进行管理和分发。而Hadoop与MPI最根本的区别在于,Hadoop有一个主从式的文件系统HDFS在底层支撑其Map/Reduce的数据处理功能。有了HDFS,Hadoop能够方便地实现“计算向数据存储位置的迁移”,从而大大提升了系统计算效率。主从式基础存储和主从式数据处理构成了Hadoop的基本架构模型。编程
2.MPI没法应对节点的失效。若是MPI在运行过程出现节点失效及网络通讯中断,则只有返回并退出,MPI没有提供一套机制处理节点失效后的备份处理方案问题,因此若是中途出现问题,全部的计算将从新开始,这是很是耗时的。Hadoop为应对服务器的失效,在数据备份上下了很大的功夫,数据块会造成多个副本存储在不一样的地方,通常会有3个副本,采用简单化的跨机架数据块存储,最大限度避免了数据丢失,数据的安全性获得了保证。”安全
引用自https://blog.csdn.net/qq_15457239/article/details/48824905(评:csdn的界面乱七八糟喧宾夺主,真心看不出这是一篇原创文章,同情做者)服务器
我想在上述观点基础之上再谈谈本身的想法,网络
第一,MPI解决了节点间通讯问题,但对分布式计算而言,这还不够,远远不够,搞开发仍然很痛苦。Hadoop经过增长一个分布式数据层(HDFS),解决了数据分发问题,解决了节点可靠性问题,而后又解决了任务调度问题,这样普通人才够得着分布式计算的门槛;架构
第二,MPI萌生自数值计算领域,追求性能,C++曲高和寡。hadoop引入了JAVA,虽然牺牲了一些效率,但从总体上下降了系统实现的难度;(评:用C++的系统基本都是死路一条)。编程语言
谈到MPI,我又想到本身熟悉且钟爱的erlang,为何erlang这样一门天生具有分布式基因的语言没有在大数据领域占有一席之地呢?NOKIA曾经基于erlang和python搞了一个DISCO项目,无疾而终。erlang若是想转变为一个大数据平台,须要作那些变化呢,我想有如下几点:分布式
第1、模仿HDFS,构建一个数据中间层,解决数据分发、数据可靠性等方面的问题,这个数据中间层未必是一个文件系统,像ETS同样的内存数据库系统也彻底能够;
第2、实现进程随数据调度的功能,作到进程跟着数据走;
第3、进一步提高erlang的计算性能,包括文件读写性能、数值计算性能,等。
这方面DISCO的经验有必定借鉴意义,它也采用了一个名为DDFS的分布式文件系统,并利用Python来加强erlang的数值分析能力。
通观hadoop成长的历史,个人体会是,伟大的事业首先来源自理念,源自情怀,源自哲学层面的先进性,GFS那篇论文通篇没有一个字说起编程语言的选择,毛先生从韶山走上天安门未摸过枪炮,任先生带领某公司占据通讯行业半壁江山也不懂电路,理念不对,根基不牢,大树长不起来。
而后,才是语言层面,个人体会是,没有十全十美的语言,各有各的缺点,只要能咬牙顶住,持续努力把功能作出来,这些底层的细节都会被鲜花、钞票和掌声掩盖,技术原本就是个工具,凑合能用就好了,反正大多数人啥都不懂。