摘要:Hadoop是當前最為流行的大數(shù)據(jù)問題解決方案,Spark崛起對Hadoop及其生態(tài)系統(tǒng)形成了有力的沖擊。本文介紹了Hadoop和Spark的相關技術的原理;分析了Hadoop與Spark不同的特點,最后進行了總結(jié)并展望Hadoop和Spark二者相互結(jié)合,混合架構(gòu)將是未來發(fā)展的方向。
關鍵詞:大數(shù)據(jù);云計算;Hadoop;Spark;
1 引言
進入21世紀,全球的數(shù)據(jù)量將呈現(xiàn)出爆炸性的增長趨勢,面對如此海量的數(shù)據(jù),傳統(tǒng)的數(shù)據(jù)計算和數(shù)據(jù)存儲方式已經(jīng)無法滿足要求,2008年Apache軟件基金會的Hadoop迅速崛起,經(jīng)過近十年的發(fā)展,期間形成了以Hive、Hbase、Zookeeper等軟件為核心的Hadoop生態(tài)系統(tǒng),成為最流行的大數(shù)據(jù)問題解決方案。
隨著對Hadoop的廣泛應用,也暴露出一些問題,例如作為Hadoop核心技術的MapReduce計算框架缺少對迭代的支持,另外在計算過程中會將中間數(shù)據(jù)輸出到硬盤存儲時會產(chǎn)生較高的延遲。為此加州大學伯克利分校開發(fā)了Spark系統(tǒng)提交給Apache軟件基金會。Spark因其具有快速、易用、通用以及有效繼承Hadoop等特點,正被廣泛的應用。
Spark相比于MapReduce所具有的各種優(yōu)勢,但本身不具有文件管理功能,因此是不可能完全取代Hadoop,為了實現(xiàn)數(shù)據(jù)計算,還需要依靠Hadoop的核心技術HDFS。
Hadoop的設計初衷是使得用戶可以在不了解分布式底層細節(jié)的情況下,開發(fā)分布式程序,能夠充分利用集群的威力,進行高速運算和存儲實現(xiàn)數(shù)據(jù)的大規(guī)模批量處理,是一款真正意義上的大數(shù)據(jù)處理平臺;而Spark的技術核心是全棧多計算范式的高效數(shù)據(jù)流水線,使得Spark能夠完成多種復雜的任務,加之Spark是基于內(nèi)存計算,使得Spark能夠更高效的處理數(shù)據(jù),但是由于內(nèi)存的限制,Spark它是一款輕量級的大數(shù)據(jù)處理平臺。正因為設計思想的不同使得二者有著不同的實際應用。
2 Hadoop的核心技術
目前Hadoop的核心技術包括Common、HDFS、MapReduce以及Yarn四大模塊。共同構(gòu)成了Hadoop的基礎架構(gòu)。
2.1 Common:Common是Hadoop的基礎模塊,主要為生態(tài)系統(tǒng)中其他的軟件提供包括文件系統(tǒng)、RPC以及串行化庫等功能在內(nèi)的支持,為云平臺提供基本服務。
2.2 HDFS:HDFS是一個分布式文件系統(tǒng),是Hadoop的存儲核心,它可以被部署運行于大量的廉價服務器上,可以處理超大文件,它的設計是建立在"一次寫入,多次讀取的"思想之上。對于被上傳到HDFS上的數(shù)據(jù),系統(tǒng)會對其進行分塊分進行保存,分塊概念的存在是HDFS可以存儲大量文件的重要原因。HDFS中有兩個重要概念NameNode和DataNode,NameNode是中心服務器,負責管理文件系統(tǒng)命名空間以及客戶端對文件的訪問,DataNode是Hadoop集群的主體,一個存儲節(jié)點一般運行一個DataNode進程,DataNode的作用是管理本節(jié)點上所存儲的文件。
2.3 MapReduce:MapReduce是一個并行計算框架,是Hadoop的計算核心,它通過將數(shù)據(jù)分割,并行處理等底層問題進行封裝,使得用戶只需要考慮自身所關注的并行計算任務的實現(xiàn)邏輯,從而極大的簡化了分布式程序的設計,在整個計算過程中,數(shù)據(jù)始終以
2.4 Yarn:Yarn是針對Hadoop存在的JobTracker單點瓶頸,編程框架不夠靈活等問題提出的改進方案。通過將集群資源管理和作業(yè)管理分離開來,降低JobTracker的負載。其中集群資源管理由ResourceManager負責,作業(yè)管理由ApplicationMaster負責,Container負責為集群各個節(jié)點調(diào)度資源,與所有計算節(jié)點NodeManager共同構(gòu)成新的數(shù)據(jù)計算框架。
3 Spark核心技術
Spark的最主要的核心技術是RDD即彈性分布式數(shù)據(jù)集,此外還包括Spark有向無環(huán)圖DAG,Spark部署模式以及Spark架構(gòu)。
3.1 RDD:RDD是對分布式內(nèi)存數(shù)據(jù)的一個抽象,對數(shù)據(jù)的所有操作最終會轉(zhuǎn)換成對RDD的操作,RDD是數(shù)據(jù)操作的基本單位。對于RDD的操作分為Transformation(轉(zhuǎn)換)和Action(執(zhí)行),其中Transformation又包括多種基本操作例如map、filter、flatmap、groupByKey、reduceByKey、union等操作,Action操作包括count、collect、reduce等基本操作,Spark對于兩種操作采取不同機制,對于所有的轉(zhuǎn)換操作都是惰性操作,即從一個RDD通過轉(zhuǎn)換操作生成另一個RDD的過程在Spark上并不會被馬上執(zhí)行,只有在Action操作觸發(fā)時,轉(zhuǎn)換操作才會被真正執(zhí)行。
3.2 DAG:在一個Spark應用當中,數(shù)據(jù)執(zhí)行流程是以RDD組成的有向無環(huán)圖DAG的形式存在,Spark根據(jù)用戶提交的應用邏輯,繪制DAG圖,并且依據(jù)RDD之間的依賴關系,將DAG圖劃分成不同階段(stage),但是DAG繪制完成之后并不會被馬上執(zhí)行,只是起到一個標記數(shù)據(jù)集的作用。
3.3 Spark部署模式:當前Spark存在多種部署模式,包括Local模式、Standalone模式、基于Mesos的模式以及基于Yarn的部署模式。其中基于Yarn的部署模式是當前最為主流的部署模式,其核心思想是利用HadoopYarn實現(xiàn)集群資源的管理。
3.4 Spark架構(gòu):盡管Spark有不同的部署模式,但是其基本組成部分包括控制節(jié)點Master和作業(yè)控制進程Driver,資源管理器ClusterManager,執(zhí)行節(jié)點Worker和執(zhí)行單元Executor以及客戶端Client,其中Driver進程位于Master主控節(jié)點上,一個Worker節(jié)點一般維護一個Executor進程。
4 Hadoop 與Spark 特性分析
4.1 Hadoop 技術特點
a) MapReduce具有優(yōu)良的伸縮性,在Hadoop 集群當中,每當有新的計算節(jié)點加入時,MapReduce會增加該節(jié)點所具有的全部的計算能力,這是其他分布式計算框架所不具備的。
b) MapReduce為用戶提供了一套極為簡易的編程模型,即以map 函數(shù)與reduce 函數(shù)為核心的編程接口,用戶只需考慮實際應用問題的應用邏輯,而不需要考慮負載均衡,并行計算等底層細節(jié)問題,但是面對多樣性的實際問題時,缺乏多樣性和靈活性。
c) MapReduce的設計目標是為了運行批量作業(yè),處理海量數(shù)據(jù),在同等大小集群下所能處理的數(shù)據(jù)量上限要遠大于Spark,MapReduce是真正意義上的大數(shù)據(jù)計算框架。但在需要對數(shù)據(jù)進行隨機訪問時,MapReduce 明顯不能滿足。
d) MapReduce是面向磁盤存儲的,在MapReduce應用程序運行過程所有的中間數(shù)據(jù)會輸出到磁盤中,當再需要時才會將數(shù)據(jù)從磁盤調(diào)入內(nèi)存,因磁盤速度與內(nèi)存速度的差距導致了計算過程的高延遲現(xiàn)象。高延遲是MapReduce 最大的技術瓶頸。
e) 根據(jù)MapReduce的計算思想,在map 過程之后,框架會對中間數(shù)據(jù)進行一個統(tǒng)計排序(shuffle,sort),然后才將排序之后的結(jié)果交由reduce 過程處理。這種強制進行統(tǒng)計排序會增加計算耗時。
4.2 Spark 技術特點
Spark 是以MapReduce基本思想為基礎,并針對MapReduce現(xiàn)今所存在的問題而設計開發(fā)的框架。它的提出彌補了MapReduce諸多不足之處。
a) Spark 最明顯優(yōu)勢在于它的內(nèi)存計算,不同于MapReduce面向磁盤,它的數(shù)據(jù)計算在內(nèi)存中完成,產(chǎn)生的中間數(shù)據(jù)也大部分駐留在內(nèi)存中,不需要進行I/O操作,使得Spark的計算過程要遠快于MapReduce。
b) 彈性分布式數(shù)據(jù)集RDD作為Spark的核心技術,對調(diào)入內(nèi)存數(shù)據(jù)實現(xiàn)了分布式抽象劃分,使得Spark 不僅能夠進行大數(shù)據(jù)的計算,同時也可以實現(xiàn)數(shù)據(jù)的隨機查詢與分析,彌補了MapReduce 在這方面的不足。
c) 針對MapReduce計算算子的不足,Spark提出的轉(zhuǎn)換與執(zhí)行兩大類型算子,解決這個問題,使得Spark 可以支持更為復雜的數(shù)據(jù)查詢和分析任務,降低了用戶開發(fā)Spark應用時的代碼復雜度
d) 針對MapReduce的強制排序機制,Spark進行了改進,改進了shuffle 的傳輸方式,提升了其穩(wěn)定性和速度,并利用基本算子使得Spark 不用在所有場景中均進行排序,節(jié)省了計算耗時。
e) Spark的內(nèi)存計算為其帶來了速度上的優(yōu)勢,但是在容量上,內(nèi)存要遠小于磁盤,MapReduce 所能處理的數(shù)據(jù)上限要遠大于Spark,因此Spark 被定義為輕量級的大數(shù)據(jù)計算框架,而MapReduce是實際意義上的大數(shù)據(jù)計算框架。
f) 同樣由于內(nèi)存計算,Spark在計算過程中,無疑會給Java虛擬機的垃圾回收機制帶來嚴重壓力,例如當兩個Spark應用使用同樣的數(shù)據(jù)時,那么同一份數(shù)據(jù)會被緩存兩次,不但會造成較大的內(nèi)存壓力,同時也使得垃圾回收緩慢,從而影響Spark性能,導致其不穩(wěn)定。
g) 由于彈性分布式數(shù)據(jù)集的只讀特性,使得Spark只適合處理粗粒度的數(shù)據(jù)并行計算,而不適合那些異步的細粒度的更新計算。
5 結(jié)束語
Hadoop與Spark作為目前兩種針對大數(shù)據(jù)問題的解決方案,因核心技術的不同而擁有不同的特性,因此在適用場景上也有所不同,但是在大數(shù)據(jù)環(huán)境下,實際問題往往包含多種應用場景,為了解決實際問題需要Hadoop與Spark合作使用,這是當前大數(shù)據(jù)解決方案的發(fā)展趨勢。
參考文獻
[1]王軍,韓林峰,侯賓.基于Hadoop和關系型數(shù)據(jù)庫的電力用采大數(shù)據(jù)混合服務架構(gòu)[J].電子技術應用,2015(z1).
[2]胡俊,胡賢德,程家興.基于Spark的大數(shù)據(jù)混合計算模型[J].計算機系統(tǒng)應用,2015,24(4):214-218.
[3]付東華.基于HDFS的海量分布式文件系統(tǒng)的研究與優(yōu)化[D].北京:北京郵電大學,2012.
[4]繆璐瑤.Hadoop安全機制研究[D].南京:南京郵電大學,2015.
作者簡介;
胡永祥(1969年6月-),男,漢族,江蘇淮安人,江南大學通信控制工程碩士,江蘇財經(jīng)職業(yè)技術學院 教師,主要從事計算機應用領域的研究endprint