1.1.3 Hadoop生態系統 算法
通過幾年的快速發展,Hadoop如今已經發展成爲包含多個相關項目的軟件生態系統。狹義的Hadoop核心只包括Hadoop Common、Hadoop HDFS和Hadoop MapReduce三個子項目,但和Hadoop核心密切相關的,還包括Avro、ZooKeeper、Hive、Pig和HBase等項目,構建在這些項目之上的,面向具體領域、應用的Mahout、X-Rime、Crossbow和Ivory等項目,以及Chukwa、Flume、Sqoop、Oozie和Karmasphere等數據交換、工做流和開發環境這樣的外圍支撐系統。它們提供了互補性的服務,共同提供了一個海量數據處理的軟件生態系統,Hadoop生態系統如圖1-1所示。 數據庫
下面詳細介紹生態系統的組成。 網絡
1. Hadoop Common 數據結構
從Hadoop 0.20版本開始,原來Hadoop項目的Core部分改名爲Hadoop Common。Common爲Hadoop的其餘項目提供了一些經常使用工具,主要包括系統配置工具Configuration、遠程過程調用RPC、序列化機制和Hadoop抽象文件系統FileSystem等。它們爲在通用硬件上搭建雲計算環境提供基本的服務,併爲運行在該平臺上的軟件開發提供了所需的API。 架構
2. Avro 框架
Avro由Doug Cutting牽頭開發,是一個數據序列化系統。相似於其餘序列化機制,Avro能夠將數據結構或者對象轉換成便於存儲和傳輸的格式,其設計目標是用於支持數據密集型應用,適合大規模數據的存儲與交換。Avro提供了豐富的數據結構類型、快速可壓縮的二進制數據格式、存儲持久性數據的文件集、遠程調用RPC和簡單動態語言集成等功能。 機器學習
3. ZooKeeper 分佈式
在分佈式系統中如何就某個值(決議)達成一致,是一個十分重要的基礎問題。ZooKeeper做爲一個分佈式的服務框架,解決了分佈式計算中的一致性問題。在此基礎上,ZooKeeper可用於處理分佈式應用中常常遇到的一些數據管理問題,如統一命名服務、狀態同步服務、集羣管理、分佈式應用配置項的管理等。ZooKeeper常做爲其餘Hadoop相關項目的主要組件,發揮着愈來愈重要的做用。 工具
4. HDFS oop
HDFS(Hadoop Distributed File System,Hadoop分佈式文件系統)是Hadoop體系中數據存儲管理的基礎。它是一個高度容錯的系統,能檢測和應對硬件故障,用於在低成本的通用硬件上運行。HDFS簡化了文件的一致性模型,經過流式數據訪問,提供高吞吐量應用程序數據訪問功能,適合帶有大型數據集的應用程序。
5. MapReduce
MapReduce是一種計算模型,用以進行大數據量的計算。Hadoop的MapReduce實現,和Common、HDFS一塊兒,構成了Hadoop發展初期的三個組件。MapReduce將應用劃分爲Map和Reduce兩個步驟,其中Map對數據集上的獨立元素進行指定的操做,生成鍵-值對形式中間結果。Reduce則對中間結果中相同「鍵」的全部「值」進行規約,以獲得最終結果。MapReduce這樣的功能劃分,很是適合在大量計算機組成的分佈式並行環境裏進行數據處理。
6. HBase
Google發表了BigTable系統論文後,開源社區就開始在HDFS上構建相應的實現HBase。HBase是一個針對結構化數據的可伸縮、高可靠、高性能、分佈式和麪向列的動態模式數據庫。和傳統關係數據庫不一樣,HBase採用了BigTable的數據模型:加強的稀疏排序映射表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。HBase提供了對大規模數據的隨機、實時讀寫訪問,同時,HBase中保存的數據可使用MapReduce來處理,它將數據存儲和並行計算完美地結合在一塊兒。
7. Hive
Hive是Hadoop中的一個重要子項目,最先由Facebook設計,是創建在Hadoop基礎上的數據倉庫架構,它爲數據倉庫的管理提供了許多功能,包括:數據ETL(抽取、轉換和加載)工具、數據存儲管理和大型數據集的查詢和分析能力。Hive提供的是一種結構化數據的機制,定義了相似於傳統關係數據庫中的類SQL語言:Hive QL,經過該查詢語言,數據分析人員能夠很方便地運行數據分析業務。
8. Pig
Pig運行在Hadoop上,是對大型數據集進行分析和評估的平臺。它簡化了使用Hadoop進行數據分析的要求,提供了一個高層次的、面向領域的抽象語言:Pig Latin。經過Pig Latin,數據工程師能夠將複雜且相互關聯的數據分析任務編碼爲Pig操做上的數據流腳本,經過將該腳本轉換爲MapReduce任務鏈,在Hadoop上執行。和Hive同樣,Pig下降了對大型數據集進行分析和評估的門檻。
9. Mahout
Mahout起源於2008年,最初是Apache Lucent的子項目,它在極短的時間內取得了長足的發展,如今是Apache的頂級項目。Mahout的主要目標是建立一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地建立智能應用程序。Mahout如今已經包含了聚類、分類、推薦引擎(協同過濾)和頻繁集挖掘等普遍使用的數據挖掘方法。除了算法,Mahout還包含數據的輸入/輸出工具、與其餘存儲系統(如數據庫、MongoDB 或Cassandra)集成等數據挖掘支持架構。
10. X-RIME
X-RIME是一個開源的社會網絡分析工具,它提供了一套基於Hadoop的大規模社會網絡/複雜網絡分析工具包。X-RIME在MapReduce 的框架上對十幾種社會網絡分析算法進行了並行化與分佈式化,從而實現了對互聯網級大規模社會網絡/複雜網絡的分析。它包括HDFS存儲系統上的一套適合大規模社會網絡分析的數據模型、基於MapReduce實現的一系列社會網絡分析分佈式並行算法和X-RIME處理模型,即X-RIME工具鏈等三部分。
11. Crossbow
Crossbow是在Bowtie和SOAPsnp基礎上,結合Hadoop的可擴展工具,該工具可以充分利用集羣進行生物計算。其中,Bowtie是一個快速、高效的基因短序列拼接至模板基因組工具;SOAPsnp則是一個重測序一致性序列建造程序。它們在複雜遺傳病和腫瘤易感的基因定位,到羣體和進化遺傳學研究中發揮着重要的做用。Crossbow利用了Hadoop Stream,將Bowtie、SOAPsnp上的計算任務分佈到Hadoop集羣中,知足了新一代基因測序技術帶來的海量數據存儲及計算分析要求。
12. Chukwa
Chukwa是開源的數據收集系統,用於監控大規模分佈式系統(2000+以上的節點, 系統天天產生的監控數據量在T級別)。它構建在Hadoop的HDFS和MapReduce基礎之上,繼承了Hadoop的可伸縮性和魯棒性。Chukwa包含一個強大和靈活的工具集,提供了數據的生成、收集、排序、去重、分析和展現等一系列功能,是Hadoop使用者、集羣運營人員和管理人員的必備工具。
13. Flume
Flume是Cloudera開發維護的分佈式、可靠、高可用的日誌收集系統。它將數據從產生、傳輸、處理並最終寫入目標的路徑的過程抽象爲數據流,在具體的數據流中,數據源支持在Flume中定製數據發送方,從而支持收集各類不一樣協議數據。同時,Flume數據流提供對日誌數據進行簡單處理的能力,如過濾、格式轉換等。此外,Flume還具備可以將日誌寫往各類數據目標(可定製)的能力。總的來講,Flume是一個可擴展、適合複雜環境的海量日誌收集系統。
14. Sqoop
Sqoop是SQL-to-Hadoop的縮寫,是Hadoop的周邊工具,它的主要做用是在結構化數據存儲與Hadoop之間進行數據交換。Sqoop能夠將一個關係型數據庫(例如MySQL、Oracle、PostgreSQL等)中的數據導入Hadoop的HDFS、Hive中,也能夠將HDFS、Hive中的數據導入關係型數據庫中。Sqoop充分利用了Hadoop的優勢,整個數據導入導出過程都是用MapReduce實現並行化,同時,該過程當中的大部分步驟自動執行,很是方便。
15. Oozie
在Hadoop中執行數據處理工做,有時候須要把多個做業鏈接到一塊兒,才能達到最終目的。針對上述需求,Yahoo開發了開源工做流引擎Oozie,用於管理和協調多個運行在Hadoop平臺上的做業。在Oozie中,計算做業被抽象爲動做,控制流節點則用於構建動做間的依賴關係,它們一塊兒組成一個有向無環的工做流,描述了一項完整的數據處理工做。Oozie工做流系統能夠提升數據處理流程的柔性,改善Hadoop集羣的效率,並下降開發和運營人員的工做量。
16. Karmasphere
Karmasphere包括Karmasphere Analyst和Karmasphere Studio。其中,Analyst提供了訪問保存在Hadoop裏面的結構化和非結構化數據的能力,用戶能夠運用SQL或其餘語言,進行即時查詢並作進一步的分析。Studio則是基於NetBeans的MapReduce集成開發環境,開發人員能夠利用它方便快速地建立基於Hadoop的MapReduce應用。同時,該工具還提供了一些可視化工具,用於監控任務的執行,顯示任務間的輸入輸出和交互等。須要注意的是,在上面說起的這些項目中,Karmasphere是惟一不開源的工具。
正是這些項目的發展,帶來了廉價的處理大數據的能力,讓Hadoop成爲大數據行業發展背後的驅動力。現在,Hadoop已成爲分佈式大數據處理事實上的標準。
生態系統圖