隨著互聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)的發(fā)展,時下我們正處在一個大數(shù)據(jù)的時代。在數(shù)據(jù)金山的誘惑下,各個機構(gòu)紛紛開始探索從數(shù)據(jù)中提取洞見并指導(dǎo)實踐的可能。而在這個需求的刺激下,在過去數(shù)年,大數(shù)據(jù)開源生態(tài)圈得到了長足的發(fā)展——在數(shù)據(jù)的整個生命周期中,從收集到處理,一直到數(shù)據(jù)可視化和儲存,各種開源技術(shù)框架林立。
以這些開源技術(shù)為基石,業(yè)內(nèi)涌現(xiàn)出一系列令人敬佩的大數(shù)據(jù)架構(gòu)實踐,而在本文中,筆者將帶大家一覽這些精彩實踐賴以成型的根本——繁華的開源大數(shù)據(jù)生態(tài)圈。
資源調(diào)度與管理
談海量數(shù)據(jù)處理,機構(gòu)首先面臨的就是對系統(tǒng)進(jìn)行擴(kuò)展,其中又分為縱向擴(kuò)展和橫向擴(kuò)展兩種方式。首先看縱向擴(kuò)展,對于大型IT機構(gòu)來說,拋開成本不談,用單機去應(yīng)對海量數(shù)據(jù)顯然已不切實際,因此各個機構(gòu)不得不在橫向擴(kuò)展上尋找出路,也就是所謂的集群計算方式。聚焦集群計算,資源調(diào)度無疑構(gòu)成了整個計算模式的基礎(chǔ)。在這個領(lǐng)域,YARN無疑最為耀眼,被廣泛部署于生產(chǎn)環(huán)境。然而,受限于資源粒度控制和隔離性等問題,Mesos同樣備受矚目,并在一些擁有深厚技術(shù)資本的公司得以使用,比如Apple、Twitter等。
分布式文件系統(tǒng)
在資源調(diào)度之外,大數(shù)據(jù)這一塊最主要的基礎(chǔ)無疑當(dāng)屬分布式文件系統(tǒng),而歷經(jīng)數(shù)年發(fā)展,HDFS顯然已獨占鰲頭,同時也是MapReduce、Spark和Flink等系統(tǒng)的默認(rèn)文件系統(tǒng)。關(guān)于HDFS細(xì)節(jié)相信已無需詳述。
出于業(yè)務(wù)對速度的追求,在內(nèi)存速度遠(yuǎn)高于磁盤價格又逐漸降低的情況下,機構(gòu)使用內(nèi)存來緩存大量數(shù)據(jù)已愈來愈普遍。而基于當(dāng)下內(nèi)存計算框架存在的普遍挑戰(zhàn),內(nèi)存文件系統(tǒng)Tachyon得到了顯著地關(guān)注,并在大量場景中得以部署,就拿下文提到的Spark來說:可以用作不同計算框架的數(shù)據(jù)共享,以避免磁盤IO;用以緩存數(shù)據(jù),從而避免了JVM崩潰時的數(shù)據(jù)丟失并緩解GC開銷。此外,Tachyon還被用作遠(yuǎn)程數(shù)據(jù)緩存,服務(wù)于即席查詢。在內(nèi)存為王的時代,Tachyon前景不可小覷。
分布式計算類別
時至今日,隨著業(yè)務(wù)的不斷發(fā)展,分布式計算可大體分為3個方向——批處理、流計算和即席查詢。而針對這3個不同領(lǐng)域,大數(shù)據(jù)生態(tài)圈內(nèi)同樣存在大量值得參考的框架。
1. 批處理
在開源大數(shù)據(jù)處理上,業(yè)內(nèi)最早接觸的無疑就是MapReduce,同時也是當(dāng)下生產(chǎn)環(huán)境部署最多的計算框架。然而正如上文所述,缺乏對內(nèi)存的有效利用,效率比較低的MapReduce同樣面臨著大量的競爭者,其中兩個備受關(guān)注的就是Spark和Flink。
Spark出自伯克利AMPLab之手,基于Scala實現(xiàn),從開源至今已吸引了越來越多企業(yè)的落地使用,僅國內(nèi)比較知名的大規(guī)模部署就有百度、阿里、騰訊等。Spark最主要抽象概念是彈性分布式數(shù)據(jù)集(RDD),在內(nèi)存中儲存數(shù)據(jù),只有在需要時才會訪問磁盤,在迭代計算上具有明顯優(yōu)勢。同時需要注意的是,Spark并不是一個完全基于內(nèi)存的計算平臺。
Flink于今年躋身Apache頂級開源項目,與HDFS完全兼容。Flink提供了基于Java和Scala的API,是一個高效、分布式的通用大數(shù)據(jù)分析引擎,其主要借鑒了MPP的思路。更主要的是,F(xiàn)link支持增量迭代計算,從而系統(tǒng)可以快速地處理數(shù)據(jù)密集型和迭代任務(wù);同時,即使內(nèi)存被耗盡,通過內(nèi)存管理組件、序列化框架和類型推理引擎,F(xiàn)link也可以正常運行。
2.流計算
當(dāng)下知名度比較高的開源流式計算框架有Storm/JStorm、Spark Streaming、Flink、S4、Samza。其中S4出現(xiàn)的比較早,但是基于該項目的活躍度,這里不再討論。
Storm編程模型簡單,顯著地降低了進(jìn)行實時處理的難度,也是當(dāng)下最人氣的流計算框架之一。同時,對比其他計算框架,Storm有一個更低的延時(毫秒級)。此外,歷經(jīng)數(shù)年發(fā)展,Storm也更加成熟,在容錯性、擴(kuò)展性、可靠性上都有不俗的表現(xiàn)。
Samza出自于LinkedIn,構(gòu)建在Kafka之上的分布式流計算框架,于今年年初躋身于Apache頂級開源項目。與Storm的區(qū)別是,Samza可以直接利用YARN。
Spark Streaming。嚴(yán)格來講,Spark Streaming該歸屬于批處理,其處理機制是將數(shù)據(jù)流分解成一系列小的RDD,通過時間窗來控制數(shù)據(jù)塊的大小。 雖然Spark Streaming在實時性上略微遜色,但卻擁有更大的吞吐,并且可以輕松的與Spark其它組件結(jié)合,發(fā)揮更強大的作用。