直接比較Hadoop和Spark有難度,由於它們處理的許多任務都同樣,可是在一些方面又並不相互重疊。html
好比說,Spark沒有文件管理功能,於是必須依賴Hadoop分佈式文件系統(HDFS)或另外某種解決方案。將Hadoop MapReduce與Spark做一番比較來得更明智,由於它們做爲數據處理引擎更具備可比性。數據庫
過去幾年,隨着數據科學趨於成熟,也日益須要用一種不一樣的方法來處理大數據。Hadoop在一些業務應用領域的表現比後起之秀Spark更勝一籌, 不過Spark在大數據領域有其一席之地,這歸功於它具備速度快、易於使用的優勢。本文剖析了兩大平臺的一系列常見屬性,包括性能、容錯、成本、易用性、 數據處理、兼容性和安全性。編程
Hadoop和Spark方面要記住的最重要一點就是,它們並非非此即彼的關係,由於它們不是相互排斥,也不是說一方是另外一方的簡易替代者。二者彼此兼容,這使得這對組合成爲一種功能極其強大的解決方案,適合諸多大數據應用場合。緩存
Hadoop的定義安全
Hadoop是Apache.org的一個項目,實際上是一種軟件庫和框架,以便使用簡單的編程模型,跨計算器集羣對龐大數據集(大數據)進行分佈式 處理。Hadoop可靈活擴展,從單一計算機系統,到提供本地存儲和計算能力的數千個商用系統,它都能輕鬆支持。實際上,Hadoop就是大數據分析領域 的重量級大數據平臺。服務器
Hadoop由協同運行、構建Hadoop框架的多個模塊組成。Hadoop框架的主要模塊包括以下:框架
Hadoop Common機器學習
Hadoop分佈式文件系統(HDFS)分佈式
Hadoop YARN函數
Hadoop MapReduce
雖然上述四個模塊構成了Hadoop的核心,不過還有其餘幾個模塊。這些模塊包括:Ambari、Avro、Cassandra、Hive、 Pig、Oozie、Flume和Sqoop,它們進一步加強和擴展了Hadoop的功能,得以擴大到大數據應用領域,處理龐大數據集。
許多使用大數據集和分析工具的公司使用Hadoop。它已成爲大數據應用系統中事實上的標準。設計Hadoop的初衷是處理這項任務:搜尋和搜索數 十億個網頁,將這些信息收集到數據庫中。正是因爲渴望搜尋和搜索互聯網,纔有了Hadoop的HDFS及分佈式處理引擎MapReduce。
若是數據集變得極其龐大或極其複雜,以致於當前的解決方案沒法在數據用戶認爲合理的時間段內有效地處理信息,Hadoop對公司就會大有用處。
MapReduce是一種出色的文本處理引擎,它理應如此,由於搜尋互聯網和搜索互聯網(它的首要任務)都是基於文本的任務。
Spark的定義
Apache Spark開發人員聲稱它是“一種用於數據大規模處理的快速通用引擎”。相比之下,若是說Hadoop的大數據框架比如是800磅重的大猩猩,Spark就比如是130磅重的獵豹。
雖然批評Spark的內存處理技術的人士認可,Spark確實速度很快(最多比Hadoop MapReduce快100倍),但他們可能並不肯意認可它在磁盤上運行起來速度最多快10倍。Spark還能夠執行批量處理,然而它真正擅長的是處理流工做負載、交互式查詢和基於機器的學習。
相比MapReduce基於磁盤的批量處理引擎,Spark賴以成名之處是其數據實時處理功能。Spark與Hadoop及其模塊兼容。實際上,在Hadoop的項目頁面上,Spark就被列爲是一個模塊。
Spark有本身的頁面,由於雖然它能夠經過YARN(另外一種資源協調者)在Hadoop集羣中運行,可是它也有一種獨立模式。它能夠做爲 Hadoop模塊來運行,也能夠做爲獨立解決方案來運行;這樣一來,很難直接比較二者。然而隨着時間的推移,一些大數據科學家預計Spark會出現分叉,可能會取代Hadoop,尤爲是在更快速地訪問處理的數據相當重要的狀況下。
Spark是一種集羣計算框架,這意味着它更多地與MapReduce競爭,而不是與整個Hadoop生態系統競爭。好比說,Spark沒有本身的分佈式文件系統,但可使用HDFS。
Spark使用內存,也可使用磁盤進行處理,而MapReduce徹底基於磁盤。MapReduce和Spark的主要區別在於,MapReduce使用持久存儲,而Spark使用彈性分佈式數據集(RDDS),下面容錯部分有更詳細的解釋。
性能
網上不缺關於Spark與MapReduce相比有多快的信息。對二者進行比較有個問題,那就是它們處理數據的方式不同,數據處理部分有介紹。Spark之因此如此快速,緣由在於它在內存中處理一切數據。沒錯,它還可使用磁盤來處理未所有裝入到內存中的數據。
Spark的內存處理爲來自多個來源的數據提供了近乎實時分析的功能:營銷活動、機器學習、物聯網傳感器、日誌監控、安全分析和社交媒體網站。另 外,MapReduce使用批量處理,其實歷來就不是爲驚人的速度設計的。它的初衷是不斷收集來自網站的信息,不須要這些數據具備實時性或近乎實時性。
易用性
衆所周知,Spark以性能見長,可是它也因易用性而小有名氣,緣由是它隨帶易於使用的API,支持Scala(原生語言)、Java、Python和Spark SQL。Spark SQL很是相似於SQL 92,因此幾乎不須要經歷一番學習,立刻能夠上手。
Spark還有一種交互模式,那樣開發人員和用戶均可以得到查詢和其餘操做的即時反饋。MapReduce沒有交互模式,不過有了Hive和Pig等附加模塊,採用者使用MapReduce來得容易一點。
成本
MapReduce和Spark都是Apache項目,這意味着它們是開源免費軟件產品。雖然軟件不須要成本,可是派人用硬件運行任何一種平臺帶來了成本。這兩種產品都設計成能夠在商用硬件上運行,好比所謂的低成本白盒服務器系統。
MapReduce和Spark在一樣的硬件上運行,那麼這兩種解決方案的成本差別體如今哪裏?MapReduce使用常規數量的內存,由於數據處 理基於磁盤,因此公司得購買速度更快的磁盤和大量磁盤空間來運行MapReduce。MapReduce還須要更多的系統,將磁盤輸入/輸出分佈到多個系 統上。
Spark須要大量內存,可是可使用常規數量的常規轉速磁盤。一些用戶抱怨會產生臨時文件,須要清理。這些臨時文件一般保存7天,以便加快針對同 一數據集的任何處理。磁盤空間相對便宜,因爲Spark不使用磁盤輸入/輸入用於處理,已使用的磁盤空間能夠用於SAN或NAS。
然而,因爲須要大量內存在內存中處理一切數據,Spark系統的成本更高,這點沒錯。可是Spark的技術同時減小了所需的系統數量。因此,最後的 情形是,系統成本較高,可是數量大大減小。也許到時候,Spark實際上能夠下降每一個計算單位的成本,儘管內存方面有額外的要求。
舉例說明,“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身份驗證。
總結Hadoop vs Spark
乍一看,對任何大數據應用而言,使用Spark彷佛是默認選擇。然而,事實並不是如此。MapReduce已在大數據市場取得了進展,尤爲受到這種公司企業的追捧:須要由商用系統對龐大數據集加以控制。Spark的速度、靈活性和相對易用性對MapReduce的低操做成原本說是絕對補充。
實際上,Spark與MapReduce是一種相互共生的關係。Hadoop提供了Spark所沒有的功能特性,好比分佈式文件系統,而Spark 爲須要它的那些數據集提供了實時內存處理。完美的大數據場景正是設計人員當初預想的那樣:讓Hadoop和Spark在同一個團隊裏面協同運行。
本文轉載自中國大數據