(1)Spark
:是分散式計算平臺,是一個用scala語言編寫的計算框架,基於記憶體的快速、通用、可延伸的巨量資料分析引擎 。
(2)Hadoop
:是分散式管理、儲存、計算的生態系統;
其中包括三大部分:HDFS(儲存)、MapReduce(計算)、Yarn(資源排程)
1、Hadoop和Spark都是平行計算
,兩者都是用MR模型進行計算 。Hadoop一個作業稱為一個Job,Job裡面分為Map Task和Reduce Task階段
,每個Task都在自己的程序中執行,當Task結束時,程序也會隨之結束。
2、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可以快速啟動讀取記憶體
進行計算。
所以,spark比MR快的原因也在這,MR啟動就需要申請資源,用完就銷燬,但是spark把程序拿到以後,這個程序會一直存在,即使沒有job在跑,所以後邊的job可以直接啟動,不需要再重新申請資源。
注意:一個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引進了記憶體叢集計算的概念,可在記憶體叢集計算中將資料集快取在記憶體中
,以縮短存取延遲;
(10)Spark中通過DAG有向無環圖可以實現良好的容錯。
(1)spark把運算的中間資料存放在記憶體
,迭代計算效率更高;
(2)mapreduce的中間結果需要儲存到磁碟
, 這樣必然會有磁碟io操做,影響效能。
(1)spark容錯性高,它通過彈性分散式資料集RDD
來實現高效容錯,RDD是一組分散式的儲存在節點記憶體中的唯讀
性質的資料集,這些集合是彈性的,某一部分丟失或者出錯,可以通過整個資料集的計算流程的血緣關係來實現重建;
(2)mapreduce的容錯可能只能重新計算了,成本較高。
(1)spark更加通用,spark提供了transformation和action這兩大類的多個功能API,另外還有流式處理 sparkstreaming模組、圖計算GraphX等等;
(2)mapreduce只提供了map和reduce兩種操作,流計算以及其他模組的支援比較缺乏。
(1)Spark框架和生態更為複雜適用範圍更廣,首先由RDD、血緣lineage、執行時的有向無環圖DAG、stage劃分等等,很多時候spark作業都需要根據不同的業務場景的需要進行調優,以達到效能要求。
(2)MR框架及其生態相對較為簡單,對效能的要求也相對較弱,但是執行較為穩定,適合長期後臺執行以及離線海量資料探勘計算
。
(1)spark大致有四種執行模式:
local
:本地執行
standalone
:使用Spark自帶的資源管理框架,執行spark的應用(常用)
yarn
:將spark應用類似mr一樣,提交到yarn上執行 (常用)
mesos
:類似yarn的一種資源管理框架
(2)MR執行在YARN上
(1)Mapreduce
適合處理海量離線的靜態資料;
(2)Spark
對實時的資料做批次處理;
(3)Storm/Flink
對實時線上的資料做流式處理。