官术网_书友最值得收藏!

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)模型https://en.wikipedia.org/wiki/Bulk_synchronous_parallel,即“計算→通信→同步”模型,通過消息傳遞的方式,實(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)成。

? Sqoophttp://sqoop.apache.org//Canalhttps://github.com/alibaba/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)入。

? Flumehttp://flume.apache.org/非關(guān)系型數(shù)據(jù)收集工具,主要是流式日志數(shù)據(jù),可近實(shí)時收集,經(jīng)過濾,聚集后加載到HDFS等存儲系統(tǒng)。

? Kafkahttp://kafka.apache.org/分布式消息隊列,一般作為數(shù)據(jù)總線使用,它允許多個數(shù)據(jù)消費(fèi)者訂閱并獲取感興趣的數(shù)據(jù)。相比于其他消息隊列,它采用分布式高容錯設(shè)計,更適合大數(shù)據(jù)應(yīng)用場景。

2.?dāng)?shù)據(jù)存儲層

? 主要由分布式文件系統(tǒng)(面向文件的存儲)和分布式數(shù)據(jù)庫(面向行/列的存儲)構(gòu)成。

? HDFShttp://hadoop.apache.org/: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)SStable首先在Google BigTable論文中出現(xiàn),是BigTable內(nèi)部數(shù)據(jù)的表示方式,目前HBase, Cassandra等系統(tǒng)均有對應(yīng)的實(shí)現(xiàn)。,文本文件、二進(jìn)制key/value格式Sequence File、列式存儲格式Parquethttp://parquet.apache.org/、ORChttp://orc.apache.org/和Carbondatahttp://carbondata.apache.org/等。

? HBasehttp://hbase.apache.org/構(gòu)建在HDFS之上的分布式數(shù)據(jù)庫,Google BigTable的開源實(shí)現(xiàn),允許用戶存儲結(jié)構(gòu)化與半結(jié)構(gòu)化的數(shù)據(jù),支持行列無限擴(kuò)展以及數(shù)據(jù)隨機(jī)查找與刪除。

? Kuduhttp://getkudu.io/分布式列式存儲數(shù)據(jù)庫,允許用戶存儲結(jié)構(gòu)化數(shù)據(jù),支持行無限擴(kuò)展以及數(shù)據(jù)隨機(jī)查找與更新。

3.資源管理與服務(wù)協(xié)調(diào)

? YARNhttp://hadoop.apache.org/統(tǒng)一資源管理與調(diào)度系統(tǒng),它能夠管理集群中的各種資源(比如CPU和內(nèi)存等),并按照一定的策略分配給上層的各類應(yīng)用。YARN內(nèi)置了多種多租戶資源調(diào)度器,允許用戶按照隊列的方式組織和管理資源,且每個隊列的調(diào)度機(jī)制可獨(dú)立定制。

? ZooKeeperhttp://zookeeper.apache.org/基于簡化的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/Tezhttps://tez.apache.org/: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)中。

? Sparkhttp://spark.apache.org/通用的DAG計算引擎,它提供了基于RDD(Resilient Distributed Dataset)的數(shù)據(jù)抽象表示,允許用戶充分利用內(nèi)存進(jìn)行快速的數(shù)據(jù)挖掘和分析。

? Impalahttp://impala.io//Prestohttps://prestodb.io/分別由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ù)處理效率大大提高。

? Stormhttps://storm.apache.org//Spark Streaming:分布式流式實(shí)時計算引擎,具有良好的容錯性與擴(kuò)展性,能夠高效地處理流式數(shù)據(jù),它允許用戶通過簡單的API完成實(shí)時應(yīng)用程序的開發(fā)工作。

5.?dāng)?shù)據(jù)分析層

? 為方便用戶解決大數(shù)據(jù)問題而提供的各種數(shù)據(jù)分析工具。

? Hivehttps://hive.apache.org//Pighttp://pig.apache.org//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引擎。

? Mahouthttp://mahout.apache.org//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 Beamhttps://beam.apache.org//Cascadinghttp://www.cascading.org/基于各類計算框架而封裝的高級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處理將變得很容易。

主站蜘蛛池模板: 金秀| 宁乡县| 渝北区| 天气| 封丘县| 鱼台县| 凌云县| 剑阁县| 民权县| 竹山县| 翁牛特旗| 台前县| 长泰县| 永清县| 清苑县| 旅游| 清丰县| 海伦市| 涿州市| 伊宁市| 余庆县| 南岸区| 崇文区| 小金县| 大悟县| 米脂县| 天门市| 石河子市| 荆州市| 吉林市| 彭山县| 五原县| 民权县| 来凤县| 镇原县| 宿迁市| 兰考县| 英超| 泰州市| 梧州市| 衡南县|