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


來源於  https://blog.csdn.net/JENREY/article/details/84873874

 

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是細粒度資源調度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM