1.概述
最近收到一些同學和朋友的郵件,說能不能整理一下 Hadoop 生態圈的相關內容,然後分享一些,我覺得這是一個不錯的提議,於是,花了一些業餘時間整理了 Hadoop 的生態系統,並將其進行了歸納總結,進而將其以表格的形式進行了羅列。涉及的內容有以下幾點:
- 分散式檔案系統
- 分散式程式設計模型
- NoSQL 資料庫
- SQL-On-Hadoop
- 資料採集
- 程式設計服務中介軟體
- 排程系統
- 系統部署
- 資料視覺化
2.內容
2.1 分散式檔案系統
2.1.1 Apache HDFS
在分散式檔案系統當中,首先為大家所熟悉的是 Apache 的 HDFS。全稱為 Hadoop Distributed File System,由多臺機器組建的叢集,儲存大資料檔案。HDFS 的靈感來自於 Google File System(GFS)。Hadoop 2.x 版本之前,NameNode 是存在單點故障的。在 ZooKeeper 的高可用性功能解決了 HDFS 的這個問題,通過提供執行兩個冗餘的節點在同一個叢集中進行主備切換,即:Active & Standby
相關連結地址如下所示:
2.1.2 Red Hat GlusterFS
GlusterFS 是一個擴充套件的網路附加儲存檔案系統。GlusterFS 最初是由 Gluster 公司開發的,然後,由 Red Hat 公司在2011年進行了購買。2012年六月,Red Hat 儲存伺服器被宣佈為商業支援的整合與 Red Hat 企業 Linux GlusterFS。Gluster 檔案系統,現在稱為 Red Hat 儲存伺服器。
相關連結地址如下所示:
2.1.3 QFS
QFS 是一個開源的分散式檔案系統軟體包,用於對 MapReduce 批處理工作負載。她被設計為一種 Apache Hadoop 的 HDFS 另一種選擇方案,用於大型加工叢集提供更好的效能和成本效率。它用 C++ 和固定佔用記憶體管理。QFS 使用 Reed-Solomon 糾錯保證可靠的資料訪問方法。Reed-Solomon 編碼在海量儲存系統中被廣泛應用,以糾正與媒體缺陷相關的突發錯誤。而不是儲存每個檔案或是像 HDFS 一樣,儲存 3+ 次以上,QFS 僅僅需要 1.5 倍的原始容量,因為它儲存在哎九個不同的磁碟驅動上。
相關連結地址如下所示:
2.1.4 Ceph Filesystem
Ceph 是一個免費的軟體儲存平臺,被設計為物件,塊和從單一節點到叢集的檔案儲存。它的主要目標是完全分散式無單點鼓掌,可水平擴充套件到 PB 容量,對多種工作負載的高效能,以及高可用性。
相關連結地址如下所示:
2.1.5 Lustre file system
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] 等這裡就不多贅述了,大家可以下去自己普及一下。
2.2 分散式程式設計模型
2.2.1 Apache Ignite
Apache Ignite 記憶體陣列組織框架是一個高效能、整合和分散式的記憶體計算和事務平臺,用於大規模的資料集處理,比傳統的基於磁碟或快閃記憶體的技術具有更高的效能,同時他還為應用和不同的資料來源之間提供高效能、分散式記憶體中資料組織管理的功能。
它包含一個分散式的 Key/Value 儲存在記憶體中,SQL 執行能力,MapReduce 和其它計算,分散式資料結構,連續查詢,訊息和事件子系統。Hadoop 和 Spark 均有整合。Ignite 編譯於 Java,提供 .NET 和 C++ 的 API 介面。
相關連結地址如下所示:
2.2.2 Apache MapReduce
這個大家應該不陌生,這是一個經典的程式設計模型,用於在叢集上處理併發,分散式大資料集。當前版本編譯於 YARN 框架。這裡就不多贅述了。
相關連結地址,如下所示:
2.2.3 Apache Spark
這個程式設計模型,大家也不會陌生,現在 Spark 的應用場景和社群活躍度較高。快速的執行能力,豐富的程式設計 API 介面,使其備受恩寵。
相關連結地址,如下所示:
2.2.4 Apache Storm
做實時流水資料處理的同學,應該也不陌生,可以嫁接多種訊息中介軟體(如Kafka,MQ等)。
相關連結地址,如下所示:
2.2.5 Apache Flink
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 |
2.3 NoSQL 資料庫
2.3.1 列資料模型
2.3.1.1 Apache HBase
靈感來自於 Google 的 BigTable。非關係性分散式資料庫。隨機實時讀寫操作列擴充套件的大表。
相關連結地址,如下所示:
2.3.1.2 Apache Cassandra
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 。
相關連結地址,如下所示:
2.3.1.3 Apache Kudu
Kudu 是 Cloudera 開源的列式儲存引擎,具有一下幾個特點:
- C++ 語言開發
- 高效處理類 OLAP 負載
- 與 MR,Spark 以及 Hadoop 生態系統中其它元件友好整合
- 可以與 Cloudera Impala 整合
- 靈活的一致性模型
- 順序和隨機寫並存的場景下,仍能達到良好的效能
- 高可用,使用 Raft 協議保證資料高可靠儲存
- 結構化資料模型
相關連結地址,如下所示:
2.3.2 文件資料模型
2.3.2.1 MongoDB
面向文件的資料庫系統。它是資料庫系統中 NoSQL 家族的一部分。MongoDB 儲存結構化資料以 JSON 格式的檔案形式進行儲存。
相關連結地址,如下所示:
2.3.3 Key-Value 資料模型
2.3.3.1 Redis 資料庫
Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。
相關連結地址,如下所示:
2.4 SQL-On-Hadoop
2.4.1 Apache Hive
一款由 Facebook 開發的資料倉儲。資料聚合,查詢和分析。提供類 SQL 語言:HiveQL
相關連結地址,如下所示:
2.4.2 Apache Trafodion
Trafodion是一個構建在Hadoop/HBase基礎之上的關係型資料庫,它完全開源免費。Trafodion能夠完整地支援ANSI SQL,並且提供ACID事務保證。和傳統關聯式資料庫不同的地方在於,Trafodion利用底層Hadoop的橫向擴充套件能力,可以提供極高的擴充套件性。而傳統資料庫,比如MySQL,在資料量達到P級別的時候就很難處理。而Trafodion卻可以藉助HBase的擴充套件性,僅通過增加普通Linux伺服器就可以增加計算和儲存能力,進而支援大資料應用。
相關連結地址,如下所示:
2.4.3 Apache Drill
Drill 是 Apache 開源的,用於大資料探索的 SQL 查詢引擎。她在大資料應用中,面對結構化資料和變化迅速的資料,她能夠去相容,並且高效能的去分析,同時,還提供業界都熟悉的標準的查詢語言,即:ANSI SQL 生態系統。Drill 提供即插即用,在現有的 Hive,HBase,S3 等儲存介質中可以隨時整合部署。
相關連結地址,如下所示:
2.4.4 Cloudera Impala
類似於 Drill 的一款大資料實時查詢引擎,依賴 CDH 環境。
相關連結地址,如下所示:
2.4.5 Apache Kylin
Kylin 是一款開源的分散式資料分析引擎由 eBay 公司提供。支援 Hadoop 大資料集 OLAP 業務/
相關連結地址,如下所示:
另外,還有[Apache Tajo],[Apache Phoenix] 等,這裡就不一一列舉了。
2.5 資料採集
2.5.1 Apache Flume
Flume 是一個分散式,可靠的,可用的服務,有效的收集,聚合和移動海量的日誌資料。它有一個簡單而靈活的架構,基於流資料流。具有很好的冗餘和容錯性,以及可靠性和多故障轉移和恢復機制。它使用一個簡單的可擴充套件資料模型,並允許線上分析應用。
相關連結地址,如下所示:
2.5.2 Apache Sqoop
一款從 HDFS 到 RDBMS 之間做資料互動的工具。類似於 Flume。
相關連結地址,如下所示:
2.5.3 Apache Kafka
分散式釋出-訂閱訊息系統,用於處理流式海量資料。Kafka 是一個由 LinkedIn 開發的訊息佇列。能嫁接 HDFS 這樣的儲存介質,能被 Storm,Spark這類實時或類實時資料模型消費。
相關連結地址,如下所示:
2.5.4 Apache NiFi
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 等套件就不一一介紹了,大家可以下去了解這些資料採集套件相關內容。
2.6 程式設計服務中介軟體
2.6.1 Apache Thrift
Thrift 是一個軟體框架,用來進行可擴充套件且跨語言的服務開發。它結合了功能強大的軟體堆疊和程式碼生成引擎,用以構建在 C++,Java,Python,Ruby 等程式語言上,進行無縫,高效的銜接。其最初由 Facebook 開發用做系統內各個語言之間的 RPC 通訊,後 Facebook 貢獻給 Apache,目前成為 Apache 的頂級專案之一。
相關連結地址,如下所示:
2.6.2 Apache Zookeeper
Zookeeper 分散式服務框架是 Apache Hadoop 的一個子專案,它主要是用來解決分散式應用中經常遇到的一些資料管理問題,如:統一命名服務,狀態同步服務,叢集管理,分散式應用配置項的管理等。
相關連結地址,如下所示:
2.6.3 Apache Avro
Apache Avro 是 Hadoop 中的一個子專案,也是 Apache 中的一個獨立的專案,Avro 是一個基於二進位制資料傳輸高效能的中介軟體。在 Hadoop 的其它專案中,例如 HBase,Hive 的 Client 端與服務端的資料傳輸也採用了這個工具。Avro 是一個資料序列化的系統,它可以將資料結構或物件轉化成便於儲存或傳輸的格式。Avro 設計之初就用來支援資料密集型應用,適合於遠端或本地大規模資料的儲存和交換。擁有一下特點:
- 豐富的資料結構型別
- 快速可壓縮的二進位制資料形式,對資料二進位制序列化後可以節約資料儲存空間和網路傳輸頻寬
- 儲存持久資料的檔案容器
- 可以實現遠端過程呼叫 RPC
- 簡單的動態語言結合功能
相關連結地址,如下所示:
另外,還有 Apache Curator,Twitter Elephant Bird,Linkedin Norbert 等工具,這裡就不一一介紹了。
2.7 排程系統
2.7.1 Apache Oozie
在 Hadoop 中執行的任務有時候需要把多個 MR 作業連線到一起,這樣才能達到目的。在 Hadoop 生態圈中,Oozie 可以把多個 MR 作業組合到一個邏輯工作單元中,從而完成更大型的任務。Oozie 是一種 Java Web 應用程式,它執行在 Java Servlet 容器中(即:Tomcat)中,並使用資料庫來儲存一下內容:
- 工作流定義
- 當前執行的工作流例項,包括例項的狀態和變數
Oozie 工作流是放置在控制依賴 DAG 中的一組動作(如 Hadoop 的 MR 作業,Pig 作業等),其中指定了動作執行的順序。
相關連結地址,如下所示:
2.7.2 Linkedin Azkaban
Hadoop 工作流管理。提供友好的 Web UI 介面進行批處理作業排程(定時或及時)。
相關連結地址,如下所示:
2.7.3 Apache Falcon
Apache Falcon 是一個面向 Hadoop 的,新的資料處理和管理平臺,設計用於資料移動,資料管道協調,生命週期管理和資料發現。它使用終端使用者可以快速的將他們的資料以及相關的處理和管理任務上載到 Hadoop 叢集。在 Apache Falcon 中,基礎設施端點,資料集,處理規則均是宣告式的。這種宣告式配置顯式定義了實體之間的依賴關係。這也是該平臺的一個特點,它本身只維護依賴關係,而並不做任何繁重的工作,所有的功能和工作流狀態管理需求都委託給工作流排程程式來完成。
相關連結地址,如下所示:
2.8 系統部署
2.8.1 Apache Ambari
用於建立,管理,監控 Hadoop 叢集的工具,可以很方便的安裝,除錯 Hadoop 叢集,支援的平臺元件也是越來越多,如 Spark,Storm 等計算模型,以及資源排程平臺 YARN 等,都能通過 Ambari 輕鬆部署管理。
相關連結地址,如下所示:
2.8.2 CDH
Cloudera 公司的產品,類似於 Ambari 產品,用於建立,管理,監控 Hadoop 叢集。
相關連結地址,如下所示:
2.9 視覺化
2.9.1 Apache Zeppelin
你可以製作出漂亮的資料,使用 SQL,Scala 或者其它。它擁有以下特性:
- 資料收集
- 資料發掘
- 資料分析
- 資料視覺化和整合
目前支援的中介軟體有:Spark,md,sh,Hive,Tajo,Flink,Cassandra,Phoenix,Kylin 等
相關連結地址,如下所示:
3.總結
Hadoop 生態圈是非常龐大的,上述列舉的只是其生態圈中常用的一部分,下圖給大家展示了本篇部落格相關內容的關聯圖,如下圖所示:
4.結束語
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!