當今,大資料計算平臺最流行的莫過於Hadoop、Spark和Storm這三種,雖然Hadoop是主流,然而Spark和Storm這兩個後起之秀也正以迅猛之勢快速發展。讓我們一起看看這三個平臺及其相互間的關係。
1、Hadoop
Hadoop是Apache軟體基金會下的一個開源分散式計算平臺,為使用者提供了系統底層細節透明的分散式基礎架構。Hadoop採用Java語言開發,具有良好的跨平臺性,並且可部署在廉價的計算機叢集中,在業內應用非常廣泛,是大資料的代名詞,也是分散式計算架構的鼻祖。幾乎所有主流廠商都圍繞Hadoop進行開發和提供服務,如谷歌、百度、思科、華為、阿里巴巴、微軟都支援Hadoop。它將一個大型的任務切割成多個部分給多臺計算機,讓每臺計算機處理其中的一部分。這種執行在分散式計算儲存的架構所帶來的好處不言而喻。
● 在硬碟儲存層面,Hadoop的資料處理工作藉助HDFS,將架構下每一臺計算機中的硬碟資源匯聚起來,無論是儲存計算還是呼叫,都可以視為一塊硬碟使用,就像計算機中的C盤、D盤。
● 在資源管理層面,Hadoop使用叢集管理和排程軟體YARN,相當於計算機的Windows作業系統,進行資源的排程管理。
● 在計算處理層面,Hadoop利用MapReduce計算框架進行計算程式設計,將複雜的、執行在大規模叢集上的平行計算過程高度抽象成兩個函式——Map和Reduce。
經過多年的發展,Hadoop生態系統不斷完善和成熟,除了核心的HDFS、YARN和MapReduce之外,還包括ZooKeeper、HBase、Hive、Pig、Mathout、Flume、Sqoop、Ambari等功能元件。如圖1所示。
圖1 Hadoop生態系統
作為一種對大量資料進行分散式處理的軟體框架,Hadoop具有以下幾方面特點:
● 高可靠性。採用冗餘資料儲存方式,即使某副本發生故障,其他的仍能正常提供服務。
● 高效性。採用分散式儲存和分散式處理兩大核心技術,能高效處理PB級資料。
● 成本低。採用廉價計算機叢集,成本低,普通使用者很容易搭建。
● 可擴充套件性。可高效穩定執行在廉價的計算機叢集上,擴充套件到數以千計的計算機節點上。
● 支援多種程式語言。雖然是Java開發的,但也可使用其他語言編寫,比如C和C++。
這種架構大幅提升了計算儲存效能,降低計算平臺的硬體投入成本。然而,任何事物都不是完美的。Hadoop的缺點在於,由於計算過程放在硬碟上,受制於硬體條件限制,資料的吞吐和處理速度明顯不如使用記憶體快,尤其是在使用Hadoop進行迭代計算時,非常耗資源,且在開發過程中需要編寫不少相對底層的程式碼,不夠高效。
2、Spark
為了解決處理速度和實時性問題,出現了Spark和Storm平臺框架。我們先來看一下Spark。Spark也是Apache軟體基金會下的開源專案,用Scala語言編寫的,用於對大規模資料的快速處理,它與Hadoop相比最大的優點就是“快”,當初設計目標也是如此。為了使程式執行更快,Spark提供了記憶體計算,減少了迭代計算時的I/O開銷。Spark不但具備Hadoop MapReduce的優點,而且解決了其存在的缺陷,逐漸成為當今大資料領域最熱門的大資料計算平臺。
作為大資料框架的後起之秀,Spark具有更加高效和快速的計算能力,其特點主要有:
● 速度快。採用先進的有向無環圖執行引擎,以支援迴圈資料流與記憶體計算,基於記憶體的執行速度比Hadoop MapReduce快上百倍,基於磁碟的執行速度也較之快十倍。
● 通用性。提供體系化的技術棧,包括SQL查詢、流式計算、機器學習和圖演算法等元件,這些元件可無縫整合在同一應用中,足以應對複雜計算。
● 易用性。支援Scala、Java、Python和R等程式語言,API設計簡潔,使用者上手快,且支援互動式程式設計。
● 執行模式多樣。Spark可執行在獨立的叢集模式中,或執行在Hadoop中,也可執行在Amazon EC2等雲環境中,並且可以訪問HDFS、Cassandra、HBase、Hive等多種資料來源。
我們知道大資料計算模式主要有四種,除了圖計算這種特殊型別,其他三種足以應付大部分應用場景,因為實際應用中大資料處理主要就是這三種:複雜的批次資料處理、基於歷史資料的互動式查詢和基於實時資料流的資料處理。Hadoop MapReduce主要用於批處理計算,Hive和Impala用於互動式查詢,Storm主要用於流式資料處理。以上都只能針對某一種應用,但如果同時存在三種應用需求,Spark就比較合適了。因為Spark的設計理念就是“一個軟體棧滿足不同應用場景”,它有一套完整的生態系統,既能提供記憶體計算框架,也可支援多種型別計算(能同時支援批處理、流式計算和互動式查詢),提供一站式大資料解決方案。此外,Spark還能很好地與Hadoop生態系統相容,Hadoop應用程式可以非常容易地遷移到Spark平臺上。
除了資料儲存需藉助Hadoop的HDFS或Amazon S3之外,其主要功能元件包括Spark Core(基本通用功能,可進行復雜的批處理計算)、Spark SQL(支援基於歷史資料的互動式查詢計算)、Spark Streaming(支援實時流式計算)、MLlib(提供常用機器學習演算法,支援基於歷史資料的資料探勘)和GraphX(支援圖計算)等,如圖2所示。
圖2 Spark生態系統
儘管Spark有很多優點,但它並不能完全替代Hadoop,而是主要替代MapReduce計算模型。在實際應用中,Spark常與Hadoop結合使用,它可以藉助YARN來實現資源排程管理,藉助HDFS實現分散式儲存。此外,比起Hadoop可以用大量廉價計算機叢集進行分散式儲存計算(成本低),Spark對硬體要求較高,成本也相對高一些。
3、Storm
另一個著名的開源大資料計算框架Storm主要用於實時的流式資料處理,它與Spark最大的區別在於“實時性”的差異:Spark是“準實時”的,它先收集一段時間的資料再進行統一處理,好比看網頁統計票數,每隔一段時間重新整理一次;而Storm則是“完全實時”的,來一條資料就立刻處理一條,源源不斷地流入。但Storm的缺點在於,無論是離線批處理、高延遲批處理,還是互動式查詢,它都不如Spark框架。不同的機制決定了二者所適用的場景不同,比如炒股,股價的變化不是按秒計算的,因此適合採用計算延遲度為秒級的Spark框架;而在高頻交易中,高頻獲利與否往往就在1ms之間,就比較適合採用實時計算延遲度的Storm框架。
雖然Storm是Twitter開發的一個開源分散式實時計算系統,但是它已成為Apache的孵化專案,發展勢頭也很迅猛。Storm對於實時計算的意義類似於Hadoop對於批處理的意義,可以簡單、高效、可靠地處理流式資料並支援多種程式語言,它能與多種資料庫系統進行整合,從而開發出更強大的實時計算系統。
作為一個實時處理流式資料的計算框架,Storm的特點如下:
● 整合性。Storm可方便地與訊息佇列系統(如Kafka)和資料庫系統進行整合。
● 可擴充套件性。Storm的並行特性使其可以執行在分散式叢集中。
● 簡易的API。Storm的API在使用上既簡單又方便。
● 可靠的訊息處理。Storm保證每個訊息都能完整處理。
● 容錯性。Storm可以自動進行故障節點的重啟,以及節點故障時任務的重新分配。
● 支援多種程式語言。Storm支援使用各種程式語言來定義任務。
就像目前雲計算市場中風頭最勁的混合雲一樣,越來越多的組織和個人採用混合式大資料平臺架構,因為每種架構都有其自身的優缺點。比如Hadoop,其資料處理速度和難易度都遠不如Spark和Storm,但是由於硬碟斷電後其資料可以長期儲存,因此在處理需要長期儲存的資料時還需要藉助於它。不過由於Hadoop具有非常好的相容性,因此也非常容易同Spark和Storm相結合使用,從而滿足不同組織和個人的差異化需求。考慮到網路安全態勢所應用的場景,即大部分是複雜批次資料處理(日誌事件)和基於歷史資料的互動式查詢以及資料探勘,對準實時流式資料處理也會有一部分需求(如會話流的檢測分析),建議其大資料平臺採用Hadoop和Spark相結合的建設模式。