Hadoop與Spark的比較

chenfeng發表於2017-02-27
 Hadoop框架的主要模組包括如下:
  • Hadoop Common
  • Hadoop分散式檔案系統(HDFS)
  • Hadoop YARN
  • Hadoop MapReduce


雖然上述四個模組構成了Hadoop的核心,不過還有其他幾個模組。這些模組包括:Ambari、Avro、Cassandra、Hive、 Pig、Oozie、Flume和Sqoop,它們進一步增強和擴充套件了Hadoop的功能。

Spark確實速度很快(最多比Hadoop MapReduce快100倍)。Spark還可以執行批次處理,然而它真正擅長的是處理流工作負載、互動式查詢和機器學習。


相比MapReduce基於磁碟的批次處理引擎,Spark賴以成名之處是其資料實時處理功能。Spark與Hadoop及其模組相容。實際上,在Hadoop的專案頁面上,Spark就被列為是一個模組。

Spark有自己的頁面,因為雖然它可以透過YARN(另一種資源協調者)在Hadoop叢集中執行,但是它也有一種獨立模式。它可以作為 Hadoop模組來執行,也可以作為獨立解決方案來執行。


MapReduce和Spark的主要區別在於,MapReduce使用持久儲存,而Spark使用彈性分散式資料集(RDDS)。


效能
Spark之所以如此快速,原因在於它在記憶體中處理一切資料。沒錯,它還可以使用磁碟來處理未全部裝入到記憶體中的資料。
Spark的記憶體處理為來自多個來源的資料提供了近乎實時分析的功能:營銷活動、機器學習、物聯網感測器、日誌監控、安全分析和社交媒體網站。另 外,MapReduce使用批次處理,其實從來就不是為驚人的速度設計的。它的初衷是不斷收集來自網站的資訊,不需要這些資料具有實時性或近乎實時性。

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


成本
“Spark已證明在資料多達PB的情況下也輕鬆自如。它被用於在數量只有十分之一的機器上,對100TB資料進行排序的速度比Hadoop MapReduce快3倍。”這一成績讓Spark成為2014年Daytona GraySort基準。


相容性
MapReduce和Spark相互相容;MapReduce透過JDBC和ODC相容諸多資料來源、檔案格式和商業智慧工具,Spark具有與MapReduce同樣的相容性。


資料處理
MapReduce是一種批次處理引擎。MapReduce以順序步驟來操作,先從叢集讀取資料,然後對資料執行操作,將結果寫回到叢集,從叢集讀 取更新後的資料,執行下一個資料操作,將那些結果寫回到結果,依次類推。Spark執行類似的操作,不過是在記憶體中一步執行。它從叢集讀取資料後,對資料 執行操作,然後寫回到叢集。


Spark還包括自己的圖形計算庫GraphX。GraphX讓使用者可以檢視與圖形和集合同樣的資料。使用者還可以使用彈性分散式資料集(RDD),改變和聯合圖形,容錯部分作了討論。

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


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


RDD擁有五個主要屬性:
  • 分割槽列表
  • 計算每個分片的函式
  • 依賴其他RDD的專案列表
  • 面向鍵值RDD的分割槽程式(比如說RDD是雜湊分割槽),這是可選屬性
  • 計算每個分片的首選位置的列表(比如HDFS檔案的資料塊位置),這是可選屬性


RDD可能具有永續性,以便將資料集快取在記憶體中。這樣一來,以後的操作大大加快,最多達10倍。Spark的快取具有容錯性,原因在於如果RDD的任何分割槽丟失,就會使用原始轉換,自動重新計算。


可擴充套件性

按照定義,MapReduce和Spark都可以使用HDFS來擴充套件。那麼,Hadoop叢集能變得多大呢?

據稱雅虎有一套42000個節點組成的Hadoop叢集,可以說擴充套件無極限。最大的已知Spark叢集是8000個節點,不過隨著大資料增多,預計叢集規模也會隨之變大,以便繼續滿足吞吐量方面的預期。


 
安全
Hadoop支援Kerberos身份驗證,這管理起來有麻煩。然而,第三方廠商讓企業組織能夠充分利用活動目錄Kerberos和LDAP用於身份驗證。同樣那些第三方廠商還為傳輸中資料和靜態資料提供資料加密。
Hadoop分散式檔案系統支援訪問控制列表(ACL)和傳統的檔案許可權模式。Hadoop為任務提交中的使用者控制提供了服務級授權(Service Level Authorization),這確保客戶擁有正確的許可權。
Spark的安全性弱一點,目前只支援透過共享金鑰(密碼驗證)的身份驗證。Spark在安全方面帶來的好處是,如果你在HDFS上執行Spark,它可以使用HDFS ACL和檔案級許可權。此外,Spark可以在YARN上執行,因而能夠使用Kerberos身份驗證。


 
總結
Spark與MapReduce是一種相互共生的關係。Hadoop提供了Spark所沒有的功能特性,比如分散式檔案系統,而Spark 為需要它的那些資料集提供了實時記憶體處理。完美的大資料場景正是設計人員當初預想的那樣:讓Hadoop和Spark在同一個團隊裡面協同執行。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2134362/,如需轉載,請註明出處,否則將追究法律責任。

相關文章