自己總結
- MR是基於進程,spark是基於線程
- Spark的多個task跑在同一個進程上,這個進程會伴隨spark應用程序的整個生命周期,即使沒有作業進行,進程也是存在的
- MR的每一個task都是一個進程,當task完成時,進程也會結束
- 所以,spark比MR快的原因也在這,MR啟動就需要申請資源,用完就銷毀,但是spark把進程拿到以后,這個進程會一直存在,即使沒有job在跑,所以后邊的job可以直接啟動,不需要再重新申請資源
-
速度
spark把運算的中間數據存放在內存,迭代計算效率更高;MR的中間結果需要落地,需要保存到磁盤,這樣必然會有磁盤IO操作,影響性能
-
容錯性
spark容錯性高,它通過彈性分布式數據集RDD來實現高效容錯,RDD是一組分布式的存儲在節點內存中的只讀性質的數據集,這些集合石彈性的,某一部分丟失或者出錯,可以通過整個數據集的計算流程的血緣關系來實現重建;MR的話容錯可能只能重新計算了,成本較高
-
適用面
spark更加通用,spark提供了transformation和action這兩大類的多個功能的api,另外還有流式處理sparkstreaming模塊,圖計算GraphX等;MR只提供了map和reduce兩種操作,流計算以及其他模塊的支持比較缺乏
-
框架和生態
Spark框架和生態更為復雜,首先由RDD、血緣lineage、執行時的有向無環圖DAG、stage划分等等,
很多時候spark作業都需要根據不同的業務場景的需要進行調優,以達到性能要求,MR框架及其生態相對較為簡單,對性能的要求也相對較弱,但是運行較為穩定,適合長期后台運行
-
運行環境:
MR運行在YARN上,
spark
- local:本地運行
- standalone:使用Spark自帶的資源管理框架,運行spark的應用
- yarn:將spark應用類似mr一樣,提交到yarn上運行
- mesos:類似yarn的一種資源管理框架
參考博客
原文:https://blog.csdn.net/zx8167107/article/details/79086864