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
關于分布式文件系統的內容就贅述到這里;其它分布式文件系統,如: 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 接口。
相關鏈接地址如下所示:
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
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
這里列舉了熱度較高的分布式編程模型,其它的編程模型,如下表所示: