回覆列表
-
1 # 繁星落石
-
2 # 財富聖經
首先,Mapreduce是較早出現的,它介紹了分散式處理大資料的基本思路。而Spark我現在正在學習,Matei Zaharia的畢業論文,也就是spark的介紹論文現在已經在CSDN上被翻譯成了中文。
建議先學習一下Mapreduce,主要了解一個任務是怎麼被執行的。這個網上都有。然後,spark學習主要應該集中在瞭解spark對SQL語句的執行機制上。
不同的分散式框架各有優勢,針對的業務場景是不一樣的。MapReduce能更好的處理大批次的ETL業務而Spark則相對更為專注於Machine Learning。對於公司而言,這些業務如果能在同一叢集上面跑則能有效降低成本。要允許不同框架同時執行在同一叢集,最首要解決的問題就是如何分配資源。在沒有Yarn的時候,一個比較簡單的做法是,假設叢集有100臺機器,我們將50臺機器分配給Spark,將另外50臺分配給MapReduce任務。這樣做似乎並沒什麼不妥。但是假設每天我們跑MapReduce的任務時間只有1小時,其他大部分時間都是在跑Spark,那麼一天裡面有23小時,50臺機器都處於空閒狀態,而Spark的機器則很可能有大量的作業在排隊。這顯然不是一個很有效利用叢集的方法。
spark和mapreduce都是可以實際部署的技術,兩者具有一定的相似性,但是spark的跨平臺性更好,更適合快速部署和設計。
mapreduce是一種思想,具體實現起來方法各不相同,比如map的方法就可以有千萬種之多,google提出的演算法只是作為一個通用的框架,給開發者提供一個已經驗證的思路,來處理分散式儲存的問題,spark在此之上進行了改進。
所以兩者都不是偽分散式,而是真正的分散式。