hadoop和spark都是並行計算相同和區別

相同點

兩者都是用mr模型來進行並行計算,

不同點

hadoop的一個作業稱為job,job裡面分為map task和reduce task,每個task都是在自己的進程中運行的,當task結束時,進程也會結束

spark用戶提交的任務成為application,一個application對應一個sparkcontext,app中存在多個job,每觸發一次action操作就會產生一個job

這些job可以並行或串行執行,每個job中有多個stage,stage是shuffle過程中DAGSchaduler通過RDD之間的依賴關係劃分job而來的,每個stage裡面有多個task,組成taskset有TaskSchaduler分發到各個executor中執行,executor的生命週期是和app一樣的,即使沒有job運行也是存在的,所以task可以快速啟動讀取內存進行計算

hadoop的job只有map和reduce操作,表達能力比較欠缺而且在mr過程中會重複的讀寫hdfs,造成大量的io操作,多個job需要自己管理關係

spark的迭代計算都是在內存中進行的,API中提供了大量的RDD操作如join,groupby等,而且通過DAG圖可以實現良好的容錯

spark把運算的中間數據存放在內存,迭代計算效率更高;mapreduce的中間結果需要落地,需要保存到磁盤,這樣必然會有磁盤io操做,影響性能。

spark容錯性高,它通過彈性分佈式數據集RDD來實現高效容錯,RDD是一組分佈式的存儲在節點內存中的

只讀性質的數據集,這些集合是彈性的,某一部分丟失或者出錯,可以通過整個數據集的計算流程的血緣關係

來實現重建;mapreduce的話容錯可能只能重新計算了,成本較高。

spark更加通用,spark提供了transformation和action這兩大類的多個功能api,另外還有流式處理

sparkstreaming模塊、圖計算GraphX等等;mapreduce只提供了map和reduce兩種操作,流計算以及其他

模塊的支持比較缺乏。

spark框架和生態更為複雜,首先有RDD、血緣lineage、執行時的有向無環圖DAG、stage劃分等等,

很多時候spark作業都需要根據不同業務場景的需要進行調優已達到性能要求;mapreduce框架及其生態

相對較為簡單,對性能的要求也相對較弱,但是運行較為穩定,適合長期後臺運行。


分享到:


相關文章: