Hadoop核心機制詳細解析
Hadoop的核心機制是通過HDFS文件系統(tǒng)和MapReduce算法進行存儲資源、內(nèi)存和程序的有效利用與管理。在現(xiàn)實的實例中,通過Hadoop,可以輕易的將多臺普通的或低性能的服務(wù)器組合成分布式的運算-存儲集群,提供大數(shù)據(jù)量的存儲和處理能力。
知其然,知其所以然。要想深入學(xué)習(xí)和理解Hadoop的核心機制,還要從MapReduce和HDFS的原理入手。
MapReduce的“大事化小”
作為Google提出的架構(gòu),MapReduce通過Map(映射)和Reduce(化簡)來實現(xiàn)大規(guī)模數(shù)據(jù)(TB級)的并行計算??梢院唵卫斫鉃椋ㄟ^Map(映射)函數(shù),把一組鍵值對映射成一組新的鍵值對;指定并發(fā)的Reduce(化簡)函數(shù),用來保證所有映射的鍵值對中的每一個共享相同的鍵組。
MapReduce是一種大數(shù)據(jù)計算的開發(fā)模式和思想方法。開發(fā)人員先分析需求所提出問題的解決流程,找出數(shù)據(jù)可以并發(fā)處理的部分(Reduce),也就是那些能夠分解為小段的可并行處理的數(shù)據(jù),再將這些能夠采用并發(fā)處理的需求寫成Map程序(Map)。
然后就可以使用大量服務(wù)器來執(zhí)行Map程序,并將待處理的龐大數(shù)據(jù)切割成很多的小份數(shù)據(jù),由每臺服務(wù)器分別執(zhí)行Map程序來處理分配到的那一小段數(shù)據(jù),接著再將每一個Map程序分析出來的結(jié)果,透過Reduce程序進行合并,最后則匯整出完整的結(jié)果。
MapReduce的整個流程就像…
MapReduce是Hadoop分布式計算的關(guān)鍵技術(shù),將要執(zhí)行的問題,拆解成Map和Reduce的方式來執(zhí)行,以達到分散運算的效果。例如要搜尋網(wǎng)頁中的“In Big Data”這個詞,可以先用Map程序,來計算出所有網(wǎng)頁中,每一個詞的位置。再使用Reduce程序,在每一個字的清單中,檢索出“In Big Data”所對應(yīng)的URL,您就來到了這個博客。MapReduce程序的執(zhí)行過程如下:
MapReduce運行流程
MapReduce的運作方式就像快遞公司一樣。物流部門會將發(fā)往各地的包裹先運送到各地的物流分站,再由分站派出進行派送;快遞員等每個包裹的用戶簽單后將數(shù)據(jù)反饋給系統(tǒng)匯總,完成整個快遞流程。在這里,每個快遞員都會負責(zé)配送,所執(zhí)行的動作大致相同,且只負責(zé)少量的包裹,最后由物流公司的系統(tǒng)進行匯總(而不是從一個庫房一個快遞員直接發(fā)往各地;這樣的話估計順風(fēng)、京東神馬的會被人罵死)。
在Hadoop集群架構(gòu)中,服務(wù)器依據(jù)用途可分成Master節(jié)點和Worker節(jié)點,Master負責(zé)分配任務(wù),而Worker負責(zé)執(zhí)行任務(wù)。
Hadoop中的Master與Worker
Hadoop運算集群中的服務(wù)器依用途分成Master節(jié)點和Worker節(jié)點。Master節(jié)點中含有JobTracker、NameNode、TaskTracker和DataNode程序;Worker節(jié)點含有TaskTracker和DataNode。另外在系統(tǒng)的架構(gòu)上,最簡單的Hadoop架構(gòu),可以分成上層的MapReduce運算層以及下層的HDFS數(shù)據(jù)層。
在Master節(jié)點的服務(wù)器中會執(zhí)行兩套程序:一個是負責(zé)安排MapReduce運算層任務(wù)的JobTracker,以及負責(zé)管理HDFS數(shù)據(jù)層的NameNode程序。而在Worker節(jié)點的服務(wù)器中也有兩套程序,接受JobTracker指揮,負責(zé)執(zhí)行運算層任務(wù)的是TaskTracker程序,與NameNode對應(yīng)的則是DataNode程序,負責(zé)執(zhí)行數(shù)據(jù)讀寫操作以及執(zhí)行NameNode的副本策略。
在MapReduce運算層上,擔任Master節(jié)點的服務(wù)器負責(zé)分配運算任務(wù),Master節(jié)點上的JobTracker程序會將Map和Reduce程序的執(zhí)行工作指派給Worker服務(wù)器上的TaskTracker程序,由TaskTracker負責(zé)執(zhí)行Map和Reduce工作,并將運算結(jié)果回復(fù)給Master節(jié)點上的JobTracker。
在HDFS數(shù)據(jù)層上,NameNode負責(zé)管理和維護HDFS的名稱空間、并且控制檔案的任何讀寫動作,同時NameNode會將要處理的數(shù)據(jù)切割成一個個檔案區(qū)塊(Block),每個區(qū)塊是64MB,例如1GB的數(shù)據(jù)就會切割成16個檔案區(qū)塊。NameNode還會決定每一份檔案區(qū)塊要建立多少個副本,一般來說,一個檔案區(qū)塊總共會復(fù)制成3份,并且會分散儲存到3個不同Worker服務(wù)器的DataNode程序中管理,只要其中任何一份檔案區(qū)塊遺失或損壞,NameNode會自動尋找位于其他DataNode上的副本來回復(fù),維持3份的副本策略。
在一套Hadoop集群中,分配MapReduce任務(wù)的JobTracker只有1個,而TaskTracker可以有很多個。同樣地,負責(zé)管理HDFS文件系統(tǒng)的NameNode也只有一個,和JobTracker同樣位于Master節(jié)點中,而DataNode可以有很多個。
不過,Master節(jié)點中除了有JobTracker和NameNode以外,也會有TaskTracker和DataNode程序,也就是說Master節(jié)點的服務(wù)器也可以在本地端扮演Worker角色的工作。
在部署上,因為Hadoop采用Java開發(fā),所以Master服務(wù)器除了安裝操作系統(tǒng)如Linux之外,還要安裝Java執(zhí)行環(huán)境,然后再安裝Master需要的程序,包括了NameNode、JobTracker和DataNode與TaskTracker。而在Worker服務(wù)器上,則只需安裝Linux、Java環(huán)境、DataNode和TaskTracker。
在之后的文章中將詳細說明Hadoop安裝部署方面的問題。這里只針對Hadoop的運行機制及內(nèi)部細節(jié)做了討論;在實際的應(yīng)用中雖然還需要很多知識,但就理解Hadoop和MapReduce核心思想來說,以上的內(nèi)容值得反復(fù)推敲。對技術(shù),要知其然,知其所以然!