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