- 大數(shù)據(jù)技術(shù)體系詳解:原理、架構(gòu)與實(shí)踐
- 董西成
- 3452字
- 2019-01-04 11:06:11
1.3 企業(yè)級大數(shù)據(jù)技術(shù)實(shí)現(xiàn)方案
真正意義上的大數(shù)據(jù)技術(shù)源于互聯(lián)網(wǎng)行業(yè),尤其是大數(shù)據(jù)技術(shù)引領(lǐng)者谷歌公司,由于其數(shù)據(jù)量大,解決的問題都是前沿的,對大數(shù)據(jù)技術(shù)的發(fā)展起到了重要的作用。本節(jié)將首先解析谷歌公司的大數(shù)據(jù)架構(gòu),之后介紹開源大數(shù)據(jù)實(shí)現(xiàn)方案。
1.3.1 Google大數(shù)據(jù)技術(shù)棧
Google在大數(shù)據(jù)方面的技術(shù),均是以發(fā)表論文的形式對外公開的,盡管其沒有對外開源系統(tǒng)實(shí)現(xiàn)代碼,但這些論文直接帶動了大數(shù)據(jù)技術(shù)的發(fā)展,尤其為大數(shù)據(jù)開源技術(shù)的發(fā)展指明了方向。Google公開發(fā)表的大數(shù)據(jù)系統(tǒng)方面的論文目前絕大部分都存在對應(yīng)的開源系統(tǒng)實(shí)現(xiàn)。總結(jié)近10年Google發(fā)表的論文,涉及的大數(shù)據(jù)系統(tǒng)如圖1-5所示,主要分布在數(shù)據(jù)存儲層、資源管理與服務(wù)協(xié)調(diào)層、計算引擎層、數(shù)據(jù)分析層這四層中。

圖1-5 Google大數(shù)據(jù)技術(shù)棧
1.?dāng)?shù)據(jù)存儲層
? GFS[GGL03]:Google文件系統(tǒng)(Google File System)是一個分布式文件系統(tǒng),具有良好的容錯性、擴(kuò)展性和可用性,尤其是容錯性表現(xiàn)突出,這使得GFS可構(gòu)建在大量普通廉價機(jī)器上,進(jìn)而容易進(jìn)行“Scale out”(橫向擴(kuò)展),相比于傳統(tǒng)的“Scale up”(向上擴(kuò)展)方案中采用的大型機(jī)或小型機(jī)等,大大降低了成本。
? BigTable[CDG+06]:構(gòu)建在GFS之上的分布式數(shù)據(jù)庫本質(zhì)上是一個稀疏的、分布式的、持久化存儲的多維度排序映射表。BigTable支持插入和更新等操作,且行數(shù)和列數(shù)可以無限擴(kuò)展,這在很大程度上彌補(bǔ)了傳統(tǒng)關(guān)系型數(shù)據(jù)庫在schema上的不靈活。
? MegaStore[BBC+11]:MegaStore是構(gòu)建在BigTable之上,支持ACID特性的分布式數(shù)據(jù)庫。它是一個具有高擴(kuò)展性并可進(jìn)行高密度交互的可用存儲服務(wù),其在Google的基礎(chǔ)系統(tǒng)之中,起初主要解決App Engine的數(shù)據(jù)存儲問題。MegaStore能夠在廣域網(wǎng)中同步復(fù)制文件寫操作,在可接受的延時下,支持跨數(shù)據(jù)中心的故障遷移。
? Spanner[CDE+13]:Spanner是一個可擴(kuò)展的、多版本、全球分布式、支持同步復(fù)制的數(shù)據(jù)庫。它是第一個把數(shù)據(jù)分布在全球范圍內(nèi)的系統(tǒng),并且支持外部一致性的分布式事務(wù)。Google官方認(rèn)為,Spanner是下一代BigTable,也是MegaStore的繼任者。
2.資源管理與服務(wù)協(xié)調(diào)層
? Borg[VPK+15]:一個集群資源管理和調(diào)度系統(tǒng),它負(fù)責(zé)集群的資源管理和統(tǒng)一調(diào)度,并對應(yīng)用程序進(jìn)行接收、啟動、停止、重啟和監(jiān)控。Borg的目的是讓開發(fā)者能夠不必操心資源管理的問題,讓他們專注于應(yīng)用程序開發(fā)相關(guān)的工作,并且做到跨多個數(shù)據(jù)中心的資源利用率最大化。
? Omega[SKA+13]:Google下一代集群資源管理和調(diào)度系統(tǒng),采用了共享狀態(tài)的架構(gòu),這使得應(yīng)用程序調(diào)度器擁有整個集群的權(quán)限,可以自由獲取資源,同時采用了基于多版本的并發(fā)訪問控制方式(又稱樂觀鎖,全稱為MⅤCC,即Multi-Ⅴersion Concurrency Control),解決潛在的資源沖突訪問問題。
? Chubby[Bur06]:該系統(tǒng)旨在為松散耦合的分布式系統(tǒng)提供粗粒度的鎖以及可靠存儲(低容量的),它提供了一個非常類似于分布式文件系統(tǒng)的接口,能夠很容易的實(shí)現(xiàn)leader選舉、分布式鎖、服務(wù)命名等分布式問題,它設(shè)計的側(cè)重點(diǎn)在可用性及可靠性而不是高性能。
3.計算引擎層
? MapReduce[DG08]:MapReduce是一個批處理計算框架,它采用“分而治之”的思想,將對大規(guī)模數(shù)據(jù)集的操作,分解成Map和Reduce兩個階段,Map階段并行處理輸入數(shù)據(jù)集,產(chǎn)生中間結(jié)果,Reduce階段則通過整合各個節(jié)點(diǎn)的中間結(jié)果,得到最終結(jié)果。簡單地說,MapReduce就是“任務(wù)的分解與結(jié)果的匯總”。MapReduce具有高吞吐率、良好的容錯性、擴(kuò)展性以及易于編程等特點(diǎn),被廣泛應(yīng)用于構(gòu)建索引、數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)等應(yīng)用中。
? Dremel[MGL+10]:Dremel是一個分布式OLAP(OnLine Analytical Processing)系統(tǒng),通過引入列式存儲、樹狀架構(gòu)等技術(shù),能夠幫助數(shù)據(jù)分析師在秒級處理PB級數(shù)據(jù)。Dremel在一定程度上彌補(bǔ)了類MapReduce系統(tǒng)在交互式查詢方面的不足。
? Pregel[MAB+10]:Pregel是一個分布式圖計算框架,專門用來解決網(wǎng)頁鏈接分析、社交數(shù)據(jù)挖掘等實(shí)際應(yīng)用中涉及的大規(guī)模分布式圖計算問題,Pregel采用了BSP(Bulk Synchronous Parallel Computing Model)模型,即“計算→通信→同步”模型,通過消息傳遞的方式,實(shí)現(xiàn)高效的迭代計算。
? Precolator[PD10]:Percolator是一個基于BigTable構(gòu)建的大數(shù)據(jù)集增量更新系統(tǒng)。其目標(biāo)是在海量的數(shù)據(jù)集上提供增量更新的能力,并通過支持分布式事務(wù)來確保增量處理過程的數(shù)據(jù)一致性和整體系統(tǒng)的可擴(kuò)展性。Percolator最初是為了解決網(wǎng)頁庫增量更新而提出了的,用以彌補(bǔ)MapReduce無法逐個處理小規(guī)模更新的缺陷。
? MillWheel[ABB+13]:MillWheel是一個分布式流式實(shí)時處理框架,它允許用戶自定義一些處理單元,并按照一定的拓?fù)浣Y(jié)構(gòu)連接在一起形成一個有向圖,從而形成一個流式處理數(shù)據(jù)線。MillWheel具有低延遲、自動處理亂序、數(shù)據(jù)嚴(yán)格一次投遞(exactly-once delivery)等優(yōu)點(diǎn),在Google被廣泛應(yīng)用于構(gòu)建低延遲數(shù)據(jù)處理應(yīng)用。
4.?dāng)?shù)據(jù)分析層
? FlumeJava[CRP+10]:FlumeJava是一個建立在MapReduce之上的Java編程庫,提供了一層高級原語以簡化復(fù)雜的MapReduce應(yīng)用程序開發(fā),非常適合構(gòu)建復(fù)雜的數(shù)據(jù)流水線。FlumeJava內(nèi)置優(yōu)化器,會自動優(yōu)化應(yīng)用程序的執(zhí)行計劃,并基于底層的原語來執(zhí)行優(yōu)化后的操作。
? Tenzing[CLL+11]:建立在MapReduce之上的SQL查詢執(zhí)行引擎,它可以將用戶編寫的SQL語句轉(zhuǎn)化為MapReduce程序,并提交到集群中分布式并行執(zhí)行。
1.3.2 Hadoop與Spark開源大數(shù)據(jù)技術(shù)棧
隨著大數(shù)據(jù)開源技術(shù)的快速發(fā)展,目前開源社區(qū)已經(jīng)積累了比較完整的大數(shù)據(jù)技術(shù)棧,應(yīng)用最廣泛的是以Hadoop與Spark為核心的生態(tài)系統(tǒng),具體如圖1-6所示,整個大數(shù)據(jù)技術(shù)棧涉及數(shù)據(jù)收集、數(shù)據(jù)存儲、資源管理與服務(wù)協(xié)調(diào)、計算引擎和數(shù)據(jù)分析這五個層級。

圖1-6 Hadoop與Spark大數(shù)據(jù)技術(shù)棧
1.?dāng)?shù)據(jù)收集層:
? 主要由關(guān)系型與非關(guān)系型數(shù)據(jù)收集組件,分布式消息隊列構(gòu)成。
? Sqoop/Canal
:關(guān)系型數(shù)據(jù)收集和導(dǎo)入工具,是連接關(guān)系型數(shù)據(jù)庫(比如MySQL)和Hadoop(比如HDFS)的橋梁,Sqoop可將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)全量導(dǎo)入Hadoop,反之亦可,而Canal則可用于實(shí)現(xiàn)數(shù)據(jù)的增量導(dǎo)入。
? Flume:非關(guān)系型數(shù)據(jù)收集工具,主要是流式日志數(shù)據(jù),可近實(shí)時收集,經(jīng)過濾,聚集后加載到HDFS等存儲系統(tǒng)。
? Kafka:分布式消息隊列,一般作為數(shù)據(jù)總線使用,它允許多個數(shù)據(jù)消費(fèi)者訂閱并獲取感興趣的數(shù)據(jù)。相比于其他消息隊列,它采用分布式高容錯設(shè)計,更適合大數(shù)據(jù)應(yīng)用場景。
2.?dāng)?shù)據(jù)存儲層
? 主要由分布式文件系統(tǒng)(面向文件的存儲)和分布式數(shù)據(jù)庫(面向行/列的存儲)構(gòu)成。
? HDFS:Hadoop分布式文件系統(tǒng),Google GFS的開源實(shí)現(xiàn),具有良好的擴(kuò)展性與容錯性等優(yōu)點(diǎn),尤其是出色的容錯機(jī)制設(shè)計,使得它非常適合構(gòu)建在廉價機(jī)器上,這大大降低了大數(shù)據(jù)存儲成本。目前開源社區(qū)已經(jīng)開發(fā)了各種類型的數(shù)據(jù)存儲格式,包括SSTable(Sorted String Table)
,文本文件、二進(jìn)制key/value格式Sequence File、列式存儲格式Parquet
、ORC
和Carbondata
等。
? HBase:構(gòu)建在HDFS之上的分布式數(shù)據(jù)庫,Google BigTable的開源實(shí)現(xiàn),允許用戶存儲結(jié)構(gòu)化與半結(jié)構(gòu)化的數(shù)據(jù),支持行列無限擴(kuò)展以及數(shù)據(jù)隨機(jī)查找與刪除。
? Kudu:分布式列式存儲數(shù)據(jù)庫,允許用戶存儲結(jié)構(gòu)化數(shù)據(jù),支持行無限擴(kuò)展以及數(shù)據(jù)隨機(jī)查找與更新。
3.資源管理與服務(wù)協(xié)調(diào)
? YARN:統(tǒng)一資源管理與調(diào)度系統(tǒng),它能夠管理集群中的各種資源(比如CPU和內(nèi)存等),并按照一定的策略分配給上層的各類應(yīng)用。YARN內(nèi)置了多種多租戶資源調(diào)度器,允許用戶按照隊列的方式組織和管理資源,且每個隊列的調(diào)度機(jī)制可獨(dú)立定制。
? ZooKeeper:基于簡化的Paxos協(xié)議實(shí)現(xiàn)的服務(wù)協(xié)調(diào)系統(tǒng),它提供了類似于文件系統(tǒng)的數(shù)據(jù)模型,允許用戶通過簡單的API實(shí)現(xiàn)leader選舉、服務(wù)命名、分布式隊列與分布式鎖等復(fù)雜的分布式通用模塊。
4.計算引擎層
? 包含批處理,交互式處理和流式實(shí)時處理三種引擎。
? MapReduce/Tez:MapReduce是一個經(jīng)典的批處理計算引擎,它是Google MapReduce的開源實(shí)現(xiàn),具有良好的擴(kuò)展性與容錯性,允許用戶通過簡單的API編寫分布式程序;Tez是基于MapReduce開發(fā)的通用DAG(Directed Acyclic Graph的簡稱,有向無環(huán)圖)計算引擎,能夠更加高效地實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)處理邏輯,目前被應(yīng)用在Hive、Pig等數(shù)據(jù)分析系統(tǒng)中。
? Spark:通用的DAG計算引擎,它提供了基于RDD(Resilient Distributed Dataset)的數(shù)據(jù)抽象表示,允許用戶充分利用內(nèi)存進(jìn)行快速的數(shù)據(jù)挖掘和分析。
? Impala/Presto
:分別由Cloudera和Facebook開源的MPP(MassivelyParallel Processing)系統(tǒng),允許用戶使用標(biāo)準(zhǔn)SQL處理存儲在Hadoop中的數(shù)據(jù)。它們采用了并行數(shù)據(jù)庫架構(gòu),內(nèi)置了查詢優(yōu)化器,查詢下推,代碼生成等優(yōu)化機(jī)制,使得大數(shù)據(jù)處理效率大大提高。
? Storm/Spark Streaming:分布式流式實(shí)時計算引擎,具有良好的容錯性與擴(kuò)展性,能夠高效地處理流式數(shù)據(jù),它允許用戶通過簡單的API完成實(shí)時應(yīng)用程序的開發(fā)工作。
5.?dāng)?shù)據(jù)分析層
? 為方便用戶解決大數(shù)據(jù)問題而提供的各種數(shù)據(jù)分析工具。
? Hive/Pig
/SparkSQL:在計算引擎之上構(gòu)建的支持SQL或腳本語言的分析系統(tǒng),大大降低了用戶進(jìn)行大數(shù)據(jù)分析的門檻。其中,Hive是基于MapReduce/Tez實(shí)現(xiàn)的SQL引擎,Pig是基于MapReduce/Tez實(shí)現(xiàn)的工作流引擎,SparkSQL是基于Spark實(shí)現(xiàn)的SQL引擎。
? Mahout/MLlib:在計算引擎之上構(gòu)建的機(jī)器學(xué)習(xí)庫實(shí)現(xiàn)了常用的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘算法。其中,Mahout最初是基于MapReduce實(shí)現(xiàn)的,目前正逐步遷移到Spark引擎上,MLlib是基于Spark實(shí)現(xiàn)的。
? Apache Beam/Cascading
:基于各類計算框架而封裝的高級API,方便用戶構(gòu)建復(fù)雜的數(shù)據(jù)流水線。Apache Beam統(tǒng)一了批處理和流式處理兩類計算框架,提供了更高級的API方便用戶編寫與具體計算引擎無關(guān)的邏輯代碼;Cascading內(nèi)置了查詢計劃優(yōu)化器,能夠自動優(yōu)化用戶實(shí)現(xiàn)的數(shù)據(jù)流。采用了面向tuple的數(shù)據(jù)模型,如果你的數(shù)據(jù)可表示成類似于數(shù)據(jù)庫行的格式,則使用Cascading處理將變得很容易。
- Redis使用手冊
- 云數(shù)據(jù)中心基礎(chǔ)
- Hands-On Machine Learning with Microsoft Excel 2019
- DB29forLinux,UNIX,Windows數(shù)據(jù)庫管理認(rèn)證指南
- Visual Studio 2015 Cookbook(Second Edition)
- Redis應(yīng)用實(shí)例
- 分布式數(shù)據(jù)庫系統(tǒng):大數(shù)據(jù)時代新型數(shù)據(jù)庫技術(shù)(第3版)
- 云計算與大數(shù)據(jù)應(yīng)用
- Hadoop大數(shù)據(jù)實(shí)戰(zhàn)權(quán)威指南(第2版)
- MySQL技術(shù)內(nèi)幕:SQL編程
- 聯(lián)動Oracle:設(shè)計思想、架構(gòu)實(shí)現(xiàn)與AWR報告
- MySQL數(shù)據(jù)庫實(shí)用教程
- 信息融合中估計算法的性能評估
- 推薦系統(tǒng)全鏈路設(shè)計:原理解讀與業(yè)務(wù)實(shí)踐
- AI Crash Course