無 論閱讀任何關(guān)于大數(shù)據(jù)的文章或是談?wù)撚嘘P(guān)大數(shù)據(jù)的話題,你總會聽到Hadoop或是ApacheSpark。它們兩個有時被視為大數(shù)據(jù)領(lǐng)域里數(shù)據(jù)處理技 術(shù)的競爭對手,但越來越多的共識是它們結(jié)合在一起才能更好地發(fā)揮各自的優(yōu)勢。在這篇文章里,我對它倆做了一個簡短的描述和比較。
1:它們完成的任務(wù)不同
Hadoop 和ApacheSpark都屬于大數(shù)據(jù)框架,但它們的目的并不相同。Hadoop本質(zhì)上是一個分布式的數(shù)據(jù)基礎(chǔ)架構(gòu),用戶能夠在Hadoop之上搭建各 種技術(shù)框架與工具,將海量數(shù)據(jù)通過多個節(jié)點(diǎn)分布到服務(wù)器集群,對于用戶來說這就意味著不需要購買和維護(hù)各種各樣的昂貴硬件了。Hadoop還可以對數(shù)據(jù)進(jìn) 行索引和跟蹤,從而對大數(shù)據(jù)的處理和分析實現(xiàn)了前所未有的支持能力與高效率。而Spark則是一個用來操作分布式數(shù)據(jù)收集的數(shù)據(jù)處理工具框架,它的任務(wù)并 不是對數(shù)據(jù)進(jìn)行分布式存儲。
2:它們倆可以單獨(dú)使用
在 Hadoop架構(gòu)中不僅包括了眾所周知的Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)存儲組件,還包括了MapReduce數(shù)據(jù)處理組件,所以用戶并不一定需要Spark框架來處理數(shù)據(jù)。同樣的道理,你也可以脫離 Hadoop而單獨(dú)使用Spark。需要注意Spark并沒有有自己的文件管理系統(tǒng),但無論如何它還是需要一個文件管理系統(tǒng)的,因此即便是不與HDFS集 成,Spark也必然要架在比如另一個基于云的數(shù)據(jù)平臺之上。我們知道Spark是專為Hadoop設(shè)計的,因此大家共同的意見都是它們要在一起才更好。
3:Spark的速度更快
由 于處理數(shù)據(jù)的方式更為優(yōu)化,Spark比起MapReduce來速度要快得多。MapReduce的數(shù)據(jù)處理操作是分步驟完成的,而Spark則只需一步 就能完成整個數(shù)據(jù)集的操作。“MapReduce工作流就像這樣:從集群中讀取數(shù)據(jù),執(zhí)行操作,將結(jié)果寫入集群,從集群中讀取更新后的數(shù)據(jù),執(zhí)行下一步操 作,將下一個結(jié)果寫入集群,就這樣往返重復(fù),”博思艾倫咨詢公司首席數(shù)據(jù)科學(xué)家Kirk Borne這樣解釋。而Spark則能在內(nèi)存中近乎實時的完成全部數(shù)據(jù)分析操作。“從集群中讀取數(shù)據(jù),執(zhí)行所有必要的分析操作,然后將結(jié)果寫入集群,這就 完事了,”同樣來自Kirk Borne的描述。Spark的批處理速度比MapReduce快10倍,內(nèi)存分析則比MapReduce快了100倍,他說。
4:也許你不一定需要Spark的速度
如 果你的數(shù)據(jù)操作和報告要求大多是靜態(tài)的而且有時間等待批處理模式,那么MapReduce的處理方式應(yīng)該能夠滿足需求。但是如果你需要對流數(shù)據(jù)進(jìn)行分析比 如安裝在廠房地板上的傳感器傳回的實時數(shù)據(jù),或搭建多操作應(yīng)用,你可能就需要用到Spark了,例如現(xiàn)在大多數(shù)的機(jī)器學(xué)習(xí)算法都用的是多操作模式。常見的 Spark應(yīng)用包括實時營銷活動,在線產(chǎn)品推薦,網(wǎng)絡(luò)安全分析和機(jī)器日志監(jiān)控。
5故障恢復(fù):方式不同,但效果都不錯
在 系統(tǒng)出現(xiàn)問題時,Hadoop可以自動恢復(fù)數(shù)據(jù),因為數(shù)據(jù)是在每次操作后寫入到磁盤的。Spark也有類似的內(nèi)置彈性恢復(fù)的功能,它的數(shù)據(jù)對象以彈性分布 式數(shù)據(jù)集(Resilient Distributed Datasets,RDD)的形式保存,分布在數(shù)據(jù)集群中。“這些數(shù)據(jù)對象可以存儲在內(nèi)存或磁盤中,如果系統(tǒng)出了問題,RDD能夠提供完全的故障恢 復(fù),”Kirk Borne指出。
目前越來越來多的人為了能夠分析、處理好海量數(shù)據(jù),開始不斷地學(xué)習(xí)Hadoop等相關(guān)軟件知識,可是對于這些晦澀難懂的理論知識,自己埋頭苦學(xué),顯然是不科學(xué)的。只有接受系統(tǒng)的、科學(xué)的、全面的課程教學(xué)才能獲得快速的進(jìn)步以及能力的提高。