1. 程式人生 > >Hadoop、MapReduce、YARN和Spark的區別與聯絡

Hadoop、MapReduce、YARN和Spark的區別與聯絡

(1) Hadoop 1.0

第一代Hadoop,由分散式儲存系統HDFS和分散式計算框架MapReduce組成,其中,HDFS由一個NameNode和多個DataNode組成,MapReduce由一個JobTracker和多個TaskTracker組成,對應Hadoop版本為Hadoop 1.x和0.21.X,0.22.x。

(2)  Hadoop 2.0

第二代Hadoop,為克服Hadoop 1.0中HDFS和MapReduce存在的各種問題而提出的。針對Hadoop 1.0中的單NameNode制約HDFS的擴充套件性問題,提出了HDFS Federation,它讓多個NameNode分管不同的目錄進而實現訪問隔離和橫向擴充套件;針對Hadoop 1.0中的MapReduce在擴充套件性和多框架支援方面的不足,提出了全新的資源管理框架YARN(Yet Another Resource Negotiator),它將JobTracker中的資源管理和作業控制功能分開,分別由元件ResourceManager和ApplicationMaster實現,其中,ResourceManager負責所有應用程式的資源分配,而ApplicationMaster僅負責管理一個應用程式。對應Hadoop版本為Hadoop 0.23.x和2.x。

(3) MapReduce 1.0或者MRv1(MapReduceversion 1)

第一代MapReduce計算框架,它由兩部分組成:程式設計模型(programming model)和執行時環境(runtime environment)。它的基本程式設計模型是將問題抽象成Map和Reduce兩個階段,其中Map階段將輸入資料解析成key/value,迭代呼叫map()函式處理後,再以key/value的形式輸出到本地目錄,而Reduce階段則將key相同的value進行規約處理,並將最終結果寫到HDFS上。它的執行時環境由兩類服務組成:JobTracker和TaskTracker,其中,JobTracker負責資源管理和所有作業的控制,而TaskTracker負責接收來自JobTracker的命令並執行它。

(4)MapReduce 2.0或者MRv2(MapReduce version 2)或者NextGen MapReduc

MapReduce 2.0或者MRv2具有與MRv1相同的程式設計模型,唯一不同的是執行時環境。MRv2是在MRv1基礎上經加工之後,運行於資源管理框架YARN之上的MRv1,它不再由JobTracker和TaskTracker組成,而是變為一個作業控制程序ApplicationMaster,且ApplicationMaster僅負責一個作業的管理,至於資源的管理,則由YARN完成。

簡而言之,MRv1是一個獨立的離線計算框架,而MRv2則是運行於YARN之上的MRv1。

Hadoop是google分散式計算框架MapReduce與分散式儲存系統GFS的開源實現,由分散式計算框架MapReduce和分散式儲存系統HDFS(Hadoop Distributed File System)組成,具有高容錯性,高擴充套件性和程式設計介面簡單等特點,現已被大部分網際網路公司採用。

YARN是Hadoop的一個子專案(與MapReduce並列),它實際上是一個資源統一管理系統,可以在上面執行各種計算框架(包括MapReduce、Spark、Storm、MPI等)。

當前Hadoop版本比較混亂,讓很多使用者不知所措。實際上,當前Hadoop只有兩個版本:Hadoop 1.0和Hadoop 2.0,其中,Hadoop 1.0由一個分散式檔案系統HDFS和一個離線計算框架MapReduce組成,而Hadoop 2.0則包含一個支援NameNode橫向擴充套件的HDFS,一個資源管理系統YARN和一個執行在YARN上的離線計算框架MapReduce。相比於Hadoop 1.0,Hadoop 2.0功能更加強大,且具有更好的擴充套件性、效能,並支援多種計算框架。

Borg/YARN/Mesos/Torca/Corona一類系統可以為公司構建一個內部的生態系統,所有應用程式和服務可以“和平而友好”地執行在該生態系統上。有了這類系統之後,你不必憂愁使用Hadoop的哪個版本,是Hadoop 0.20.2還是 Hadoop 1.0,你也不必為選擇何種計算模型而苦惱,因此各種軟體版本,各種計算模型可以一起執行在一臺“超級計算機”上了。

從開源角度看,YARN的提出,從一定程度上弱化了多計算框架的優劣之爭。YARN是在Hadoop MapReduce基礎上演化而來的,在MapReduce時代,很多人批評MapReduce不適合迭代計算和流失計算,於是出現了Spark和Storm等計算框架,而這些系統的開發者則在自己的網站上或者論文裡與MapReduce對比,鼓吹自己的系統多麼先進高效,而出現了YARN之後,則形勢變得明朗:MapReduce只是執行在YARN之上的一類應用程式抽象,Spark和Storm本質上也是,他們只是針對不同型別的應用開發的,沒有優劣之別,各有所長,合併共處,而且,今後所有計算框架的開發,不出意外的話,也應是在YARN之上。這樣,一個以YARN為底層資源管理平臺,多種計算框架運行於其上的生態系統誕生了。

目前spark是一個非常流行的記憶體計算(或者迭代式計算,DAG計算)框架,在MapReduce因效率低下而被廣為詬病的今天,spark的出現不禁讓大家眼前一亮。

從架構和應用角度上看,spark是一個僅包含計算邏輯的開發庫(儘管它提供個獨立執行的master/slave服務,但考慮到穩定後以及與其他型別作業的繼承性,通常不會被採用),而不包含任何資源管理和排程相關的實現,這使得spark可以靈活執行在目前比較主流的資源管理系統上,典型的代表是mesos和yarn,我們稱之為“spark on mesos”和“spark on yarn”。將spark執行在資源管理系統上將帶來非常多的收益,包括:與其他計算框架共享叢集資源;資源按需分配,進而提高叢集資源利用率等。

FrameWork On YARN

執行在YARN上的框架,包括MapReduce-On-YARN, Spark-On-YARN, Storm-On-YARN和Tez-On-YARN。

參考文獻

1 http://blog.csdn.net/gaoyanjie55

2 http://dongxicheng.org/recommend/