Hadoop教程:Hadoop的源起和體系架構(gòu)
1.Hadoop 發(fā)展歷史
1.1 Hadoop 產(chǎn)生背景
Hadoop最早起源于Nutch。Nutch是一個開源的網(wǎng)絡(luò)搜索引擎,始于2002年,Nutch的設(shè)計目標是構(gòu)建一個大型的全網(wǎng)搜索引擎,包括抓取網(wǎng)頁,索引,查詢等,但是隨著數(shù)據(jù)量的增加,遇到了擴展問題。直至2003年google發(fā)表了一篇關(guān)于google的文件系統(tǒng)GFS,該論文描述了google搜索引擎網(wǎng)頁數(shù)據(jù)的存儲架構(gòu),該架構(gòu)解決了Nutch遇到的問題,隨即實現(xiàn)了自己的分布式文件系統(tǒng),即NDFS(此間google只是開源思想,但并未開源代碼),到了2004年的google的另一篇論文MapReduce:simplified data processing on large cluster ,震驚世界,該論文描述了分布式計算的框架,但也只是開源思想,并不開源代碼,Nutch的開發(fā)人員靠自己完成了實現(xiàn),由于NDFS和MapReduce 的成功,2006年Nutch的開發(fā)人員,隨即將其移出Nutch,成為Lucene的子項目,稱為Hadoop(據(jù)說是Doug Cutting兒子的玩具大象的名字),隨著Hadoop的發(fā)展,2008年,Hadoop已經(jīng)成為Apache基金會的頂級項目,也促生了Hadoop家族其他項目的發(fā)展。
1.2 Hadoop思想之源
Hadoop的思想主要來源于google,此間google的倆大論文GFS,MapReduce起了決定性的作用,而google的低成本之道(不使用超級計算機,不用存儲;大量使用PC server,提供冗余的集群服務(wù)...)也是成功的根本。而google的成功也得益于Page Rank算法。
更加詳盡有關(guān)Page Rank可以參考:http://blog.csdn.net/v_july_v/article/details/6142146
目前hadoop發(fā)展迅速,是實現(xiàn)云計算標準開源軟件,已經(jīng)可以在數(shù)千節(jié)點上面運行,處理數(shù)據(jù)量和速度有很可觀的效果。同時,hadoop家族的項目也得到了相應(yīng)的發(fā)展。
2 Hadoop的架構(gòu)
2.1 Hadoop的倆大支柱:HDFS和MapReduce
其中HDFS用于大規(guī)模數(shù)據(jù)的分布式存儲,而MapReduce則構(gòu)建在HDFS之上,對數(shù)據(jù)進行分布式計算。
2.1 HDFS架構(gòu)
HDFS是一個具有高容錯性的分布式系統(tǒng),適合部署在廉價的機器上,HDFS可以提供高吞吐量的數(shù)據(jù)訪問,適合大數(shù)據(jù)集的應(yīng)用,主要有client,NameNode,SecondaryNameNode,DataNode幾個組件構(gòu)成。
client:通過于NameNode于DataNode交互訪問HDFS文件。
NameNode:HDFS的守護程序,是個“總管”,記錄文件是如何分割成數(shù)據(jù)塊的,以及這些數(shù)據(jù)塊存儲到哪些節(jié)點,對IO和內(nèi)存進行集中管理,且是個單點。
SecondaryNameNode:監(jiān)控HDFS狀態(tài)的輔助后臺程序,每個集群都有一個,與NameNode進行通訊,定期存儲HDFS元數(shù)據(jù)快照,并且在NameNode故障的時候,提供備份作用。
DataNode:負責(zé)把HDFS數(shù)據(jù)塊讀寫到本地文件系統(tǒng),并將數(shù)據(jù)定期匯報給NameNode,DataNode以固定大小的block(默認64MB)為基本單位。
2.2 MapReduce 架構(gòu)
同HDFS一樣,MR也采用了Master/Slave模式,有以下組件:client,JobTracker,TaskTracker,Task.
JobTracker:負責(zé)資源監(jiān)控和作業(yè)調(diào)度,運行主節(jié)點,對HDFS總控,決定哪些文件an參與處理,然后分割task并分配節(jié)點,重啟失敗的task等
TaskTracker:位于slave節(jié)點上,與datanode結(jié)合,管理各自節(jié)點上的task,與JobTracker交互(周期性的通過 heartbeat將資源使用情況和任務(wù)進度匯報給jobtracker)。TaskTracker通過使用“slot”等量劃分(劃分方法用戶自己決定)節(jié)點上的資源量,分為Mapslot 和Reduceslot來提供Map任務(wù)和Reduce任務(wù)的使用。
Task:Map Task和Reduce Task,有TaskTracker啟動。
Map Task流程:Map Task先將對應(yīng)的split(MapReduce處理單位)迭代解析成一個個的key/alue對,依次調(diào)用map函數(shù)進行處理,最終將臨時結(jié)果存到本地磁盤中,其臨時數(shù)據(jù)分成若干個partition,每個partition將被一個reduce task 處理。
reduce task流程:讀取partition部分,對結(jié)果排序,依次讀取,調(diào)用用戶自己的reduce函數(shù)處理,結(jié)果存到HDFS上面。
參考書籍:Hadoop實戰(zhàn),Hadoop技術(shù)內(nèi)幕 深入解析MapReduce架構(gòu)設(shè)計與實現(xiàn)原理。
來源:編程大巴