1. 程式人生 > >spark比MapReduce快的原因是什麼?(比較完整)

spark比MapReduce快的原因是什麼?(比較完整)

1、spark是基於記憶體進行資料處理的,MapReduce是基於磁碟進行資料處理的

MapReduce的設設計:中間結果儲存在檔案中,提高了可靠性,減少了記憶體佔用。但是犧牲了效能。
Spark的設計:資料在記憶體中進行交換,要快一些,但是記憶體這個東西,可靠性不如磁碟。所以效能方面比MapReduce要好。
DAG計算模型在迭代計算上還是比MapReduce的效率更高

2、spark中具有DAG有向無環圖,DAG有向無環圖在此過程中減少了shuffle以及落地磁碟的次數

Spark 計算比 MapReduce 快的根本原因在於 DAG 計算模型。一般而言,DAG 相比MapReduce 在大多數情況下可以減少 shuffle 次數。Spark 的 DAGScheduler 相當於一個改進版的 MapReduce,如果計算不涉及與其他節點進行資料交換,Spark 可以在記憶體中一次性完成這些操作,也就是中間結果無須落盤,減少了磁碟 IO 的操作。但是,如果計算過程中涉及資料交換,Spark 也是會把 shuffle 的資料寫磁碟的!有一個誤區,Spark 是基於記憶體的計算,所以快,這不是主要原因,要對資料做計算,必然得載入到記憶體,Hadoop 也是如此,只不過 Spark 支援將需要反覆用到的資料給 Cache 到記憶體中,減少資料載入耗時,所以 Spark 跑機器學習演算法比較在行(需要對資料進行反覆迭代)。Spark 基於磁碟的計算也是比 Hadoop 快。剛剛提到了 Spark 的 DAGScheduler 是個改進版的 MapReduce,所以 Spark天生適合做批處理的任務。Hadoop 的 MapReduce 雖然不如 spark 效能好,但是 HDFS 仍然是業界的大資料儲存標準。

3、spark是粗粒度資源申請,也就是當提交spark application的時候,application會將所有的資源申請完畢,如果申請不到資源就等待,如果申請到資源才執行application,task在執行的時候就不需要自己去申請資源,task執行快,當最後一個task執行完之後task才會被釋放。

優點是執行速度快,缺點是不能使叢集得到充分的利用

MapReduce是細粒度資源申請,當提交application的時候,task執行時,自己申請資源,自己釋放資源,task執行完畢之後,資源立即會被釋放,task執行的慢,application執行的相對比較慢。

優點是叢集資源得到充分利用,缺點是application執行的相對比較慢。

Spark是基於記憶體的,而MapReduce是基於磁碟的迭代

 

有向無環圖是指:一個圖從頂點出發,無法再回到原點,那麼這種圖叫做有向無環圖。

DAG計算模型在spark任務排程

Spark是粗粒度資源排程,MapReduce是細粒度資源排程