很少說,直接上乾貨!php
以前在微信公衆平臺裏寫過html
http://mp.weixin.qq.com/s/KE09U5AbFnEdwht44FGrOAgit
最近收到一些同窗和朋友的郵件,說能不能整理一下 Hadoop 生態圈的相關內容,而後分享一些,我以爲這是一個不錯的提議,因而,花了一些業餘時間整理了 Hadoop 的生態系統,並將其進行了概括總結,進而將其以表格的形式進行了羅列。涉及的內容有如下幾點:github
在分佈式文件系統當中,首先爲你們所熟悉的是 Apache 的 HDFS。全稱爲 Hadoop Distributed File System,由多臺機器組建的集羣,存儲大數據文件。HDFS 的靈感來自於 Google File System(GFS)。Hadoop 2.x 版本以前,NameNode 是存在單點故障的。在 ZooKeeper 的高可用性功能解決了 HDFS 的這個問題,經過提供運行兩個冗餘的節點在同一個集羣中進行主備切換,即:Active & Standbyredis
相關連接地址以下所示:mongodb
GlusterFS 是一個擴展的網絡附加存儲文件系統。GlusterFS 最初是由 Gluster 公司開發的,而後,由 Red Hat 公司在2011年進行了購買。2012年六月,Red Hat 存儲服務器被宣佈爲商業支持的整合與 Red Hat 企業 Linux GlusterFS。Gluster 文件系統,如今稱爲 Red Hat 存儲服務器。數據庫
相關連接地址以下所示:apache
QFS 是一個開源的分佈式文件系統軟件包,用於對 MapReduce 批處理工做負載。她被設計爲一種 Apache Hadoop 的 HDFS 另外一種選擇方案,用於大型加工集羣提供更好的性能和成本效率。它用 C++ 和固定佔用內存管理。QFS 使用 Reed-Solomon 糾錯保證可靠的數據訪問方法。Reed-Solomon 編碼在海量存儲系統中被普遍應用,以糾正與媒體缺陷相關的突發錯誤。而不是存儲每一個文件或是像 HDFS 同樣,存儲 3+ 次以上,QFS 僅僅須要 1.5 倍的原始容量,由於它存儲在哎九個不一樣的磁盤驅動上。編程
相關連接地址以下所示:數組
Ceph 是一個免費的軟件存儲平臺,被設計爲對象,塊和從單一節點到集羣的文件存儲。它的主要目標是徹底分佈式無單點鼓掌,可水平擴展到 PB 容量,對多種工做負載的高性能,以及高可用性。
相關連接地址以下所示:
Lustre 是由 Linux 和 Cluster 演變而來,是爲了解決海量存儲問題而設計的全新的文件系統。可支持達 1w 節點,PB 的存儲容量,100GB/S 的傳輸速度。Lustre 是基於對象的存儲系統,減小元數據服務器的 iNode。它實際上仍是將數據條帶化到各個存儲目標上,因此能夠實現高度聚合 IO 能力。Lustre 原生態支持海量小文件讀寫;且對大文件讀寫在 Linux 內核作了特殊優化。另外,Lustre 是個對用戶透明的 Share 文件系統,條帶化數據的位置信息不能完美的暴露出來,因此要用上 Hadoop 的 MapReduce 優點還須要作不少工做。
相關連接地址以下所示:
關於分佈式文件系統的內容就贅述到這裏;其它分佈式文件系統,如:Alluxio,GridGain 以及 XtreemFS[1.官網,2.Flink on XtreemFS,3.Spark XtreemFS] 等這裏就很少贅述了,你們能夠下去本身普及一下。
Apache Ignite 內存數組組織框架是一個高性能、集成和分佈式的內存計算和事務平臺,用於大規模的數據集處理,比傳統的基於磁盤或閃存的技術具備更高的性能,同時他還爲應用和不一樣的數據源之間提供高性能、分佈式內存中數據組織管理的功能。
它包含一個分佈式的 Key/Value 存儲在內存中,SQL 執行能力,MapReduce 和其它計算,分佈式數據結構,連續查詢,消息和事件子系統。Hadoop 和 Spark 均有集成。Ignite 編譯於 Java,提供 .NET 和 C++ 的 API 接口。
相關連接地址以下所示:
這個你們應該不陌生,這是一個經典的編程模型,用於在集羣上處理併發,分佈式大數據集。當前版本編譯於 YARN 框架。這裏就很少贅述了。
相關連接地址,以下所示:
這個編程模型,你們也不會陌生,如今 Spark 的應用場景和社區活躍度較高。快速的執行能力,豐富的編程 API 接口,使其備受恩寵。
相關連接地址,以下所示:
作實時流水數據處理的同窗,應該也不陌生,能夠嫁接多種消息中間件(如Kafka,MQ等)。
相關連接地址,以下所示:
Apache Flink 是一個面向分佈式數據流處理和批量數據處理的開源計算平臺,它可以基於同一個Flink運行時(Flink Runtime),提供支持流處理和批處理兩種類型應用的功能。現有的開源計算方案,會把流處理和批處理做爲兩種不一樣的應用類型,由於他們它們所提供的SLA是徹底不相同的:流處理通常須要支持低延遲、Exactly-once保證,而批處理須要支持高吞吐、高效處理,因此在實現的時候一般是分別給出兩套實現方法,或者經過一個獨立的開源框架來實現其中每一種處理方案。例如,實現批處理的開源方案有MapReduce、Tez、Crunch、Spark,實現流處理的開源方案有Samza、Storm。 Flink在實現流處理和批處理時,與傳統的一些方案徹底不一樣,它從另外一個視角看待流處理和批處理,將兩者統一塊兒來:Flink是徹底支持流處理,也就是說做爲流處理看待時輸入數據流是無界的;批處理被做爲一種特殊的流處理,只是它的輸入數據流被定義爲有界的。基於同一個Flink運行時(Flink Runtime),分別提供了流處理和批處理API,而這兩種API也是實現上層面向流處理、批處理類型應用框架的基礎。
相關連接地址,以下所示:
這裏列舉了熱度較高的分佈式編程模型,其它的編程模型,以下表所示:
分佈式編程模型 | 相關連接地址 |
Apache Pig | |
JAQL | |
Facebook Corona | 1.Corona on Github |
Apache Twill | 1.Twill 官網 |
Apache Tez |
靈感來自於 Google 的 BigTable。非關係性分佈式數據庫。隨機實時讀寫操做列擴展的大表。
相關連接地址,以下所示:
Apache Cassandra 是一套開源分佈式 Key-Value 存儲系統。它最初由 Facebook 開發,用於儲存特別大的數據。 Cassandra 不是一個數據庫,它是一個混合型的非關係的數據庫,相似於 Google 的 BigTable。Cassandra 的數據模型是基於列族(Column Family)的四維或五維模型。它借鑑了 Amazon 的 Dynamo 和 Google's BigTable 的數據結構和功能特色,採用 Memtable 和 SSTable 的方式進行存儲。在 Cassandra 寫入數據以前,須要先記錄日誌 ( CommitLog ),而後數據開始寫入到 Column Family 對應的 Memtable 中,Memtable 是一種按照 key 排序數據的內存結構,在知足必定條件時,再把 Memtable 的數據批量的刷新到磁盤上,存儲爲 SSTable 。
相關連接地址,以下所示:
Kudu 是 Cloudera 開源的列式存儲引擎,具備一下幾個特色:
相關連接地址,以下所示:
面向文檔的數據庫系統。它是數據庫系統中 NoSQL 家族的一部分。MongoDB 存儲結構化數據以 JSON 格式的文件形式進行存儲。
相關連接地址,以下所示:
Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。
相關連接地址,以下所示:
一款由 Facebook 開發的數據倉庫。數據聚合,查詢和分析。提供類 SQL 語言:HiveQL
相關連接地址,以下所示:
Trafodion是一個構建在Hadoop/HBase基礎之上的關係型數據庫,它徹底開源免費。Trafodion可以完整地支持ANSI SQL,而且提供ACID事務保證。和傳統關係數據庫不一樣的地方在於,Trafodion利用底層Hadoop的橫向擴展能力,能夠提供極高的擴展性。而傳統數據庫,好比MySQL,在數據量達到P級別的時候就很難處理。而Trafodion卻能夠藉助HBase的擴展性,僅經過增長普通Linux服務器就能夠增長計算和存儲能力,進而支持大數據應用。
相關連接地址,以下所示:
Drill 是 Apache 開源的,用於大數據探索的 SQL 查詢引擎。她在大數據應用中,面對結構化數據和變化迅速的數據,她可以去兼容,而且高性能的去分析,同時,還提供業界都熟悉的標準的查詢語言,即:ANSI SQL 生態系統。Drill 提供即插即用,在現有的 Hive,HBase,S3 等存儲介質中能夠隨時整合部署。
相關連接地址,以下所示:
相似於 Drill 的一款大數據實時查詢引擎,依賴 CDH 環境。
相關連接地址,以下所示:
Kylin 是一款開源的分佈式數據分析引擎由 eBay 公司提供。支持 Hadoop 大數據集 OLAP 業務/
相關連接地址,以下所示:
另外,還有[Apache Tajo],[Apache Phoenix] 等,這裏就不一一列舉了。
Flume 是一個分佈式,可靠的,可用的服務,有效的收集,聚合和移動海量的日誌數據。它有一個簡單而靈活的架構,基於流數據流。具備很好的冗餘和容錯性,以及可靠性和多故障轉移和恢復機制。它使用一個簡單的可擴展數據模型,並容許在線分析應用。
相關連接地址,以下所示:
一款從 HDFS 到 RDBMS 之間作數據交互的工具。相似於 Flume。
相關連接地址,以下所示:
分佈式發佈-訂閱消息系統,用於處理流式海量數據。Kafka 是一個由 LinkedIn 開發的消息隊列。能嫁接 HDFS 這樣的存儲介質,能被 Storm,Spark這類實時或類實時數據模型消費。
相關連接地址,以下所示:
Apache NiFi 是由美國國家安全局(NSA)貢獻給 Apache 基金會的開源項目,目前已被順利孵化完成成爲 Apache 的頂級項目之一。Apache NiFi 其設計目標是自動化系統間的數據流。基於其工做流式的編程理念,NiFi 擁有易使用,高可用以及高配置等特性。其尤其突出的兩大特性是:強大的用戶界面和良好的數據回溯工具。NiFi 的用戶界面容許用戶在瀏覽器中直觀的理解並與數據流進行交互,快速和安全的進迭代。其數據回溯特性容許用戶查看一個對象如何在系統間流轉,回放以及可視化關鍵步驟以前以及以後發生的狀況,包括大量複雜的圖式轉換,Fork,Join 以及其它操做等。另外,NiFi 使用基於組件的擴展模型用覺得複雜的數據流快速增長功能,開箱即用的組件中,處理文件系統的包括 FTP,SFTP 以及 HTTP 等,一樣也支持 HDFS。
相關連接地址,以下所示:
另外,還有 Facebook Scribe,Apache Chukwa,Netflix Suro,Apache Samza,Cloudera Morphline,HIHO 等套件就不一一介紹了,你們能夠下去了解這些數據採集套件相關內容。
Thrift 是一個軟件框架,用來進行可擴展且跨語言的服務開發。它結合了功能強大的軟件堆棧和代碼生成引擎,用以構建在 C++,Java,Python,Ruby 等編程語言上,進行無縫,高效的銜接。其最初由 Facebook 開發用作系統內各個語言之間的 RPC 通訊,後 Facebook 貢獻給 Apache,目前成爲 Apache 的頂級項目之一。
相關連接地址,以下所示:
Zookeeper 分佈式服務框架是 Apache Hadoop 的一個子項目,它主要是用來解決分佈式應用中常常遇到的一些數據管理問題,如:統一命名服務,狀態同步服務,集羣管理,分佈式應用配置項的管理等。
相關連接地址,以下所示:
Apache Avro 是 Hadoop 中的一個子項目,也是 Apache 中的一個獨立的項目,Avro 是一個基於二進制數據傳輸高性能的中間件。在 Hadoop 的其它項目中,例如 HBase,Hive 的 Client 端與服務端的數據傳輸也採用了這個工具。Avro 是一個數據序列化的系統,它能夠將數據結構或對象轉化成便於存儲或傳輸的格式。Avro 設計之初就用來支持數據密集型應用,適合於遠程或本地大規模數據的存儲和交換。擁有一下特色:
相關連接地址,以下所示:
另外,還有 Apache Curator,Twitter Elephant Bird,Linkedin Norbert 等工具,這裏就不一一介紹了。
在 Hadoop 中執行的任務有時候須要把多個 MR 做業鏈接到一塊兒,這樣才能達到目的。在 Hadoop 生態圈中,Oozie 能夠把多個 MR 做業組合到一個邏輯工做單元中,從而完成更大型的任務。Oozie 是一種 Java Web 應用程序,它運行在 Java Servlet 容器中(即:Tomcat)中,並使用數據庫來存儲一下內容:
Oozie 工做流是放置在控制依賴 DAG 中的一組動做(如 Hadoop 的 MR 做業,Pig 做業等),其中指定了動做執行的順序。
相關連接地址,以下所示:
Hadoop 工做流管理。提供友好的 Web UI 界面進行批處理做業調度(定時或及時)。
相關連接地址,以下所示:
Apache Falcon 是一個面向 Hadoop 的,新的數據處理和管理平臺,設計用於數據移動,數據管道協調,生命週期管理和數據發現。它使用終端用戶能夠快速的將他們的數據以及相關的處理和管理任務上載到 Hadoop 集羣。在 Apache Falcon 中,基礎設施端點,數據集,處理規則均是聲明式的。這種聲明式配置顯式定義了實體之間的依賴關係。這也是該平臺的一個特色,它自己只維護依賴關係,而並不作任何繁重的工做,全部的功能和工做流狀態管理需求都委託給工做流調度程序來完成。
相關連接地址,以下所示:
用於建立,管理,監控 Hadoop 集羣的工具,能夠很方便的安裝,調試 Hadoop 集羣,支持的平臺組件也是愈來愈多,如 Spark,Storm 等計算模型,以及資源調度平臺 YARN 等,都能經過 Ambari 輕鬆部署管理。
相關連接地址,以下所示:
Cloudera 公司的產品,相似於 Ambari 產品,用於建立,管理,監控 Hadoop 集羣。
相關連接地址,以下所示:
你能夠製做出漂亮的數據,使用 SQL,Scala 或者其它。它擁有如下特性:
目前支持的中間件有:Spark,md,sh,Hive,Tajo,Flink,Cassandra,Phoenix,Kylin 等
相關連接地址,以下所示:
Hadoop 生態圈是很是龐大的,上述列舉的只是其生態圈中經常使用的一部分,下圖給你們展現了本篇博客相關內容的關聯圖,以下圖所示:
這篇博客就和你們分享到這裏,若是你們在研究學習的過程中有什麼問題,能夠加羣進行討論或發送郵件給我,我會盡我所能爲您解答,與君共勉!
同時,你們能夠關注個人我的博客:
http://www.cnblogs.com/zlslch/ 和 http://www.cnblogs.com/lchzls/
人生苦短,我願分享。本公衆號將秉持活到老學到老學習無休止的交流分享開源精神,匯聚於互聯網和我的學習工做的精華乾貨知識,一切來於互聯網,反饋回互聯網。
目前研究領域:大數據、機器學習、深度學習、人工智能、數據挖掘、數據分析。 語言涉及:Java、Scala、Python、Shell、Linux等 。同時還涉及日常所使用的手機、電腦和互聯網上的使用技巧、問題和實用軟件。 只要你一直關注和呆在羣裏,天天必須有收穫
以及對應本平臺的QQ羣:161156071(大數據躺過的坑)