在數據存儲層,還有不少相似的系統和某些系統的變種,這裏,僅僅列出較爲出名的幾個。前端
1、數據存儲層程序員
寬泛地講,據對一致性(consistency)要求的強弱不一樣,分佈式數據存儲策略,可分爲ACID和BASE兩大陣營。面試
ACID是指數據庫事務具備的四個特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。ACID中的一致性要求比較強,事務執行的結果必須是使數據庫從一個一致性狀態變到另外一個一致性狀態。算法
BASE對一致性要求較弱,它的三個特徵分別是:基本可用(Basically Available), 軟狀態/柔性事務(Soft-state,即狀態能夠有一段時間的不一樣步), 最終一致性(Eventual consistency)。BASE還進一步細分基於鍵值的,基於文檔的和基於列和圖形的 – 細分的依據取決於底層架構和所支持的數據結構(注:BASE徹底不一樣於ACID模型,它以犧牲強一致性,得到基本可用性和柔性可靠性,並要求達到最終一致性)。在數據存儲層,還有不少相似的系統和某些系統的變種,這裏,我僅僅列出較爲出名的幾個。如漏掉某些重要系統,還請諒解。數據庫
一、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許可證框架下的分佈式的開源圖數據庫,特別爲存儲和處理大規模圖而作了大量優化。
二、ACID
Megastore:這是一個構建於BigTable之上的、高可用的分佈式存儲系統。
Spanner:這是由谷歌研發的、可擴展的、全球分佈式的、同步複製數據庫,支持SQL查詢訪問。
MESA:亦是由谷歌研發的、跨地域複製(geo-replicated)、高可用的、可容錯的、可擴展的近實時數據倉庫系統。
CockroachDB:該系統是由Google前工程師Spencer Kimball領導開發的Spanner 的開源版本。
2、資源管理器層(Resource Managers)
第一代Hadoop的生態系統,其資源管理是以總體單一的調度器起家的,其表明做品爲YARN。而當前的調度器則是朝着分層調度的方向演進(Mesos則是這個方向的表明做),這種分層的調度方式,能夠管理不一樣類型的計算工做負載,從而可獲取更高的資源利用率和調度效率。
YARN:這是新一代的MapReduce計算框架,簡稱MRv2,它是在第一代MapReduce的基礎上演變而來的(注:MRv2的設計初衷是,爲了解決第一代Hadoop系統擴展性差、不支持多計算框架等問題。
Mesos:這是一個開源的計算框架,可對多集羣中的資源作彈性管理。
這些計算框架和調度器之間是鬆散耦合的,調度器的主要功能就是基於必定的調度策略和調度配置,完成做業調度,以達到工做負載均衡,使有限的資源有較高的利用率。
3、調度器(Schedulers)
(1)做業調度器,一般以插件的方式加載於計算框架之上,常見的做業調度器有4種:
計算能力調度器
公平調度器
延遲調度
公平與能力調度器
(2)協調器(Coordination)
在分佈式數據系統中,協調器主要用於協調服務和進行狀態管理。
Paxos:Google的Chubby和Apache的Zookeeper,都是用Paxos做爲其理論基礎實現的。
Chubby:本質上就是前文提到的Paxos的一個實現版本,主要用於谷歌分佈式鎖服務。
Zookeeper:這是Apache Hadoop框架下的Chubby開源版本。它不只僅提供簡單地上鎖服務,而事實上,它仍是一個通用的分佈式協調器,其設計靈感來自谷歌的Chubby。
4、計算框架(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 使用它實現低延遲可伸縮的實時分析。
5、數據分析層(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這頭難用的大象。
6、數據集成層(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的功能。
7、操做框架(Operational Frameworks)
最後,咱們還須要一個操做性框架,來構建一套衡量標準和測試基準,從而來評價各類計算框架的性能優劣。在這個操做性框架中,還須要包括性能優化工具,藉助它來平衡工做負載。
(1)監測管理框架(Monitoring Frameworks)
OpenTSDB:這是構建於HBase之上的實時性能評測系統。
Ambari:這是一款基於Web的系統,支持Apache Hadoop集羣的供應、管理和監控。
(2)基準測試(Benchmarking)
YCSB:YCSB是雅虎雲服務基準測試(Yahoo! Cloud Serving Benchmark)的簡寫。見名知意,它是由雅虎出品的一款通用雲服務性能測試工具。
GridMix:該系統經過運行大量合成的做業,對Hadoop系統進行基準測試,從而得到性能評價指標。
結語
感謝您的觀看,若有不足之處,歡迎批評指正。
若是有對大數據感興趣的小夥伴或者是從事大數據的老司機能夠加羣:
658558542 (☛點擊便可加入羣聊)
裏面整理了一大份學習資料,全都是些乾貨,包括大數據技術入門,海量數據高級分析語言,海量數據存儲分佈式存儲,以及海量數據分析分佈式計算等部分,送給每一位大數據小夥伴,這裏不止是小白彙集地,還有大牛在線解答!歡迎初學和進階中的小夥伴一塊兒進羣學習交流,共同進步!
最後祝福全部遇到瓶頸的大數據程序員們突破本身,祝福你們在日後的工做與面試中一切順利。