三分鐘入門大數據之為什麼Spark可以代替MapReduce?

哈嘍,大家好,我是漢斯老師。近幾年來,互聯網行業由於較高的薪資收入,受到許多人的追捧。很多年輕的學子,或是其他行業的有志青年,都想要投身到這個行業中來。然而一方面受到“互聯網寒冬”的影響,最近頻頻傳出各家知名互聯網公司裁員縮編的消息;另一方面,大量的人才湧入,又使得互聯網產業在職場上呈現出供過於求的特徵,並最終導致了職場上的激烈競爭。那麼互聯網行業未來的潛力在哪裡?我們又應該在哪個方向上發力,才能保證自己可以獲得一份高薪而穩定的工作?基於多年的互聯網行業從業經驗,漢斯老師在這裡向大家推薦大數據方向,希望通過本人的《三分鐘入門大數據》和《十分鐘精通大數據》等系列文章,幫助所有有志瞭解學習大數據的朋友掌握大數據的相關知識,也歡迎所有對互聯網行業以及大數據領域感興趣的朋友前來交流。

三分鐘入門大數據之為什麼Spark可以代替MapReduce?

Spark是用來代替MapReduce的下一代大數據處理技術。這大概是大多數學習Spark的學生都曾聽過的一句話,可是為什麼Spark會代替MapReduce?Spark又有哪些特性使其可以替代MapRduce?而面對Spark,MapReduce又是否真的是毫無優勢呢?漢斯老師將帶領大家從以上幾個問題來逐步加深對Spark與MapReduce之間的瞭解。


Spark之所以被認定可以替代MapReduce,主要是以下兩個原因:

1. Spark在大多數情況下計算效率比MapRduce高。

在進行Reduce任務之前,MR需要對所有Map任務的輸出結果進行排序和轉換,並且要將處理後的結果映射到原始輸入數據上,這個過程就是Shuffle。在這個過程中,假定Map任務的輸出結果足夠多,會出現內存溢出的問題,為此需要將溢出的數據寫入到磁盤中。之後在Reduce任務進行時,會重新在磁盤中讀取Shuffle的處理結果。

此外,常常使用Hive SQL進行查詢的小夥伴們也許會發現,有的時候,當我們寫的SQL語句稍微複雜一點,比如存在分組,表聯合等操作時,我們會注意到,Hive SQL在執行時,會連續啟動多次MapReduce,這是由於MapReduce的每個任務,都是以一個進程的方式來啟動的,各個進程之間不具備通訊的管道,假如一個進程想要使用另一個進程的結果,就必須要去HDFS中去讀取,這顯然需要耗費大量的時間。

而對於Spark而言,由於其使用有向無環圖(DAG)來對整個數據處理的過程進行管理。因此當某些數據被處理過後,如果還需進行後續的處理,則這部分數據是不會寫入到磁盤中,而是緩存到內存中,方便下一次讀取。這樣就大大節省了磁盤讀寫的時間。

2.相較於MapReduce,Spark可以處理複雜的線性代數問題,泛化多體問題,圖論問題甚至實時運算。

A. 線性代數運算主要包括線性系統,特徵值問題,以及線性迴歸主成分分析(PCA)等逆問題。這其中,MapReduce僅能解決線性迴歸問題,而包括PCA在內的部分問題是很難基於MapReduce框架來實現的。

B. 廣義多體問題主要包括距離,核或者其他類型的點或點集的關聯性問題。常見的問題包括近鄰搜索K均值聚類等問題。這其中,MapReduce僅能支持K均值聚類等部分難度較低的問題。

C. 圖論計算是以圖形式的數據或者可以通過圖來建模的問題。包括中心度,距離計算以及排序等,這些都是MapReduce上不易實現的。

D. 由於上文中提到的MapReduce中每一個任務都是獨立進程,這意味著每一次對數據的計算與處理,都需要重新啟用一遍MapReduce的執行流程,對之前的數據進行重新計算。這也就造成了MapReduce中,缺乏能夠長期存活一個MR作業的機制,而Spark是支持流處理的,這使得Spark可以進行實時運算。


事實上,Spark與MR之間,還存在諸如容錯機制等差異,然而總結來說,Spark是要優於MapReduce的。但在具體案例中,是否Spark一定比MapReduce效率高,又或者是否使用Spark一定比MapReduce好,則取決於實際要處理的問題,不可一概而論。


分享到:


相關文章: