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