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