Spark相比Hadoop MapReduce的特點
(1)中間結果輸出
基于MapReduce的計算引擎通常會将中間結果輸出到磁盤上,進行存儲和容錯。 出于任務管道承接的考慮,當一些查詢翻譯到MapReduce任務時,往往會産生多個Stage,而這些串聯的Stage又依賴于底層檔案系統(如HDFS)來存儲每一個Stage的輸出結果。Spark将執行模型抽象為通用的有向無環圖執行計劃(DAG),這可以将多Stage的任務串聯或者并行執行,而無須将Stage中間結果輸出到HDFS中。 類似的引擎包括Dryad、Tez。
(2)資料格式和記憶體布局
由于MapReduce Schema on Read處理方式會引起較大的處理開銷。 Spark抽象出分布式記憶體存儲結構彈性分布式資料集RDD,進行資料的存儲。 RDD能支援粗粒度寫操作,但對于讀取操作,RDD可以精确到每條記錄,這使得RDD可以用來作為分布式索引。 Spark的特性是能夠控制資料在不同節點上的分區,使用者可以自定義分區政策,如Hash分區等。 Shark和Spark SQL在Spark的基礎之上實作了列存儲和列存儲壓縮。
(3)執行政策
在資料Shuffle之前花費了大量的時間來排序,Spark則可減輕上述問題帶來的開銷。 因為Spark任務在Shuffle中不是所有情景都需要排序,是以支援基于Hash的分布式聚合,排程中采用更為通用的任務執行計劃圖(DAG),每一輪次的輸出結果在記憶體緩存。
(4)任務排程的開銷
傳統的MapReduce系統,如Hadoop,是為了運作長達數小時的批量作業而設計的,在某些極端情況下,送出一個任務的延遲非常高。Spark采用了事件驅動的類庫AKKA來啟動任務,通過線程池複用線程來避免程序或線程啟動和切換開銷。
本文轉自大資料躺過的坑部落格園部落格,原文連結:http://www.cnblogs.com/zlslch/p/5706933.html,如需轉載請自行聯系原作者