表達能力
MapReduce需要將所有計算轉換爲Map和Reduce,難以描述複雜處理過程;
Spark除Map和Reduce外,還支持RDD/DataFrame/DataSet等多種數據模型操作,編程模型更加靈活。
磁盤IO
MapReduce每步運算都要從磁盤讀取數據,結束後寫入磁盤數據,僅有小部分數據作爲臨時緩存放入內存,磁盤IO開銷比較大;
Spark將中間結果直接放入內存,既提高了迭代運算效率,又避免了大量的重複計算,據官方提供數據,同樣迭代運算效率Spark:Hadoop=110:0.9。
任務延遲
MapReduce將任務分成一系列運算順序執行,每次運算涉及磁盤IO,任務間銜接不及時,需要等上步完成才能進行下步運算,無法滿足複雜任務和多階段計算任務需求;
Spark基於DAG任務調度執行機制,不涉及磁盤IO延遲,迭代運算更快。
內存管理
MapReduce任務在啓動時已經在JVM內指定了最大內存,不能超過指定的最大內存;
Spark在超過指定最大內存後,會使用操作系統內存,既保證了內存的基本使用,又避免了提早分配過多內存帶來的資源浪費
並行處理
MapReduce中一個進程運行一個task,按序執行;
Spark中一個線程運行一個task,增加了並行度。