02.17 深度解析大數據處理系統關鍵層次架構

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

深度解析大數據處理系統關鍵層次架構

一、數據存儲層

寬泛地講,據對一致性(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系統進行基準測試,從而獲得性能評價指標。

結語

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

對大數據感興趣的同學可以關注我,並在後臺私信發送關鍵字:“大數據”即可獲取免費的大數據學習資料。

知識體系已整理好(筆記,PPT,學習視頻),歡迎大家來領取!


分享到:


相關文章: