[tools]Hadoop 生態系統

Hadoop 生態系統 - 哥不是小蘿莉 - 博客園
http://www.cnblogs.com/smartloli/p/5640587.html

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
  相關鏈接地址如下所示:
Apache Hadoop
Google File System
Cloudera
Hortonworks

2.1.2 Red Hat GlusterFS
  GlusterFS 是一個擴展的網絡附加存儲文件系統。GlusterFS 最初是由 Gluster 公司開發的,然后,由 Red Hat 公司在2011年進行了購買。2012年六月,Red Hat 存儲服務器被宣布為商業支持的整合與 Red Hat 企業 Linux GlusterFS。Gluster 文件系統,現在稱為 Red Hat 存儲服務器。
  相關鏈接地址如下所示:
Gluster 官網
Red Hat Hadoop 插件

2.1.3 QFS
  QFS 是一個開源的分布式文件系統軟件包,用于對 MapReduce 批處理工作負載。她被設計為一種 Apache Hadoop 的 HDFS 另一種選擇方案,用于大型加工集群提供更好的性能和成本效率。它用 C++ 和固定占用內存管理。QFS 使用 Reed-Solomon 糾錯保證可靠的數據訪問方法。Reed-Solomon 編碼在海量存儲系統中被廣泛應用,以糾正與媒體缺陷相關的突發錯誤。而不是存儲每個文件或是像 HDFS 一樣,存儲 3+ 次以上,QFS 僅僅需要 1.5 倍的原始容量,因為它存儲在哎九個不同的磁盤驅動上。
  相關鏈接地址如下所示:
QFS 官網
Github QFS
Hadoop-8885

2.1.4 Ceph Filesystem
  Ceph 是一個免費的軟件存儲平臺,被設計為對象,塊和從單一節點到集群的文件存儲。它的主要目標是完全分布式無單點鼓掌,可水平擴展到 PB 容量,對多種工作負載的高性能,以及高可用性。
  相關鏈接地址如下所示:
Ceph Filesystem 官網
Ceph and Hadoop
HADOOP-6253

2.1.5 Lustre file system
  Lustre 是由 Linux 和 Cluster 演變而來,是為了解決海量存儲問題而設計的全新的文件系統。可支持達 1w 節點,PB 的存儲容量,100GB/S 的傳輸速度。Lustre 是基于對象的存儲系統,減少元數據服務器的 iNode。它實際上還是將數據條帶化到各個存儲目標上,所以可以實現高度聚合 IO 能力。Lustre 原生態支持海量小文件讀寫;且對大文件讀寫在 Linux 內核做了特殊優化。另外,Lustre 是個對用戶透明的 Share 文件系統,條帶化數據的位置信息不能完美的暴露出來,所以要用上 Hadoop 的 MapReduce 優勢還需要做很多工作。
  相關鏈接地址如下所示:
Lustre WiKi
Hadoop with Lustre
Inter HPC Hadoop

關于分布式文件系統的內容就贅述到這里;其它分布式文件系統,如:AlluxioGridGain 以及 XtreemFS[1.官網2.Flink on XtreemFS3.Spark XtreemFS] 等這里就不多贅述了,大家可以下去自己普及一下。
2.2 分布式編程模型
2.2.1 Apache Ignite
  Apache Ignite 內存數組組織框架是一個高性能、集成和分布式的內存計算和事務平臺,用于大規模的數據集處理,比傳統的基于磁盤或閃存的技術具有更高的性能,同時他還為應用和不同的數據源之間提供高性能、分布式內存中數據組織管理的功能。
  它包含一個分布式的 Key/Value 存儲在內存中,SQL 執行能力,MapReduce 和其它計算,分布式數據結構,連續查詢,消息和事件子系統。Hadoop 和 Spark 均有集成。Ignite 編譯于 Java,提供 .NET 和 C++ 的 API 接口。
  相關鏈接地址如下所示:
Apache Ignite
Apache Ignite Documentation

2.2.2 Apache MapReduce
  這個大家應該不陌生,這是一個經典的編程模型,用于在集群上處理并發,分布式大數據集。當前版本編譯于 YARN 框架。這里就不多贅述了。
  相關鏈接地址,如下所示:
Apache MapReduce
Google MapReduce Paper
Writing YARN Applications

2.2.3 Apache Spark
  這個編程模型,大家也不會陌生,現在 Spark 的應用場景和社區活躍度較高。快速的執行能力,豐富的編程 API 接口,使其備受恩寵。
  相關鏈接地址,如下所示:
Apache Spark
Mirror of Spark on Github
RDDs-Paper
Spark Cluster Computing
Spark Research

2.2.4 Apache Storm
  做實時流水數據處理的同學,應該也不陌生,可以嫁接多種消息中間件(如Kafka,MQ等)。
  相關鏈接地址,如下所示:
Storm Project
[Storm-on-YARN](file:///Users/dengjie/Downloads/hadoopecosystemtable.github.io-master/github.com/yahoo/storm-yarn)

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 Flink
Stratosphere site

這里列舉了熱度較高的分布式編程模型,其它的編程模型,如下表所示:
分布式編程模型
相關鏈接地址

Apache Pig
1.官網
2.示例

JAQL
1.JAQLL in Google Code
2.What is JAQL?

Facebook Corona
1.Corona on Github

Apache Twill
1.Twill 官網

Apache Tez
1.Tez 官網
2.Hortonworks Apacha Tez Page

2.3 NoSQL 數據庫
2.3.1 列數據模型
2.3.1.1 Apache HBase
  靈感來自于 Google 的 BigTable。非關系性分布式數據庫。隨機實時讀寫操作列擴展的大表。
  相關鏈接地址,如下所示:
Apache HBase Home
HBase on Github

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 。
  相關鏈接地址,如下所示:
Cassandra On Github
Training Resources
Cassandra-Paper</>

2.3.1.3 Apache Kudu
  Kudu 是 Cloudera 開源的列式存儲引擎,具有一下幾個特點:
C++ 語言開發
高效處理類 OLAP 負載
與 MR,Spark 以及 Hadoop 生態系統中其它組件友好集成
可以與 Cloudera Impala 集成
靈活的一致性模型
順序和隨機寫并存的場景下,仍能達到良好的性能
高可用,使用 Raft 協議保證數據高可靠存儲
結構化數據模型

相關鏈接地址,如下所示:
Apache Kudu Home
Kudu on Github
Kudu Technical

2.3.2 文檔數據模型
2.3.2.1 MongoDB
  面向文檔的數據庫系統。它是數據庫系統中 NoSQL 家族的一部分。MongoDB 存儲結構化數據以 JSON 格式的文件形式進行存儲。
  相關鏈接地址,如下所示:
MongoDB 官網

2.3.3 Key-Value 數據模型
2.3.3.1 Redis 數據庫
  Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API。
  相關鏈接地址,如下所示:
Redis Home
Redis Labs

2.4 SQL-On-Hadoop
2.4.1 Apache Hive
  一款由 Facebook 開發的數據倉庫。數據聚合,查詢和分析。提供類 SQL 語言:HiveQL
  相關鏈接地址,如下所示:
Apache Hive Home
Hive on Github

2.4.2 Apache Trafodion
  Trafodion是一個構建在Hadoop/HBase基礎之上的關系型數據庫,它完全開源免費。Trafodion能夠完整地支持ANSI SQL,并且提供ACID事務保證。和傳統關系數據庫不同的地方在于,Trafodion利用底層Hadoop的橫向擴展能力,可以提供極高的擴展性。而傳統數據庫,比如MySQL,在數據量達到P級別的時候就很難處理。而Trafodion卻可以借助HBase的擴展性,僅通過增加普通Linux服務器就可以增加計算和存儲能力,進而支持大數據應用。
  相關鏈接地址,如下所示:
Apache Trafodion Home
Apache Trafodion WiKi
Apache Trafodion On Github

2.4.3 Apache Drill
  Drill 是 Apache 開源的,用于大數據探索的 SQL 查詢引擎。她在大數據應用中,面對結構化數據和變化迅速的數據,她能夠去兼容,并且高性能的去分析,同時,還提供業界都熟悉的標準的查詢語言,即:ANSI SQL 生態系統。Drill 提供即插即用,在現有的 Hive,HBase,S3 等存儲介質中可以隨時整合部署。
  相關鏈接地址,如下所示:
Apache Drill Home

2.4.4 Cloudera Impala
  類似于 Drill 的一款大數據實時查詢引擎,依賴 CDH 環境。
  相關鏈接地址,如下所示:
Cloudera Impala Home
Impala On Github

2.4.5 Apache Kylin
  Kylin 是一款開源的分布式數據分析引擎由 eBay 公司提供。支持 Hadoop 大數據集 OLAP 業務/
  相關鏈接地址,如下所示:
Apache Kylin Home

另外,還有[Apache Tajo],[Apache Phoenix] 等,這里就不一一列舉了。
2.5 數據采集
2.5.1 Apache Flume
  Flume 是一個分布式,可靠的,可用的服務,有效的收集,聚合和移動海量的日志數據。它有一個簡單而靈活的架構,基于流數據流。具有很好的冗余和容錯性,以及可靠性和多故障轉移和恢復機制。它使用一個簡單的可擴展數據模型,并允許在線分析應用。
  相關鏈接地址,如下所示:
Apache Flume Home

2.5.2 Apache Sqoop
  一款從 HDFS 到 RDBMS 之間做數據交互的工具。類似于 Flume。
  相關鏈接地址,如下所示:
Apache Sqoop Project

2.5.3 Apache Kafka
  分布式發布-訂閱消息系統,用于處理流式海量數據。Kafka 是一個由 LinkedIn 開發的消息隊列。能嫁接 HDFS 這樣的存儲介質,能被 Storm,Spark這類實時或類實時數據模型消費。
  相關鏈接地址,如下所示:
Apache Kafka
Kafka On Github

2.5.4 Apache NiFi
  Apache NiFi 是由美國國家安全局(NSA)貢獻給 Apache 基金會的開源項目,目前已被順利孵化完成成為 Apache 的頂級項目之一。Apache NiFi 其設計目標是自動化系統間的數據流。基于其工作流式的編程理念,NiFi 擁有易使用,高可用以及高配置等特性。其尤為突出的兩大特性是:強大的用戶界面和良好的數據回溯工具。NiFi 的用戶界面允許用戶在瀏覽器中直觀的理解并與數據流進行交互,快速和安全的進迭代。其數據回溯特性允許用戶查看一個對象如何在系統間流轉,回放以及可視化關鍵步驟之前以及之后發生的情況,包括大量復雜的圖式轉換,Fork,Join 以及其它操作等。另外,NiFi 使用基于組件的擴展模型用以為復雜的數據流快速增加功能,開箱即用的組件中,處理文件系統的包括 FTP,SFTP 以及 HTTP 等,同樣也支持 HDFS。
  相關鏈接地址,如下所示:
Apache NiFi

另外,還有 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 的頂級項目之一。
  相關鏈接地址,如下所示:
Apache Thrift

2.6.2 Apache Zookeeper
  Zookeeper 分布式服務框架是 Apache Hadoop 的一個子項目,它主要是用來解決分布式應用中經常遇到的一些數據管理問題,如:統一命名服務,狀態同步服務,集群管理,分布式應用配置項的管理等。
  相關鏈接地址,如下所示:
Apache Zookeeper
Google Chubby

2.6.3 Apache Avro
  Apache Avro 是 Hadoop 中的一個子項目,也是 Apache 中的一個獨立的項目,Avro 是一個基于二進制數據傳輸高性能的中間件。在 Hadoop 的其它項目中,例如 HBase,Hive 的 Client 端與服務端的數據傳輸也采用了這個工具。Avro 是一個數據序列化的系統,它可以將數據結構或對象轉化成便于存儲或傳輸的格式。Avro 設計之初就用來支持數據密集型應用,適合于遠程或本地大規模數據的存儲和交換。擁有一下特點:
豐富的數據結構類型
快速可壓縮的二進制數據形式,對數據二進制序列化后可以節約數據存儲空間和網絡傳輸帶寬
存儲持久數據的文件容器
可以實現遠程過程調用 RPC
簡單的動態語言結合功能

相關鏈接地址,如下所示:
Apache Avro

另外,還有 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 作業等),其中指定了動作執行的順序。
  相關鏈接地址,如下所示:
Apache Oozie
Oozie On Github

2.7.2 Linkedin Azkaban
  Hadoop 工作流管理。提供友好的 Web UI 界面進行批處理作業調度(定時或及時)。
  相關鏈接地址,如下所示:
Azkaban Home
Azkaban On Github

2.7.3 Apache Falcon
  Apache Falcon 是一個面向 Hadoop 的,新的數據處理和管理平臺,設計用于數據移動,數據管道協調,生命周期管理和數據發現。它使用終端用戶可以快速的將他們的數據以及相關的處理和管理任務上載到 Hadoop 集群。在 Apache Falcon 中,基礎設施端點,數據集,處理規則均是聲明式的。這種聲明式配置顯式定義了實體之間的依賴關系。這也是該平臺的一個特點,它本身只維護依賴關系,而并不做任何繁重的工作,所有的功能和工作流狀態管理需求都委托給工作流調度程序來完成。
  相關鏈接地址,如下所示:
Apache Falcon

2.8 系統部署
2.8.1 Apache Ambari
  用于創建,管理,監控 Hadoop 集群的工具,可以很方便的安裝,調試 Hadoop 集群,支持的平臺組件也是越來越多,如 Spark,Storm 等計算模型,以及資源調度平臺 YARN 等,都能通過 Ambari 輕松部署管理。
  相關鏈接地址,如下所示:
Apache Ambari

2.8.2 CDH
  Cloudera 公司的產品,類似于 Ambari 產品,用于創建,管理,監控 Hadoop 集群。
  相關鏈接地址,如下所示:
CDH

2.9 可視化
2.9.1 Apache Zeppelin
  你可以制作出漂亮的數據,使用 SQL,Scala 或者其它。它擁有以下特性:
數據收集
數據發掘
數據分析
數據可視化和集成

目前支持的中間件有:Spark,md,sh,Hive,Tajo,Flink,Cassandra,Phoenix,Kylin 等
  相關鏈接地址,如下所示:
Apache Zeppelin

3.總結
  Hadoop 生態圈是非常龐大的,上述列舉的只是其生態圈中常用的一部分,下圖給大家展示了本篇博客相關內容的關聯圖,如下圖所示:



4.結束語
  這篇博客就和大家分享到這里,如果大家在研究學習的過程當中有什么問題,可以加群進行討論或發送郵件給我,我會盡我所能為您解答,與君共勉!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容