大數(shù)據(jù)處理系統(tǒng)關(guān)鍵層次架構(gòu)
在數(shù)據(jù)存儲(chǔ)層,還有很多類似的系統(tǒng)和某些系統(tǒng)的變種,這里,我僅僅列出較為出名的幾個(gè)。如漏掉某些重要系統(tǒng),還請(qǐng)諒解。
一、數(shù)據(jù)存儲(chǔ)層
寬泛地講,據(jù)對(duì)一致性(consistency)要求的強(qiáng)弱不同,分布式數(shù)據(jù)存儲(chǔ)策略,可分為ACID和BASE兩大陣營(yíng)。
ACID是指數(shù)據(jù)庫事務(wù)具有的四個(gè)特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。ACID中的一致性要求比較強(qiáng),事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。
BASE對(duì)一致性要求較弱,它的三個(gè)特征分別是:基本可用(Basically Available), 軟狀態(tài)/柔性事務(wù)(Soft-state,即狀態(tài)可以有一段時(shí)間的不同步), 最終一致性(Eventual consistency)。BASE還進(jìn)一步細(xì)分基于鍵值的,基于文檔的和基于列和圖形的 – 細(xì)分的依據(jù)取決于底層架構(gòu)和所支持的數(shù)據(jù)結(jié)構(gòu)(注:BASE完全不同于ACID模型,它以犧牲強(qiáng)一致性,獲得基本可用性和柔性可靠性,并要求達(dá)到最終一致性)。
在數(shù)據(jù)存儲(chǔ)層,還有很多類似的系統(tǒng)和某些系統(tǒng)的變種,這里,我僅僅列出較為出名的幾個(gè)。如漏掉某些重要系統(tǒng),還請(qǐng)諒解。
1、BASE
(1)鍵值存儲(chǔ)(Key Value Stores)
Dynamo:這是由亞馬遜工程師們?cè)O(shè)計(jì)的基于鍵值的高可用的分布式存儲(chǔ)系統(tǒng)(注:Dynamo放棄了數(shù)據(jù)建模的能力,所有的數(shù)據(jù)對(duì)象采用最簡(jiǎn)單的Key-value模型存儲(chǔ),可簡(jiǎn)單地將Dynamo理解為一個(gè)巨大的Map。Dynamo是犧牲了部分一致性,來換取整個(gè)系統(tǒng)的高可用性)。
Cassandra:這是由Facebook工程師設(shè)計(jì)的一個(gè)離散的分布式結(jié)構(gòu)化存儲(chǔ)系統(tǒng),受亞馬遜的Dynamo啟發(fā),Cassandra采用的是面向多維的鍵值或面向列的數(shù)據(jù)存儲(chǔ)格式(注:Cassandra可用來管理分布在大量廉價(jià)服務(wù)器上的巨量結(jié)構(gòu)化數(shù)據(jù),并同時(shí)提供沒有單點(diǎn)故障的高可用服務(wù))。
Voldemort:這又是一個(gè)受亞馬遜的Dynamo啟發(fā)的分布式存儲(chǔ)作品,由全球***的職業(yè)社交網(wǎng)站LinkedIn的工程師們開發(fā)而成。
(2)面向列的存儲(chǔ)(Column Oriented Stores)
BigTable:Bigtable是一個(gè)基于Google文件系統(tǒng)的分布式數(shù)據(jù)存儲(chǔ)系統(tǒng),是為谷歌打拼天下的“三駕馬車”之一,另外兩駕馬車分別是分布式鎖服務(wù)系統(tǒng)Chubby和下文將提到的MapReduce。
HBase:Hbase是一個(gè)分布式的、面向列的開源數(shù)據(jù)庫。其設(shè)計(jì)理念源自谷歌的 BigTable,用Java語言編寫而成。
Hypertable:Hypertable也是一個(gè)開源、高性能、可伸縮的數(shù)據(jù)庫,它采用與Google的Bigtable類似的模型。
(3)面向文檔的存儲(chǔ)(Document Oriented Stores)
CouchDB:這是一款面向文檔的、開源數(shù)據(jù)存儲(chǔ)管理系統(tǒng)。
MongoDB:是目前非常流行的一種非關(guān)系型(NoSQL)數(shù)據(jù)庫。
(4)面向圖(Graph)的存儲(chǔ)
Neo4j:Neo4j是一款目前最為流行的高性能NoSQL 圖數(shù)據(jù)庫,它使用圖來描述數(shù)據(jù)模型,把數(shù)據(jù)保存為圖中的節(jié)點(diǎn)以及節(jié)點(diǎn)之間的關(guān)系。這是***的圖數(shù)據(jù)庫。
Titan:Titan是一款A(yù)pache許可證框架下的分布式的開源圖數(shù)據(jù)庫,特別為存儲(chǔ)和處理大規(guī)模圖而做了大量?jī)?yōu)化。
2、ACID
Megastore:這是一個(gè)構(gòu)建于BigTable之上的、高可用的分布式存儲(chǔ)系統(tǒng)。
Spanner:這是由谷歌研發(fā)的、可擴(kuò)展的、全球分布式的、同步復(fù)制數(shù)據(jù)庫,支持SQL查詢?cè)L問。
MESA:亦是由谷歌研發(fā)的、跨地域復(fù)制(geo-replicated)、高可用的、可容錯(cuò)的、可擴(kuò)展的近實(shí)時(shí)數(shù)據(jù)倉庫系統(tǒng)。
CockroachDB:該系統(tǒng)是由Google前工程師Spencer Kimball領(lǐng)導(dǎo)開發(fā)的Spanner 的開源版本。
二、資源管理器層(Resource Managers)
***代Hadoop的生態(tài)系統(tǒng),其資源管理是以整體單一的調(diào)度器起家的,其代表作品為YARN。而當(dāng)前的調(diào)度器則是朝著分層調(diào)度的方向演進(jìn)(Mesos則是這個(gè)方向的代表作),這種分層的調(diào)度方式,可以管理不同類型的計(jì)算工作負(fù)載,從而可獲取更高的資源利用率和調(diào)度效率。
YARN:這是新一代的MapReduce計(jì)算框架,簡(jiǎn)稱MRv2,它是在***代MapReduce的基礎(chǔ)上演變而來的(注:MRv2的設(shè)計(jì)初衷是,為了解決***代Hadoop系統(tǒng)擴(kuò)展性差、不支持多計(jì)算框架等問題。
Mesos:這是一個(gè)開源的計(jì)算框架,可對(duì)多集群中的資源做彈性管理。
這些計(jì)算框架和調(diào)度器之間是松散耦合的,調(diào)度器的主要功能就是基于一定的調(diào)度策略和調(diào)度配置,完成作業(yè)調(diào)度,以達(dá)到工作負(fù)載均衡,使有限的資源有較高的利用率。
三、調(diào)度器(Schedulers)
(1)作業(yè)調(diào)度器,通常以插件的方式加載于計(jì)算框架之上,常見的作業(yè)調(diào)度器有4種:
- 計(jì)算能力調(diào)度器
 - 公平調(diào)度器
 - 延遲調(diào)度
 - 公平與能力調(diào)度器
 
(2)協(xié)調(diào)器(Coordination)
在分布式數(shù)據(jù)系統(tǒng)中,協(xié)調(diào)器主要用于協(xié)調(diào)服務(wù)和進(jìn)行狀態(tài)管理。
Paxos:Google的Chubby和Apache的Zookeeper,都是用Paxos作為其理論基礎(chǔ)實(shí)現(xiàn)的。
Chubby:本質(zhì)上就是前文提到的Paxos的一個(gè)實(shí)現(xiàn)版本,主要用于谷歌分布式鎖服務(wù)。
Zookeeper:這是Apache Hadoop框架下的Chubby開源版本。它不僅僅提供簡(jiǎn)單地上鎖服務(wù),而事實(shí)上,它還是一個(gè)通用的分布式協(xié)調(diào)器,其設(shè)計(jì)靈感來自谷歌的Chubby。
在數(shù)據(jù)存儲(chǔ)層,還有很多類似的系統(tǒng)和某些系統(tǒng)的變種,這里,我僅僅列出較為出名的幾個(gè)。如漏掉某些重要系統(tǒng),還請(qǐng)諒解。
四、計(jì)算框架(Computational Frameworks)
(0)運(yùn)行時(shí)計(jì)算框架
可為不同種類的計(jì)算,提供運(yùn)行時(shí)(runtime)環(huán)境。最常用的是運(yùn)行時(shí)計(jì)算框架是Spark和Flink。
Spark:Spark是一個(gè)基于內(nèi)存計(jì)算的開源的集群計(jì)算系統(tǒng),其目的在于,讓數(shù)據(jù)分析更加快速。Spark是由加州大學(xué)伯克利分校的AMP實(shí)驗(yàn)室采用Scala語言開發(fā)而成。Spark的內(nèi)存計(jì)算框架,適合各種迭代算法和交互式數(shù)據(jù)分析,能夠提升大數(shù)據(jù)處理的實(shí)時(shí)性和準(zhǔn)確性,現(xiàn)已逐漸獲得很多企業(yè)的支持,如阿里巴巴、百度、網(wǎng)易、英特爾等公司均是其用戶。
Flink:這是一個(gè)非常類似于Spark的計(jì)算框架,但在迭代式數(shù)據(jù)處理上,比Spark更給力(注:目前大數(shù)據(jù)分析引擎Flink,已升級(jí)成為Apache***項(xiàng)目)。
Spark和Flink都屬于基礎(chǔ)性的大數(shù)據(jù)處理引擎。具體的計(jì)算框架,大體上,可根據(jù)采用的模型及延遲的處理不同,來進(jìn)行分門別類。
(1)批處理(Batch)
MapReduce
(2)迭代式(BSP)
Pregel:Pregel是一種面向圖算法的分布式編程框架,其采用的是迭代式的計(jì)算模型。它被稱之為Google后Hadoop時(shí)代的新“三駕馬車”之一。另外兩駕馬車分別是:“交互式”大數(shù)據(jù)分析系統(tǒng)Dremel和網(wǎng)絡(luò)搜索引擎Caffeine。
Giraph:該系統(tǒng)建模于谷歌的Pregel,可視為Pregel的開源版本,它是一個(gè)基于 Hadoop架構(gòu)的、可擴(kuò)展的分布式迭代圖處理系統(tǒng)。
GraphX:這是一個(gè)同時(shí)采用圖并行計(jì)算和數(shù)據(jù)并行的計(jì)算框架,GraphX***是加州大學(xué)伯克利分校AMPLab實(shí)驗(yàn)室的一個(gè)分布式圖計(jì)算框架項(xiàng)目,后來整合到Spark中,成為其中的一個(gè)核心組件。GraphX***的貢獻(xiàn)在于,在Spark之上提供一棧式數(shù)據(jù)解決方案,可方便高效地完成圖計(jì)算的一整套流水作業(yè)。
Hama:是一個(gè)構(gòu)建Hadoop之上的基于BSP模型的分布式計(jì)算引擎,Hama的運(yùn)行環(huán)境需要關(guān)聯(lián) Zookeeper、HBase、HDFS 組件。Hama中最關(guān)鍵的技術(shù),就是采用了BSP模型(Bulk Synchronous Parallel,即整體同步并行計(jì)算模型,又名大同步模型)。
(3)流式(Streaming)
Storm:Storm有時(shí)也被人們稱為實(shí)時(shí)處理領(lǐng)域的Hadoop,它大大簡(jiǎn)化了面向龐大規(guī)模數(shù)據(jù)流的處理機(jī)制,從而在實(shí)時(shí)處理領(lǐng)域扮演著重要角色。
Samza:這是一款由Linkedin公司開發(fā)的分布式的流式數(shù)據(jù)處理框架(注:所謂流式數(shù)據(jù),是指要在處理單位內(nèi)得到的數(shù)據(jù),這種方式更注重于實(shí)時(shí)性,流式數(shù)據(jù)有時(shí)也稱為快數(shù)據(jù))。
Spark流:Spark Streaming是Spark 核心API的一個(gè)擴(kuò)展,它并不會(huì)像Storm那樣逐個(gè)處理數(shù)據(jù)流,而是在處理前,按時(shí)間間隔預(yù)先將其切分為很多小段的批處理作業(yè)。
(4)交互式(Interactive)
Dremel該論文是多個(gè)基于Hadoop的開源SQL系統(tǒng)的理論基礎(chǔ)。
Impala:這是一個(gè)大規(guī)模并行處理(MPP)式 SQL 大數(shù)據(jù)分析引擎,Impala像Dremel一樣,其借鑒了MPP(Massively Parallel Processing,大規(guī)模并行處理)并行數(shù)據(jù)庫的思想,拋棄了MapReduce這個(gè)不太適合做SQL查詢的范式,從而讓Hadoop支持處理交互式的工作負(fù)載。
Drill:這是谷歌 Dremel的開源版本,Drill是一個(gè)低延遲的、能對(duì)海量數(shù)據(jù)(包括結(jié)構(gòu)化、半結(jié)構(gòu)化及嵌套數(shù)據(jù))實(shí)施交互式查詢的分布式數(shù)據(jù)引擎。
Shark:Shark即“Hive on Spark”的含義,本質(zhì)上是通過Hive的HQL解析,把HQL翻譯成Spark上的RDD操作。然后通過Hive的元數(shù)據(jù)獲,取數(shù)據(jù)庫里的表信息。HDFS上的數(shù)據(jù)和文件,***會(huì)由Shark獲取,并放到Spark上運(yùn)算。Shark基于 Scala語言的算子推導(dǎo),可實(shí)現(xiàn)良好的容錯(cuò)機(jī)制,對(duì)執(zhí)行失敗的長(zhǎng)/短任務(wù),均能從上一個(gè)“快照點(diǎn)(Snapshot)”進(jìn)行快速恢復(fù)。
Dryad:Dryad是一個(gè)通用的粗顆粒度的分布式計(jì)算和資源調(diào)度引擎,其核心特性之一,就是允許用戶自己構(gòu)建DAG調(diào)度拓?fù)鋱D。
Tez:其核心思想來源于Dryad,可視為利用Yarn(即MRv2)對(duì)Dryad的開源實(shí)現(xiàn)。Apache Tez是基于Hadoop Yarn之上的DAG計(jì)算框架。
BlinkDB:可在抽樣數(shù)據(jù)上實(shí)現(xiàn)交互式查詢,其呈現(xiàn)出的查詢結(jié)果,附帶有誤差標(biāo)識(shí)。BlinkDB 是一個(gè)用于在海量數(shù)據(jù)上運(yùn)行交互式 SQL 查詢的大規(guī)模并行查詢引擎。BlinkDB允許用戶通過適當(dāng)降低數(shù)據(jù)精度,對(duì)數(shù)據(jù)進(jìn)行先采樣后計(jì)算,其通過其獨(dú)特的優(yōu)化技術(shù),實(shí)現(xiàn)了比Hive快百倍的交互式查詢速度,而查詢進(jìn)度誤差僅降低2~10%。
(5)實(shí)時(shí)系統(tǒng)(RealTime)
Druid:這是一個(gè)開源的分布式實(shí)時(shí)數(shù)據(jù)分析和存儲(chǔ)系統(tǒng),旨在快速處理大規(guī)模的數(shù)據(jù),并能做到快速查詢和分析。
Pinot:這是由LinkedIn公司出品的一個(gè)開源的、實(shí)時(shí)分布式的 OLAP數(shù)據(jù)分析存儲(chǔ)系統(tǒng),非常類似于前面提到的Druid,LinkedIn 使用它實(shí)現(xiàn)低延遲可伸縮的實(shí)時(shí)分析。
五、數(shù)據(jù)分析層(Data Analysis)
數(shù)據(jù)分析層中的工具,涵蓋范圍很廣,從諸如SQL的聲明式編程語言,到諸如Pig的過程化編程語言,均有涉及。另一方面,數(shù)據(jù)分析層中的庫也很豐富,可支持常見的數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)算法,這些類庫可拿來即用,甚是方便。
(1)工具(Tools)
Pig:Pig Latin原是一種兒童黑話,屬于是一種英語語言游戲,形式是在英語上加上一點(diǎn)規(guī)則使發(fā)音改變,讓大人們聽不懂,從而完成孩子們獨(dú)懂的交流。雅虎的工程師們于2008年發(fā)表在SIGMOD的一篇論文,論文的題目是“Pig Latin:并不是太老外的一種數(shù)據(jù)語言”,言外之意,他們發(fā)明了一種數(shù)據(jù)處理的“黑話”——Pig Latin,一開始你可能不懂,等你熟悉了,就會(huì)發(fā)現(xiàn)這種數(shù)據(jù)查詢語言的樂趣所在。
Hive:Hive是一個(gè)建立于 Hadoop 上的數(shù)據(jù)倉庫基礎(chǔ)構(gòu)架。它用來進(jìn)行數(shù)據(jù)的提取、轉(zhuǎn)化和加載(即Extract-Transform-Load ,ETL),它是一種可以存儲(chǔ)、查詢和分析存儲(chǔ)在 Hadoop 中的大規(guī)模數(shù)據(jù)的機(jī)制。
Phoenix:它是 HBase 的 SQL 驅(qū)動(dòng),Phoenix可將 SQL 查詢轉(zhuǎn)成 HBase 的掃描及相應(yīng)的動(dòng)作。
(2)庫(Libraires)
MLlib:這是在Spark計(jì)算框架中對(duì)常用的機(jī)器學(xué)習(xí)算法的實(shí)現(xiàn)庫,該庫還包括相關(guān)的測(cè)試和數(shù)據(jù)生成器。
SparkR:這是AMPLab發(fā)布的一個(gè)R開發(fā)包,為Apache Spark提供輕量級(jí)的前端。
Mahout:這是一個(gè)功能強(qiáng)大的數(shù)據(jù)挖掘工具,是一個(gè)基于傳統(tǒng)Map Reduce的分布式機(jī)器學(xué)習(xí)框架,Mahout的中文含義就是“馭象之人”,而Hadoop的Logo正是一頭小黃象。很明顯,這個(gè)庫是幫助用戶用好Hadoop這頭難用的大象。
六、數(shù)據(jù)集成層(Data Integration)
數(shù)據(jù)集成框架提供了良好的機(jī)制,以協(xié)助高效地?cái)z取和輸出大數(shù)據(jù)系統(tǒng)之間的數(shù)據(jù)。從業(yè)務(wù)流程線到元數(shù)據(jù)框架,數(shù)據(jù)集成層皆有涵蓋,從而提供全方位的數(shù)據(jù)在整個(gè)生命周期的管理和治理。
(1)攝入/消息傳遞(Ingest/Messaging)
Flume:這是Apache旗下的一個(gè)分布式的、高可靠的、高可用的服務(wù)框架,可協(xié)助從分散式或集中式數(shù)據(jù)源采集、聚合和傳輸海量日志。
Sqoop:該系統(tǒng)主要用來在Hadoop和關(guān)系數(shù)據(jù)庫中傳遞數(shù)據(jù),Sqoop目前已成為Apache的***項(xiàng)目之一。
Kafka:這是由LinkedIn開發(fā)的一個(gè)分布式消息系統(tǒng),由Scala編寫而成。由于可水平擴(kuò)展、吞吐率高等特性,得到廣泛應(yīng)用。
(2)ETL/工作流
ETL是數(shù)據(jù)抽取(Extract)、清洗(Cleaning)、轉(zhuǎn)換(Transform)、裝載(Load)的過程,是構(gòu)建數(shù)據(jù)倉庫的重要一環(huán)。
Crunch:這是Apache旗下的一套Java API函數(shù)庫,它能夠大大簡(jiǎn)化編寫、測(cè)試、運(yùn)行MapReduce 處理工作流的程序。
Falcon:這是Apache旗下的Falcon大數(shù)據(jù)管理框架,可以幫助用戶自動(dòng)遷移和處理大數(shù)據(jù)集合。
Cascading:這是一個(gè)架構(gòu)在Hadoop上的API函數(shù)庫,用來創(chuàng)建復(fù)雜的可容錯(cuò)的數(shù)據(jù)處理工作流。
Oozie:是一個(gè)工作流引擎,用來協(xié)助Hadoop作業(yè)管理,Oozie字面含義是馴象之人,其寓意和Mahout一樣,幫助用戶更好地搞定Hadoop這頭大象。
(3)元數(shù)據(jù)(Metadata)
HCatalog: 它提供了面向Apache Hadoop的數(shù)據(jù)表和存儲(chǔ)管理服務(wù),Apache HCatalog提供一個(gè)共享的模式和數(shù)據(jù)類型的機(jī)制,它抽象出表,使用戶不必關(guān)心數(shù)據(jù)怎么存儲(chǔ),并提供了可操作的跨數(shù)據(jù)處理工具。
(4)序列化(Serialization)
Protocol Buffers:由Google推廣的一種與語言無關(guān)的、對(duì)結(jié)構(gòu)化數(shù)據(jù)進(jìn)行序列化和反序列化的機(jī)制。
Avro:這是一個(gè)建模于Protocol Buffers之上的、Hadoop生態(tài)系統(tǒng)中的子項(xiàng)目,Avro本身既是一個(gè)序列化框架,同時(shí)也實(shí)現(xiàn)了RPC的功能。
七、操作框架(Operational Frameworks)
***,我們還需要一個(gè)操作性框架,來構(gòu)建一套衡量標(biāo)準(zhǔn)和測(cè)試基準(zhǔn),從而來評(píng)價(jià)各種計(jì)算框架的性能優(yōu)劣。在這個(gè)操作性框架中,還需要包括性能優(yōu)化工具,借助它來平衡工作負(fù)載。
(1)監(jiān)測(cè)管理框架(Monitoring Frameworks)
OpenTSDB:這是構(gòu)建于HBase之上的實(shí)時(shí)性能評(píng)測(cè)系統(tǒng)。
Ambari:這是一款基于Web的系統(tǒng),支持Apache Hadoop集群的供應(yīng)、管理和監(jiān)控。
(2)基準(zhǔn)測(cè)試(Benchmarking)
YCSB:YCSB是雅虎云服務(wù)基準(zhǔn)測(cè)試(Yahoo! Cloud Serving Benchmark)的簡(jiǎn)寫。見名知意,它是由雅虎出品的一款通用云服務(wù)性能測(cè)試工具。
GridMix:該系統(tǒng)通過運(yùn)行大量合成的作業(yè),對(duì)Hadoop系統(tǒng)進(jìn)行基準(zhǔn)測(cè)試,從而獲得性能評(píng)價(jià)指標(biāo)。
















 
 
 








 
 
 
 