Hadoop系統運行於一個由普通商用服務器組成的計算集羣上,該服務器集羣在提供大規模分佈式數據存儲資源的同時,也提供大規模的並行化計算資源。程序員
在大數據處理軟件系統上,隨着Apache Hadoop系統開源化的發展,在最初包含HDFS、MapReduce、HBase等基本子系統的基礎上,至今Hadoop平臺已經演進爲一個包含不少相關子系統的完整的大數據處理生態系統。圖1-15展現了Hadoop平臺的基本組成與生態系統。算法
1.MapReduce並行計算框架數據庫
MapReduce並行計算框架是一個並行化程序執行系統。它提供了一個包含Map和Reduce兩階段的並行處理模型和過程,提供一個並行化編程模型和接口,讓程序員能夠方便快速地編寫出大數據並行處理程序。MapReduce以鍵值對數據輸入方式來處理數據,並能自動完成數據的劃分和調度管理。在程序執行時,MapReduce並行計算框架將負責調度和分配計算資源,劃分和輸入輸出數據,調度程序的執行,監控程序的執行狀態,並負責程序執行時各計算節點的同步以及中間結果的收集整理。MapReduce框架提供了一組完整的供程序員開發MapReduce應用程序的編程接口。編程
2.分佈式文件系統HDFS服務器
HDFS(Hadoop Distributed File System)是一個相似於Google GFS的開源的分佈式文件系統。它提供了一個可擴展、高可靠、高可用的大規模數據分佈式存儲管理系統,基於物理上分佈在各個數據存儲節點的本地Linux 系統的文件系統,爲上層應用程序提供了一個邏輯上成爲總體的大規模數據存儲文件系統。與GFS相似,HDFS採用多副本(默認爲3個副本)數據冗餘存儲機制,並提供了有效的數據出錯檢測和數據恢復機制,大大提升了數據存儲的可靠性。網絡
3.分佈式數據庫管理系統HBase數據結構
爲了克服HDFS難以管理結構化/半結構化海量數據的缺點,Hadoop提供了一個大規模分佈式數據庫管理和查詢系統HBase。HBase是一個創建在HDFS之上的分佈式數據庫,它是一個分佈式可擴展的NoSQL數據庫,提供了對結構化、半結構化甚至非結構化大數據的實時讀寫和隨機訪問能力。 HBase提供了一個基於行、列和時間戳的三維數據管理模型,HBase中每張表的記錄數(行數)能夠多達幾十億條甚至更多,每條記錄能夠擁有多達上百萬的字段。框架
4.公共服務模塊Common機器學習
Common是一套爲整個Hadoop系統提供底層支撐服務和經常使用工具的類庫和API編程接口,這些底層服務包括Hadoop抽象文件系統 FileSystem、遠程過程調用RPC、系統配置工具Configuration以及序列化機制。在0.20及之前的版本中,Common包含 HDFS、MapReduce和其餘公共的項目內容;從0.21版本開始,HDFS和MapReduce被分離爲獨立的子項目,其他部份內容構成 Hadoop Common。分佈式
5.數據序列化系統Avro
Avro是一個數據序列化系統,用於將數據結構或數據對象轉換成便於數據存儲和網絡傳輸的格式。Avro提供了豐富的數據結構類型,快速可壓縮的二進制數據格式,存儲持久性數據的文件集,遠程調用RPC和簡單動態語言集成等功能。
6.分佈式協調服務框架Zookeeper
Zookeeper是一個分佈式協調服務框架,主要用於解決分佈式環境中的一致性問題。Zookeeper主要用於提供分佈式應用中常常須要的系統可靠性維護、數據狀態同步、統一命名服務、分佈式應用配置項管理等功能。Zookeeper可用來在分佈式環境下維護系統運行管理中的一些數據量不大的重要狀態數據,並提供監測數據狀態變化的機制,以此配合其餘Hadoop子系統(如HBase、Hama等)或者用戶開發的應用系統,解決分佈式環境下系統可靠性管理和數據狀態維護等問題。
7.分佈式數據倉庫處理工具Hive
Hive是一個創建在Hadoop之上的數據倉庫,用於管理存儲於HDFS或HBase中的結構化/半結構化數據。它最先由Facebook開發並用於處理並分析大量的用戶及日誌數據,2008年Facebook將其貢獻給Apache成爲Hadoop開源項目。爲了便於熟悉SQL的傳統數據庫使用者使用Hadoop系統進行數據查詢分析,Hive容許直接用相似SQL的HiveQL查詢語言做爲編程接口編寫數據查詢分析程序,並提供數據倉庫所須要的數據抽取轉換、存儲管理和查詢分析功能,而HiveQL語句在底層實現時被轉換爲相應的MapReduce程序加以執行。
8.數據流處理工具Pig
Pig是一個用來處理大規模數據集的平臺,由Yahoo!貢獻給Apache成爲開源項目。它簡化了使用Hadoop進行數據分析處理的難度,提供一個面向領域的高層抽象語言Pig Latin,經過該語言,程序員能夠將複雜的數據分析任務實現爲Pig操做上的數據流腳本,這些腳本最終執行時將被系統自動轉換爲MapReduce任務鏈,在Hadoop上加以執行。Yahoo!有大量的MapReduce做業是經過Pig實現的。
9.鍵值對數據庫系統Cassandra
Cassandra是一套分佈式的K-V型的數據庫系統,最初由Facebook開發,用於存儲郵箱等比較簡單的格式化數據,後Facebook將 Cassandra貢獻出來成爲Hadoop開源項目。Cassandra以Amazon專有的徹底分佈式Dynamo爲基礎,結合了Google BigTable基於列族(Column Family)的數據模型,提供了一套高度可擴展、最終一致、分佈式的結構化鍵值存儲系統。它結合了Dynamo的分佈技術和Google的 Bigtable數據模型,更好地知足了海量數據存儲的需求。同時,Cassandra變動垂直擴展爲水平擴展,相比其餘典型的鍵值數據存儲模型,Cassandra提供了更爲豐富的功能。
10.日誌數據處理系統Chukwa
Chukwa是一個由Yahoo!貢獻的開源的數據收集系統,主要用於日誌的收集和數據的監控,並與MapReduce協同處理數據。Chukwa 是一個基於Hadoop的大規模集羣監控系統,繼承了Hadoop系統的可靠性,具備良好的適應性和擴展性。它使用HDFS來存儲數據,使用 MapReduce來處理數據,同時還提供靈活強大的輔助工具用以分析、顯示、監視數據結果。
11.科學計算基礎工具庫Hama
Hama是一個基於BSP並行計算模型(Bulk Synchronous Parallel,大同步並行模型)的計算框架,主要提供一套支撐框架和工具,支持大規模科學計算或者具備複雜數據關聯性的圖計算。Hama相似 Google公司開發的Pregel,Google利用Pregel來實現圖遍歷(BFS)、最短路徑(SSSP)、PageRank等計算。Hama能夠與Hadoop的HDSF進行完美的整合,利用HDFS對須要運行的任務和數據進行持久化存儲。因爲BSP在並行化計算模型上的靈活性,Hama框架可在大規模科學計算和圖計算方面獲得較多應用,完成矩陣計算、排序計算、PageRank、BFS等不一樣的大數據計算和處理任務。
12.數據分析挖掘工具庫Mahout
Mahout來源於Apache Lucene子項目,其主要目標是建立並提供經典的機器學習和數據挖掘並行化算法類庫,以便減輕須要使用這些算法進行數據分析挖掘的程序員的編程負擔,不須要本身再去實現這些算法。Mahout如今已經包含了聚類、分類、推薦引擎、頻繁項集挖掘等普遍使用的機器學習和數據挖掘算法。此外,它還提供了包含數據輸入輸出工具,以及與其餘數據存儲管理系統進行數據集成的工具和構架。
13.關係數據交換工具Sqoop
Sqoop是SQL-to-Hadoop的縮寫,是一個在關係數據庫與Hadoop平臺間進行快速批量數據交換的工具。它能夠將一個關係數據庫中的數據批量導入Hadoop的HDFS、HBase、Hive中,也能夠反過來將Hadoop平臺中的數據導入關係數據庫中。Sqoop充分利用了 Hadoop MapReduce的並行化優勢,整個數據交換過程基於MapReduce實現並行化的快速處理。
14.日誌數據收集工具Flume
Flume是由Cloudera開發維護的一個分佈式、高可靠、高可用、適合複雜環境下大規模日誌數據採集的系統。它將數據從產生、傳輸、處理、輸出的過程抽象爲數據流,並容許在數據源中定義數據發送方,從而支持收集基於各類不一樣傳輸協議的數據,並提供對日誌數據進行簡單的數據過濾、格式轉換等處理能力。輸出時,Flume可支持將日誌數據寫往用戶定製的輸出目標。