spark為什么比mapreduce快?
首先澄清幾個誤區:
1:兩者都是基于內存計算的,任何計算框架都肯定是基于內存的,所以網上說的spark是基于內存計算所以快,顯然是錯誤的
2;DAG計算模型減少的是磁盤I/O次數(相比于mapreduce計算模型而言),而不是shuffle次數,因為shuffle是根據數據重組的次數而定,所以shuffle次數不能減少
所以總結spark比mapreduce快的原因有以下幾點:
1:DAG相比hadoop的mapreduce在大多數情況下可以減少磁盤I/O次數
因為mapreduce計算模型只能包含一個map和一個reduce,所以reduce完后必須進行落盤,而DAG可以連續shuffle的,也就是說一個DAG可以完成好幾個
mapreduce,所以dag只需要在最后一個shuffle落盤,就比mapreduce少了,總shuffle次數越多,減少的落盤次數就越多
2:spark shuffle 的優化
mapreduce在shuffle時默認進行排序,spark在shuffle時則只有部分場景才需要排序(bypass技師不需要排序),排序是非常耗時的,這樣就可以加快shuffle速度
3:spark支持將需要反復用到的數據進行緩存
所以對于下次再次使用此rdd時,不再再次計算,而是直接從緩存中獲取,因此可以減少數據加載耗時,所以更適合需要迭代計算的機器學習算法
4:任務級別并行度上的不同
mapreduce采用多進程模型,而spark采用了多線程模型,多進程模型的好處是便于細粒度控制每個任務占用的資源,但每次任務的啟動都會消耗一定的啟動時間,即mapreduce的map task 和reduce task是進程級別的,都是jvm進程,每次啟動都需要重新申請資源,消耗不必要的時間,而spark task是基于線程模型的,通過復用線程池中的線程來減少啟動,關閉task所需要的開銷(多線程模型也有缺點,由于同節點上所有任務運行在一個進行中,因此,會出現嚴重的資源爭用,難以細粒度控制每個任務占用資源)
審核編輯 黃宇
-
內存
+關注
關注
8文章
2998瀏覽量
73881 -
SPARK
+關注
關注
1文章
105瀏覽量
19875 -
MapReduce
+關注
關注
0文章
45瀏覽量
6285
發布評論請先 登錄
相關推薦
評論