路德威

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

今天又翻阅了hadoop的那篇google的GFS论文,想到一个问题,为什么MPI做了那么多年都没搞起来,而hadoop反而能搞起来呢?

并行计算,分布式计算,集群,学术界已经搞了几十年了,我研究生那会儿听杨广文老师的并行计算课程,OpenMP和MPI是两大技术流派,分别对应于SMP和cluster,那时候多核技术刚刚出来,本以为这正是并行计算扬眉吐气之时,何曾想到,这两个技术至今还是扶不起来,反倒是hadoop异军突起,遮天蔽日。

网上有一段文字,对此有精辟论述,我直接引用在此:

“1、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如果想转变为一个大数据平台,需要做那些变化呢,我想有以下几点:

第一、模仿HDFS,构建一个数据中间层,解决数据分发、数据可靠性等方面的问题,这个数据中间层未必是一个文件系统,像ETS一样的内存数据库系统也完全可以;

第二、实现进程随数据调度的功能,做到进程跟着数据走;

第三、进一步提升erlang的计算性能,包括文件读写性能、数值计算性能,等。

这方面DISCO的经验有一定借鉴意义,它也采用了一个名为DDFS的分布式文件系统,并利用Python来增强erlang的数值分析能力。

通观hadoop成长的历史,我的体会是,伟大的事业首先来源自理念,源自情怀,源自哲学层面的先进性,GFS那篇论文通篇没有一个字提及编程语言的选择,毛先生从韶山走上天安门未摸过枪炮,任先生带领某公司占据通信行业半壁江山也不懂电路,理念不对,根基不牢,大树长不起来。

然后,才是语言层面,我的体会是,没有十全十美的语言,各有各的缺点,只要能咬牙顶住,持续努力把功能做出来,这些底层的细节都会被鲜花、钞票和掌声掩盖,技术本来就是个工具,凑合能用就行了,反正大多数人啥都不懂。

 

posted on 2018-11-16 16:28  路德威  阅读(665)  评论(0)    收藏  举报