03.10 淺談大數據Spark技術是否可以替代Hadoop

用Spark來替代Hadoop的觀點在很早以前筆者就有耳聞,其實提出這種觀點的原因還是在於Spark和Hadoop兩者之間存在的差異。首先,兩者都是開源的,這使得他們能夠大規模應用在大數據分析領域,也能夠在其基礎上進行多樣性的開發;其次,Spark立足與Scala,使得Scala擁有了高性能的計算框架;同時,Spark與Hadoop相比,不受HDFS的侷限,在海量數據的計算、挖掘性能上優於Hadoop,在當下較為流行的機器學習上,Spark也有較好的表現,所以在這些因素的作用下,Spark日益受到用戶的喜愛。

但這並不能說明Hadoop不再擁有優勢,Hadoop擁有強大的生態,作為一種分佈式系統架構,Hadoop適用於低成本、大規模的數據分析環境,能夠接受海量數據的存儲和運算,雖然Spark改進了很多MapReduce的算法,但實際上更多的是作為Hadoop的一種補充。

淺談大數據Spark技術是否可以替代Hadoop

要深刻理解兩者之間的關係,首先需要對Hadoop進行詳細瞭解:

Hadoop能夠解決什麼問題?

Hadoop解決了大數據(大到一臺計算機無法進行存儲,一臺計算機無法在要求的時間內進行處理)的可靠存儲和處理。

HDFS,在由普通PC組成的集群上提供高可靠的文件存儲,通過將塊保存多個副本的辦法解決服務器或硬盤壞掉的問題。

MapReduce,通過簡單的Mapper和Reducer的抽象提供一個編程模型,可以在一個由幾十臺上百臺的PC組成的不可靠集群上併發地,分佈式地處理大量的數據集,而把併發、分佈式(如機器間通信)和故障恢復等計算細節隱藏起來。而Mapper和Reducer的抽象,又是各種各樣的複雜數據處理都可以分解為的基本元素。尚學堂陳老師指出,複雜的數據處理可以分解為由多個Job(包含一個Mapper和一個Reducer)組成的有向無環圖(DAG),然後每個Mapper和Reducer放到Hadoop集群上執行,就可以得出結果。

在MapReduce中,Shuffle是一個非常重要的過程,正是有了看不見的Shuffle過程,才可以使在MapReduce之上寫數據處理的開發者完全感知不到分佈式和併發的存在。

那麼,Hadoop有哪些侷限於不足呢?

但是,MapRecue存在以下侷限,使用起來比較困難。

1.抽象層次低,需要手工編寫代碼來完成,使用上難以上手;

2.只提供兩個操作,Map和Reduce,表達力欠缺;

3.一個Job只有Map和Reduce兩個階段(Phase),複雜的計算需要大量的Job完成,Job之間的依賴關係是由開發者自己管理的;

4.處理邏輯隱藏在代碼細節中,沒有整體邏輯;

5.中間結果也放在HDFS文件系統中;

6.ReduceTask需要等待所有MapTask都完成後才可以開始,時延高,只適用Batch數據處理,對於交互式數據處理,實時數據處理的支持不夠;

7.對於迭代式數據處理性能比較差。

淺談大數據Spark技術是否可以替代Hadoop

於是,針對以上內容,Spark做了一定程度上的改進:

從性能方面來比較,Spark在於運算速度快。Spark還可以執行批量處理,然而它真正擅長的是處理流工作負載、交互式查詢和機器學習。

相比MapReduce基於磁盤的批量處理引擎,Spark賴以成名之處是其數據實時處理功能。Spark與Hadoop及其模塊兼容。實際上,在Hadoop的項目頁面上,Spark就被列為是一個模塊。Spark有自己的頁面,因為雖然它可以通過YARN(另一種資源協調者)在Hadoop集群中運行,但是它也有一種獨立模式。它可以作為 Hadoop模塊來運行,也可以作為獨立解決方案來運行。MapReduce和Spark的主要區別在於,MapReduce使用持久存儲,而Spark使用彈性分佈式數據集(RDDS)。

Spark之所以如此快速,原因在於它在內存中處理一切數據。沒錯,它還可以使用磁盤來處理未全部裝入到內存中的數據。

Spark的內存處理為來自多個來源的數據提供了近乎實時分析的功能:營銷活動、機器學習、物聯網傳感器、日誌監控、安全分析和社交媒體網站。另外,MapReduce使用批量處理,其實從來就不是為驚人的速度設計的。它的初衷是不斷收集來自網站的信息,不需要這些數據具有實時性或近乎實時性。

淺談大數據Spark技術是否可以替代Hadoop

從簡單易用角度來說,Spark支持Scala(原生語言)、Java、Python和Spark SQL。Spark SQL非常類似於SQL 92,所以幾乎不需要經歷一番學習,馬上可以上手。Spark還有一種交互模式,那樣開發人員和用戶都可以獲得查詢和其他操作的即時反饋。MapReduce沒有交互模式,不過有了Hive和Pig等附加模塊,採用者使用MapReduce來得容易一點。

在容錯性方面,MapReduce和Spark從兩個不同的方向來解決問題。MapReduce使用TaskTracker節點,它為 JobTracker節點提供了心跳(heartbeat)。如果沒有心跳,那麼JobTracker節點重新調度所有將執行的操作和正在進行的操作,交給另一個TaskTracker節點。這種方法在提供容錯性方面很有效,可是會大大延長某些操作(即便只有一個故障)的完成時間。

Spark使用彈性分佈式數據集(RDD),它們是容錯集合,裡面的數據元素可執行並行操作。RDD可以引用外部存儲系統中的數據集,比如共享式文件系統、HDFS、HBase,或者提供Hadoop InputFormat的任何數據源。Spark可以用Hadoop支持的任何存儲源創建RDD,包括本地文件系統,或前面所列的其中一種文件系統。

所以,通過上面內容的論述,筆者認為,Spark可以對Hadoop起到一個很好的補充作用,而且在某種程度上,兩者可以並行。Hadoop建立分佈式文件系,而Spark負責進行高效地數據運算,從而搭建一個理想的大數據處理平臺。

為了讓大家更好地瞭解大數據,小編也為大家準備好了學習資料,需要的同學私信小編即可

淺談大數據Spark技術是否可以替代Hadoop


分享到:


相關文章: