一、 兩者的各方面比較
二、Spark相對Hadoop的優越性
三、三大分布式計算系統
Spark,是分布式計算平台,是一個用scala語言編寫的計算框架,基於內存的快速、通用、可擴展的大數據分析引擎
Hadoop,是分布式管理、存儲、計算的生態系統;包括HDFS(存儲)、MapReduce(計算)、Yarn(資源調度)
一、實現原理的比較
Hadoop和Spark都是並行計算,兩者都是用MR模型進行計算
Hadoop一個作業稱為一個Job,Job里面分為Map Task和Reduce Task階段,每個Task都在自己的進程中運行,當Task結束時,進程也會隨之結束;
Spark用戶提交的任務稱為application,一個application對應一個SparkContext,app中存在多個job,每觸發一次action操作就會產生一個job。這些job可以並行或串行執行,每個job中有多個stage,stage是shuffle過程中DAGScheduler通過RDD之間的依賴關系划分job而來的,每個stage里面有多個task,組成taskset,由TaskScheduler分發到各個executor中執行;executor的生命周期是和app一樣的,即使沒有job運行也是存在的,所以task可以快速啟動讀取內存進行計算。
ps:一個Application -> 多個job ->一個job多個stage -> 一個stage多個task
二、 兩者的各方面比較
(1)Spark對標於Hadoop中的計算模塊MR,但是速度和效率比MR要快得多;
(2)Spark沒有提供文件管理系統,所以,它必須和其他的分布式文件系統進行集成才能運作,它只是一個計算分析框架,專門用來對分布式存儲的數據進行計算處理,它本身並不能存儲數據;
(3)Spark可以使用Hadoop的HDFS或者其他雲數據平台進行數據存儲,但是一般使用HDFS;
(4)Spark可以使用基於HDFS的HBase數據庫,也可以使用HDFS的數據文件,還可以通過jdbc連接使用Mysql數據庫數據;Spark可以對數據庫數據進行修改刪除,而HDFS只能對數據進行追加和全表刪除;
(5)Spark數據處理速度秒殺Hadoop中MR;
(6)Spark處理數據的設計模式與MR不一樣,Hadoop是從HDFS讀取數據,通過MR將中間結果寫入HDFS;然后再重新從HDFS讀取數據進行MR,再刷寫到HDFS,這個過程涉及多次落盤操作,多次磁盤IO,效率並不高;而Spark的設計模式是讀取集群中的數據后,在內存中存儲和運算,直到全部運算完畢后,再存儲到集群中;
(7)Spark是由於Hadoop中MR效率低下而產生的高效率快速計算引擎,批處理速度比MR快近10倍,內存中的數據分析速度比Hadoop快近100倍(源自官網描述);
(8)Spark中RDD一般存放在內存中,如果內存不夠存放數據,會同時使用磁盤存儲數據;通過RDD之間的血緣連接、數據存入內存中切斷血緣關系等機制,可以實現災難恢復,當數據丟失時可以恢復數據;這一點與Hadoop類似,Hadoop基於磁盤讀寫,天生數據具備可恢復性;
(9)Spark引進了內存集群計算的概念,可在內存集群計算中將數據集緩存在內存中,以縮短訪問延遲,對7的補充;
(10)Spark中通過DAG圖可以實現良好的容錯。
三、Spark相對Hadoop的優越性
(1)Spark基於RDD,數據並不存放在RDD中,只是通過RDD進行轉換,通過裝飾者設計模式,數據之間形成血緣關系和類型轉換;
(2)Spark用scala語言編寫,相比java語言編寫的Hadoop程序更加簡潔;
(3)相比Hadoop中對於數據計算只提供了Map和Reduce兩個操作,Spark提供了豐富的算子,可以通過RDD轉換算子和RDD行動算子,實現很多復雜算法操作,這些在復雜的算法在Hadoop中需要自己編寫,而在Spark中直接通過scala語言封裝好了,直接用就ok;
(4)Hadoop中對於數據的計算,一個Job只有一個Map和Reduce階段,對於復雜的計算,需要使用多次MR,這樣涉及到落盤和磁盤IO,效率不高;而在Spark中,一個Job可以包含多個RDD的轉換算子,在調度時可以生成多個Stage,實現更復雜的功能;
(5)Hadoop中中間結果存放在HDFS中,每次MR都需要刷寫-調用,而Spark中間結果存放優先存放在內存中,內存不夠再存放在磁盤中,不放入HDFS,避免了大量的IO和刷寫讀取操作;
(6)Hadoop適合處理靜態數據,對於迭代式流式數據的處理能力差;Spark通過在內存中緩存處理的數據,提高了處理流式數據和迭代式數據的性能;
四、三大分布式計算系統
Hadoop適合處理離線的靜態的大數據;
Spark適合處理離線的流式的大數據;
Storm/Flink適合處理在線的實時的大數據。
————————————————
版權聲明:本文為CSDN博主「攻城獅Kevin」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wx1528159409/article/details/86612211