Spark,是分布式計算平臺,是一個用scala語言編寫的計算框架,基于內存的快速、通用、可擴展的大數據分析引擎
Hadoop,是分布式管理、存儲、計算的生態系統;包括HDFS(存儲)、MapReduce(計算)、Yarn(資源調度)
一、Spark VS Hadoop 概覽
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
mapreduce 讀 – 處理 - 寫磁盤 – 讀 - 處理 - 寫
spark 讀 - 處理 - 處理 --(需要的時候)寫磁盤 - 寫
Hadoop | Spark | |
---|---|---|
類型 | 基礎平臺,包括計算、調度、存儲 | 分布式計算工具 |
場景 | 大規模數據集上的批處理 | 迭代計算、交互式計算、流計算 |
價格 | 對機器要求低、便宜 | 對內存有要求、相對較貴 |
編程范式 | Map+Reduce,API較為底層、適應性差 | RDD組成DAG有向無環圖,API較為頂層,方便使用 |
數據存儲結構 | MapReduce計算結果存在HDFS磁盤上,延遲大 | RDD中間運算結果存在內存上,延遲小 |
運行方式 | Task以進程的方式維護,任務啟動慢 | Task以線程的方式維護,任務啟動快 |
二、Spark相對Hadoop的優越性
Spark 是在借鑒了 MapReduce 之上發展而來的,繼承了其分布式并行計算的優點并改進了 MapReduce 明顯的缺陷,(spark 與 hadoop 的差異)具體如下:
首先,Spark 把中間數據放到內存中,迭代運算效率高。MapReduce 中計算結果需要落地,保存到磁盤上,這樣勢必會影響整體速度,而 Spark 支持 DAG 圖的分布式并行計算的編程框架,減少了迭代過程中數據的落地,提高了處理效率。(延遲加載)
其次,Spark 容錯性高。Spark 引進了彈性分布式數據集 RDD (Resilient DistributedDataset) 的抽象,它是分布在一組節點中的只讀對象集合,這些集合是彈性的,如果數據集一部分丟失,則可以根據“血統”(即允許基于數據衍生過程)對它們進行重建。另外在RDD 計算時可以通過 CheckPoint 來實現容錯。
最后,Spark 更加通用。mapreduce 只提供了 Map 和 Reduce 兩種操作,Spark 提供的數據集操作類型有很多,大致分為:Transformations 和 Actions 兩大類。Transformations包括 Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort 等多種操作類型,同時還提供 Count, Actions 包括 Collect、Reduce、Lookup 和 Save 等操作
三、 各方面比較
- Spark對標于Hadoop中的計算模塊MR,但是速度和效率比MR要快得多;
- Spark沒有提供文件管理系統,所以,它必須和其他的分布式文件系統進行集成才能運作,它只是一個計算分析框架,專門用來對分布式存儲的數據進行計算處理,它本身并不能存儲數據;
- Spark可以使用Hadoop的HDFS或者其他云數據平臺進行數據存儲,但是一般使用HDFS;
- Spark可以使用基于HDFS的HBase數據庫,也可以使用HDFS的數據文件,還可以通過jdbc連接使用Mysql數據庫數據;Spark可以對數據庫數據進行修改刪除,而HDFS只能對數據進行追加和全表刪除;
- Spark數據處理速度秒殺Hadoop中MR;
- Spark處理數據的設計模式與MR不一樣,Hadoop是從HDFS讀取數據,通過MR將中間結果寫入HDFS;然后再重新從HDFS讀取數據進行MR,再刷寫到HDFS,這個過程涉及多次落盤操作,多次磁盤IO,效率并不高;而Spark的設計模式是讀取集群中的數據后,在內存中存儲和運算,直到全部運算完畢后,再存儲到集群中;
- Spark是由于Hadoop中MR效率低下而產生的高效率快速計算引擎,批處理速度比MR快近10倍,內存中的數據分析速度比Hadoop快近100倍(源自官網描述);
- Spark中RDD一般存放在內存中,如果內存不夠存放數據,會同時使用磁盤存儲數據;通過RDD之間的血緣連接、數據存入內存中切斷血緣關系等機制,可以實現災難恢復,當數據丟失時可以恢復數據;這一點與Hadoop類似,Hadoop基于磁盤讀寫,天生數據具備可恢復性;
- Spark引進了內存集群計算的概念,可在內存集群計算中將數據集緩存在內存中,以縮短訪問延遲,對7的補充;
- Spark中通過DAG圖可以實現良好的容錯。
四、三大分布式計算系統
Hadoop適合處理離線的靜態的大數據;
Spark適合處理離線的流式的大數據;
Storm/Flink適合處理在線的實時的大數據。