Hadoop家族成員概述
一、Hadoop簡介
1.1 什么是Hadoop?
Hadoop是一個分布式系統基礎架構,由Apache基金會所開發,目前Yahoo!是其最重要的貢獻者。
Hadoop實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS,用戶可以在不了解分布式底層細節的情況下,開發分布式應用程序,充分利用集群的威力高速運算和存儲。
1.2 Hadoop的特點
高擴容能力:能可靠地存儲和處理千兆字節(PB)的數據。
成本低:可以通過普通機器組成的服務器來分發以及處理數據,這些服務器群總計可達數千個節點,同時Hadoop是開源的。
高效率:通過分發數據,Hadoop可以在數據所在的節點上並行地處理它們,這使得處理非常的快速。
高可靠性:Hadoop能自動地維護數據的多份復制,並且在任務失敗后能自動地重新部署計算任務。
1.3 誰在用Hadoop?
Yahoo!、IBM、Facebook、Amazon、百度、騰訊、新浪、搜狐、淘寶等。
1.4 Hadoop家族成員
下圖為Hadoop家族成員圖,整個Hadoop項目由以下幾個子項目構成。
圖1:Hadoop家族成員圖
·Hadoop Common
Hadoop體系最底層的一個模塊,為Hadoop各子項目提供各種工具,如:配置文件和日志操作等。
·Avro :
Avro是Doug cutting主持的RPC項目,有點類似Google的protobuf和Facebook的thrift。avro用來做以后hadoop的RPC,使hadoop的RPC模塊通信速度更快、數據結構更緊湊。
二、分布式文件系統(HDFS)
2.1 HDFS簡介
HDFS是一種用於Hadoop應用程序的主存儲系統,也是一個高容錯性系統,適合部署在廉價機上,同時,HDFS能提高吞吐量的數據訪問,非常適合大規模數據集上的應用。
HDFS為了做到可靠性創建了多份數據塊的復制,並將它們放置在服務器群的計算節點中,MapReduce就可以在它們所造的幾點上處理這些數據了。
HDFS默認的最基本的存儲單位是64M的數據塊。
2.2 HDFS能做什么?
HDFS適合做什么?
·存儲並管理PB級數據。
·處理非結構化數據。
·注重數據處理的吞吐量。
·應用模式為:write-once-read-many存取模式。
HDFS不適合做?
·存儲小文件(不建議使用)。
·大量的隨機讀(不建議使用)。
·需要對文件的修改(不支持)。
2.3 HDFS組件的主要功能
HDFS主要由NameNode和DataNode組成, NameNode是HDFS中負責namespace管理的節點,NameNode保存了當前集群中所存儲的的所有的文件的元數據信息,NameNode同時與集群中其它的節點通信,以保持元數據與系統中的文件的一致性,同時也和 client通信,以響應client對文件的需要。DataNode是文件系統的工作節點,他們根據客戶端或者是DataNode的調度存儲和檢索數據,並且定期向DataNode發送他們所存儲的塊(block)的列表。
沒有NameNode,HDFS就不能工作。
NameNode |
DataNode |
·存儲元數據 |
·存儲文件內容 |
·元數據保存在內存中 |
·文件內容保存在磁盤 |
·保存文件block和datanode之間的映射關系 |
·維護了block到datanode本地文件的映射關系 |
表1:HDFS的主要功能
基本概念:
1) 數據塊(block)
·HDFS默認的最基本的存儲單位是64M的數據塊。
·和普通文件系統相同的是,HDFS中的文件是被分成64M一塊的數據塊存儲的。
·不同於普通文件系統的是,HDFS中,如果一個文件小於一個數據塊的大小,並不占用整個數據塊的存儲空間。
2) 元數據節點(NameNode)
元數據節點用來管理文件系統的命名空間。
3) 數據節點(DataNode)
數據節點是文件系統中掙扎存儲數據的地方。
三、MapReduce
MapReduce是一種處理海量數據的並行編程模型和計算框架,主要用於大數據集的並行計算。
3.1 MapReduce基礎
1) MapReduce處理數據集的過程,如下圖:
圖2:MapReduce處理數據集的過程
Map階段:
MapReduce框架將任務的輸入分割成固定大小的片段(splites),隨后敬愛那個每個splite進一步分解成一批鍵值對<K1,V1>。 Hadoop為每個split創建一個Map任務用於執行用戶自定義的Map函數,並將對應split中的<K1,V1>對作為輸入,得到計算的中間結果<K2,V2>,接着將中間結果按照K2進行排序,並key值相同的value放在一起形成<K2,list(V2)>元組。最后在根據key值的范圍將這些遠足進行分組,隨影不同的Reduce任務。
Reduce階段:
Reducer把從不同Mapper接收來的數據整合在一起並進行排序,然后調用用戶自定義的reduce函數,對輸入<K2,list(V2)>對進行處理,得到鍵值對<K3,V3>並輸出到HDFS上。job.setNumReduceTask()方法設置reduce數。
3.2 MapReduce的集群行為
·任務調度與執行:有一個JobTracker和多個TaskTracker兩類節點控制完成。
·本地計算:split通常應小於或等於HDFS數據塊的大小,從而保證split不會跨越兩台計算機存儲,便於本地計算。
·shuffle過程:將Mapper的輸出結果按照key值分成R份(R是設定的Reduce個數),划分時使用哈希函數,保證某一范圍內的key由某個Reduce來處理。
·合並Mapper輸出:在Shuffle之前先的結果進行合並(Combine過程)即將中間結果相同key值的多組<key,value>對合並成一對。可以減少中間結果數量,從而減少數據傳輸過程中的網絡流量。
·讀取中間結果:Mapper的輸出結果被直接寫到本地磁盤而非HDFS。
·任務管道:有時R個Reduce會產生R個結果,會將這R個結果作為另一個計算任務的輸入開始。
3.2 Map/Reduce的個數
·Mappers的數目直接由splits來決定。
·Reduces的數目略小於reduce slots的總數。
所有的Reduces可以並行執行,減少排隊時間。
對於未執行的reducer的slots,可以在其他reducer發生故障時立即分配給新創建的reducer。
·Reduces的個數要小於Mappers的個數。
四、Chukwa
4.1 Chukwa簡介
Chukwa是由Yahoo貢獻,基於Hadoop的大集群監控系統,可以用他來分析和收集系統中的數據(日志)。Chukwa運行HDFS中存儲數據 的收集器和MapReduce框架之上,並繼承了Hadoop的可擴展性 和魯棒性, Chukwa使用MapReduce來生成報告,他還包括一個用於監測和分析結果顯示的web-portal工具,通過web-portal工具使這個收 集數據的更佳具有靈活性。
4.2 Chukwa由那幾個組件組成?
Chukwa是Yahoo開發的Hadoop之上的數據采集/分析框架,主要用於日志采集/分析。該框架提供了采集數據的Agent,由Agent采集數 據通過HTTP發送數據給Cluster的Collector,collector把數據 sink進Hadoop,然后通過定期運行Map reducer來分析數據,將結果呈現給用戶。
Chukwa 有以下4個主要的組成部分:
·Agent:收集各服務器的數據
·Collectors:接收agent的數據;並寫進存儲
·MapReduce jobs :歸檔數據
· HICC :就是 Hadoop Infrastructure Care Center的四個英文單詞的縮寫,簡單來說是個Web工程用於ChukWa的內容展示。
五、Pig
Pig是SQL-like語言,是在MapReduce上構建的一種高級查詢語言,把一些運算編譯進MapReduce模型的Map和Reduce中,並且用戶可以定義自己的功能。
六、Hive
Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供完整的SQL查詢功能,可以將SQL語句轉換為MapReduce任務進行運行。其優點是學習成本低,可以通 過類SQL語句塊快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫。
七、HBase
7.1 HBase簡介
HBase是Hadoop的數據庫。能對大型數據提供隨即、實時的讀寫訪問。HBase的目標是存儲並處理大型的數據。HBase是一個開源的、分布式的、多版本的、面向列的存儲模型。它存儲的是松散型數據。
HBase是Google BigTable的開源實現。Google BigTable利用 GFS 作為其文件存儲系統,HBase利用Hadoop HDFS作為其文件存儲系統;Google 運行 MapReduce來處理BigTable中的海量數 據,HBase同樣利用Hadoop MapReduce來處理HBase中的海量數據;Google BigTable利用 Chubby作為協同服務,HBase利用Zookeeper作為對應。
7.2 HBase的特點
·高可靠性
·高效性
·面向列
·可伸縮
·可在廉價PC Server上搭建大規模的結構化存儲集群
7.3 HBase的使用場景
·成熟的數據分析主題,查詢模式已經確立並且不輕易改變。
·傳統的關系型數據庫已經無法承受負荷,高速插入,大量讀取。
·適合海量的,但同時也是簡單的操作(例如key-value)。
八、Zookeeper
Zookeeper是Google的Chubby一個開源的實現。它是一個針對大型分布式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、分布式同步、組服務等。ZooKeeper的目標就是封裝好復雜易 出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶