亂評 hadoop vs MPI vs erlang

今天又翻閱了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那篇論文通篇沒有一個字說起編程語言的選擇,毛先生從韶山走上天安門未摸過槍炮,任先生帶領某公司佔據通訊行業半壁江山也不懂電路,理念不對,根基不牢,大樹長不起來。

而後,纔是語言層面,個人體會是,沒有十全十美的語言,各有各的缺點,只要能咬牙頂住,持續努力把功能作出來,這些底層的細節都會被鮮花、鈔票和掌聲掩蓋,技術原本就是個工具,湊合能用就好了,反正大多數人啥都不懂。

相關文章
相關標籤/搜索