天天看點

深度解析大資料處理系統關鍵層次架構

在資料存儲層,還有很多類似的系統和某些系統的變種,這裡,僅僅列出較為出名的幾個。

深度解析大資料處理系統關鍵層次架構

一、資料存儲層

寬泛地講,據對一緻性(consistency)要求的強弱不同,分布式資料存儲政策,可分為ACID和BASE兩大陣營。

ACID是指資料庫事務具有的四個特性:原子性(Atomicity)、一緻性(Consistency)、隔離性(Isolation)、持久性(Durability)。ACID中的一緻性要求比較強,事務執行的結果必須是使資料庫從一個一緻性狀态變到另一個一緻性狀态。

BASE對一緻性要求較弱,它的三個特征分别是:基本可用(Basically Available), 軟狀态/柔性事務(Soft-state,即狀态可以有一段時間的不同步), 最終一緻性(Eventual consistency)。BASE還進一步細分基于鍵值的,基于文檔的和基于列和圖形的 – 細分的依據取決于底層架構和所支援的資料結構(注:BASE完全不同于ACID模型,它以犧牲強一緻性,獲得基本可用性和柔性可靠性,并要求達到最終一緻性)。在資料存儲層,還有很多類似的系統和某些系統的變種,這裡,我僅僅列出較為出名的幾個。如漏掉某些重要系統,還請諒解。

1、BASE

(1)鍵值存儲(Key Value Stores)

Dynamo:這是由亞馬遜工程師們設計的基于鍵值的高可用的分布式存儲系統(注:Dynamo放棄了資料模組化的能力,所有的資料對象采用最簡單的Key-value模型存儲,可簡單地将Dynamo了解為一個巨大的Map。Dynamo是犧牲了部分一緻性,來換取整個系統的高可用性)。

Cassandra:這是由Facebook工程師設計的一個離散的分布式結構化存儲系統,受亞馬遜的Dynamo啟發,Cassandra采用的是面向多元的鍵值或面向列的資料存儲格式(注:Cassandra可用來管理分布在大量廉價伺服器上的巨量結構化資料,并同時提供沒有單點故障的高可用服務)。

Voldemort:這又是一個受亞馬遜的Dynamo啟發的分布式存儲作品,由全球最大的職業社交網站LinkedIn的工程師們開發而成。

(2)面向列的存儲(Column Oriented Stores)

BigTable:Bigtable是一個基于Google檔案系統的分布式資料存儲系統,是為谷歌打拼天下的“三駕馬車”之一,另外兩駕馬車分别是分布式鎖服務系統Chubby和下文将提到的MapReduce。

HBase:Hbase是一個分布式的、面向列的開源資料庫。其設計理念源自谷歌的 BigTable,用Java語言編寫而成。

Hypertable:Hypertable也是一個開源、高性能、可伸縮的資料庫,它采用與Google的Bigtable類似的模型。

(3)面向文檔的存儲(Document Oriented Stores)

CouchDB:這是一款面向文檔的、開源資料存儲管理系統。

MongoDB:是目前非常流行的一種非關系型(NoSQL)資料庫。

(4)面向圖(Graph)的存儲

Neo4j:Neo4j是一款目前最為流行的高性能NoSQL 圖資料庫,它使用圖來描述資料模型,把資料儲存為圖中的節點以及節點之間的關系。這是最流行的圖資料庫。

Titan:Titan是一款Apache許可證架構下的分布式的開源圖資料庫,特别為存儲和處理大規模圖而做了大量優化。

2、ACID

Megastore:這是一個建構于BigTable之上的、高可用的分布式存儲系統。

Spanner:這是由谷歌研發的、可擴充的、全球分布式的、同步複制資料庫,支援SQL查詢通路。

MESA:亦是由谷歌研發的、跨地域複制(geo-replicated)、高可用的、可容錯的、可擴充的近實時資料倉庫系統。

CockroachDB:該系統是由Google前工程師Spencer Kimball上司開發的Spanner 的開源版本。

二、資料總管層(Resource Managers)

第一代Hadoop的生态系統,其資源管理是以整體單一的排程器起家的,其代表作品為YARN。而目前的排程器則是朝着分層排程的方向演進(Mesos則是這個方向的代表作),這種分層的排程方式,可以管理不同類型的計算工作負載,進而可擷取更高的資源使用率和排程效率。

YARN:這是新一代的MapReduce計算架構,簡稱MRv2,它是在第一代MapReduce的基礎上演變而來的(注:MRv2的設計初衷是,為了解決第一代Hadoop系統擴充性差、不支援多計算架構等問題。

Mesos:這是一個開源的計算架構,可對多叢集中的資源做彈性管理。

這些計算架構和排程器之間是松散耦合的,排程器的主要功能就是基于一定的排程政策和排程配置,完成作業排程,以達到工作負載均衡,使有限的資源有較高的使用率。

三、排程器(Schedulers)

(1)作業排程器,通常以插件的方式加載于計算架構之上,常見的作業排程器有4種:

計算能力排程器

公平排程器

延遲排程

公平與能力排程器

(2)協調器(Coordination)

在分布式資料系統中,協調器主要用于協調服務和進行狀态管理。

Paxos:Google的Chubby和Apache的Zookeeper,都是用Paxos作為其理論基礎實作的。

Chubby:本質上就是前文提到的Paxos的一個實作版本,主要用于谷歌分布式鎖服務。

Zookeeper:這是Apache Hadoop架構下的Chubby開源版本。它不僅僅提供簡單地上鎖服務,而事實上,它還是一個通用的分布式協調器,其設計靈感來自谷歌的Chubby。

四、計算架構(Computational Frameworks)

(0)運作時計算架構

可為不同種類的計算,提供運作時(runtime)環境。最常用的是運作時計算架構是Spark和Flink。

Spark:Spark是一個基于記憶體計算的開源的叢集計算系統,其目的在于,讓資料分析更加快速。Spark是由加州大學伯克利分校的AMP實驗室采用Scala語言開發而成。Spark的記憶體計算架構,适合各種疊代算法和互動式資料分析,能夠提升大資料處理的實時性和準确性,現已逐漸獲得很多企業的支援,如阿裡巴巴、百度、網易、英特爾等公司均是其使用者。

Flink:這是一個非常類似于Spark的計算架構,但在疊代式資料處理上,比Spark更給力(注:目前大資料分析引擎Flink,已更新成為Apache頂級項目)。

Spark和Flink都屬于基礎性的大資料處理引擎。具體的計算架構,大體上,可根據采用的模型及延遲的處理不同,來進行分門别類。

(1)批處理(Batch)

MapReduce

(2)疊代式(BSP)

Pregel:Pregel是一種面向圖算法的分布式程式設計架構,其采用的是疊代式的計算模型。它被稱之為Google後Hadoop時代的新“三駕馬車”之一。另外兩駕馬車分别是:“互動式”大資料分析系統Dremel和網絡搜尋引擎Caffeine。

Giraph:該系統模組化于谷歌的Pregel,可視為Pregel的開源版本,它是一個基于 Hadoop架構的、可擴充的分布式疊代圖處理系統。

GraphX:這是一個同時采用圖并行計算和資料并行的計算架構,GraphX最先是加州大學伯克利分校AMPLab實驗室的一個分布式圖計算架構項目,後來整合到Spark中,成為其中的一個核心元件。GraphX最大的貢獻在于,在Spark之上提供一棧式資料解決方案,可友善高效地完成圖計算的一整套流水作業。

Hama:是一個建構Hadoop之上的基于BSP模型的分布式計算引擎,Hama的運作環境需要關聯 Zookeeper、HBase、HDFS 元件。Hama中最關鍵的技術,就是采用了BSP模型(Bulk Synchronous Parallel,即整體同步并行計算模型,又名大同步模型)。

(3)流式(Streaming)

Storm:Storm有時也被人們稱為實時處理領域的Hadoop,它大大簡化了面向龐大規模資料流的處理機制,進而在實時處理領域扮演着重要角色。

Samza:這是一款由Linkedin公司開發的分布式的流式資料處理架構(注:所謂流式資料,是指要在處理機關内得到的資料,這種方式更注重于實時性,流式資料有時也稱為快資料)。

Spark流:Spark Streaming是Spark 核心API的一個擴充,它并不會像Storm那樣逐個處理資料流,而是在處理前,按時間間隔預先将其切分為很多小段的批處理作業。

(4)互動式(Interactive)

Dremel該論文是多個基于Hadoop的開源SQL系統的理論基礎。

Impala:這是一個大規模并行處理(MPP)式 SQL 大資料分析引擎,Impala像Dremel一樣,其借鑒了MPP(Massively Parallel Processing,大規模并行處理)并行資料庫的思想,抛棄了MapReduce這個不太适合做SQL查詢的範式,進而讓Hadoop支援處理互動式的工作負載。

Drill:這是谷歌 Dremel的開源版本,Drill是一個低延遲的、能對海量資料(包括結構化、半結構化及嵌套資料)實施互動式查詢的分布式資料引擎。

Shark:Shark即“Hive on Spark”的含義,本質上是通過Hive的HQL解析,把HQL翻譯成Spark上的RDD操作。然後通過Hive的中繼資料獲,取資料庫裡的表資訊。HDFS上的資料和檔案,最後會由Shark擷取,并放到Spark上運算。Shark基于 Scala語言的算子推導,可實作良好的容錯機制,對執行失敗的長/短任務,均能從上一個“快照點(Snapshot)”進行快速恢複。

Dryad:Dryad是一個通用的粗顆粒度的分布式計算和資源排程引擎,其核心特性之一,就是允許使用者自己建構DAG排程拓撲圖。

Tez:其核心思想來源于Dryad,可視為利用Yarn(即MRv2)對Dryad的開源實作。Apache Tez是基于Hadoop Yarn之上的DAG計算架構。

BlinkDB:可在抽樣資料上實作互動式查詢,其呈現出的查詢結果,附帶有誤差辨別。BlinkDB 是一個用于在海量資料上運作互動式 SQL 查詢的大規模并行查詢引擎。BlinkDB允許使用者通過适當降低資料精度,對資料進行先采樣後計算,其通過其獨特的優化技術,實作了比Hive快百倍的互動式查詢速度,而查詢進度誤差僅降低2~10%。

(5)實時系統(RealTime)

Druid:這是一個開源的分布式實時資料分析和存儲系統,旨在快速處理大規模的資料,并能做到快速查詢和分析。

Pinot:這是由LinkedIn公司出品的一個開源的、實時分布式的 OLAP資料分析存儲系統,非常類似于前面提到的Druid,LinkedIn 使用它實作低延遲可伸縮的實時分析。

五、資料分析層(Data Analysis)

資料分析層中的工具,涵蓋範圍很廣,從諸如SQL的聲明式程式設計語言,到諸如Pig的過程化程式設計語言,均有涉及。另一方面,資料分析層中的庫也很豐富,可支援常見的資料挖掘和機器學習算法,這些類庫可拿來即用,甚是友善。

(1)工具(Tools)

Pig:Pig Latin原是一種兒童黑話,屬于是一種英語語言遊戲,形式是在英語上加上一點規則使發音改變,讓大人們聽不懂,進而完成孩子們獨懂的交流。雅虎的工程師們于2008年發表在SIGMOD的一篇論文,論文的題目是“Pig Latin:并不是太老外的一種資料語言”,言外之意,他們發明了一種資料處理的“黑話”——Pig Latin,一開始你可能不懂,等你熟悉了,就會發現這種資料查詢語言的樂趣所在。

Hive:Hive是一個建立于 Hadoop 上的資料倉庫基礎構架。它用來進行資料的提取、轉化和加載(即Extract-Transform-Load ,ETL),它是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模資料的機制。

Phoenix:它是 HBase 的 SQL 驅動,Phoenix可将 SQL 查詢轉成 HBase 的掃描及相應的動作。

(2)庫(Libraires)

MLlib:這是在Spark計算架構中對常用的機器學習算法的實作庫,該庫還包括相關的測試和資料生成器。

SparkR:這是AMPLab釋出的一個R開發包,為Apache Spark提供輕量級的前端。

Mahout:這是一個功能強大的資料挖掘工具,是一個基于傳統Map Reduce的分布式機器學習架構,Mahout的中文含義就是“馭象之人”,而Hadoop的Logo正是一頭小黃象。很明顯,這個庫是幫助使用者用好Hadoop這頭難用的大象。

六、資料內建層(Data Integration)

資料內建架構提供了良好的機制,以協助高效地攝取和輸出大資料系統之間的資料。從業務流程線到中繼資料架構,資料內建層皆有涵蓋,進而提供全方位的資料在整個生命周期的管理和治理。

(1)攝入/消息傳遞(Ingest/Messaging)

Flume:這是Apache旗下的一個分布式的、高可靠的、高可用的服務架構,可協助從分散式或集中式資料源采集、聚合和傳輸海量日志。

Sqoop:該系統主要用來在Hadoop和關系資料庫中傳遞資料,Sqoop目前已成為Apache的頂級項目之一。

Kafka:這是由LinkedIn開發的一個分布式消息系統,由Scala編寫而成。由于可水準擴充、吞吐率高等特性,得到廣泛應用。

(2)ETL/工作流

ETL是資料抽取(Extract)、清洗(Cleaning)、轉換(Transform)、裝載(Load)的過程,是建構資料倉庫的重要一環。

Crunch:這是Apache旗下的一套Java API函數庫,它能夠大大簡化編寫、測試、運作MapReduce 處理工作流的程式。

Falcon:這是Apache旗下的Falcon大資料管理架構,可以幫助使用者自動遷移和處理大資料集合。

Cascading:這是一個架構在Hadoop上的API函數庫,用來建立複雜的可容錯的資料處理工作流。

Oozie:是一個工作流引擎,用來協助Hadoop作業管理,Oozie字面含義是馴象之人,其寓意和Mahout一樣,幫助使用者更好地搞定Hadoop這頭大象。

(3)中繼資料(Metadata)

HCatalog: 它提供了面向Apache Hadoop的資料表和存儲管理服務,Apache HCatalog提供一個共享的模式和資料類型的機制,它抽象出表,使使用者不必關心資料怎麼存儲,并提供了可操作的跨資料處理工具。

(4)序列化(Serialization)

Protocol Buffers:由Google推廣的一種與語言無關的、對結構化資料進行序列化和反序列化的機制。

Avro:這是一個模組化于Protocol Buffers之上的、Hadoop生态系統中的子項目,Avro本身既是一個序列化架構,同時也實作了RPC的功能。

七、操作架構(Operational Frameworks)

最後,我們還需要一個操作性架構,來建構一套衡量标準和測試基準,進而來評價各種計算架構的性能優劣。在這個操作性架構中,還需要包括性能優化工具,借助它來平衡工作負載。

(1)監測管理架構(Monitoring Frameworks)

OpenTSDB:這是建構于HBase之上的實時性能評測系統。

Ambari:這是一款基于Web的系統,支援Apache Hadoop叢集的供應、管理和監控。

(2)基準測試(Benchmarking)

YCSB:YCSB是雅虎雲服務基準測試(Yahoo! Cloud Serving Benchmark)的簡寫。見名知意,它是由雅虎出品的一款通用雲服務性能測試工具。

GridMix:該系統通過運作大量合成的作業,對Hadoop系統進行基準測試,進而獲得性能評價名額。

結語

感謝您的觀看,如有不足之處,歡迎批評指正。

如果有對大資料感興趣的小夥伴或者是從事大資料的老司機可以加群:

658558542    (☛點選即可加入群聊)

裡面整理了一大份學習資料,全都是些幹貨,包括大資料技術入門,海量資料進階分析語言,海量資料存儲分布式存儲,以及海量資料分析分布式計算等部分,送給每一位大資料小夥伴,這裡不止是小白聚集地,還有大牛線上解答!歡迎初學和進階中的小夥伴一起進群學習交流,共同進步!

最後祝福所有遇到瓶頸的大資料程式員們突破自己,祝福大家在往後的工作與面試中一切順利。

繼續閱讀