最近沒事研究了下Hadoop,先來了解下Hadoop的架構(gòu)知識?
Hadoop是一個能夠?qū)Υ罅繑?shù)據(jù)進行分布式處理的軟件框架洒沦,實現(xiàn)了Google的MapReduce編程模型和框架,能夠把應(yīng)用程序分割成許多小的工作單元圃伶,并把這些單元放到任何集群節(jié)點上執(zhí)行鸟召。在MapReduce中,一個準備提交執(zhí)行的應(yīng)用程序成為“作業(yè)job”间影,而從一個作業(yè)換分出的、運行于個計算節(jié)點的工作單元成為“任務(wù)task”茄茁。此外魂贬,Hadoop提供的分布式文件系統(tǒng)HDFS主要負責(zé)各個節(jié)點上的數(shù)據(jù)的存儲,并實現(xiàn)了高吞吐率的數(shù)據(jù)讀寫裙顽。
在分布式存儲和分布式計算方面付燥,Hadoop都使用主/從(Master/Slave)架構(gòu)。在一個配置完整的集群上想讓Hadoop跑起來愈犹,需要在集群中運行一系列后臺(daemon)程序键科。不同的禍胎程序扮演著不同的角色,這些角色由NameNode,DataNode萝嘁,Secondary NameNode梆掸,JobTracker,TaskTracker組成牙言,其中NameNode,Secondary NameNode怪得,JobTracker運行在Master幾點上咱枉,而在每個Slave節(jié)點上,部署著一個DataNode和TaskTracker徒恋,一邊這個Slave服務(wù)器上運行的數(shù)據(jù)處理程序能盡可能直接處理本機的數(shù)據(jù)蚕断。對Master節(jié)點需要特別說明的是,在小集群中入挣,Secondary NameNode可以屬于某個從節(jié)點亿乳;在大型集群匯中,NameNode和JobTracker被分別部署在兩臺服務(wù)器上径筏。
NameNode
NameNode是HDFS的守護程序葛假,負責(zé)記錄文件是如何分割成數(shù)據(jù)塊的,以及數(shù)據(jù)塊被存儲到哪些數(shù)據(jù)節(jié)點上滋恬。它的主要功能是對內(nèi)存及I/O進行集中管理聊训。
一般來說,NameNode所在的服務(wù)器不存儲任何用戶信息或執(zhí)行計算任務(wù)恢氯,以避免這些程序降低服務(wù)器的性能带斑。如果其他從服務(wù)器因出現(xiàn)軟硬件的問題而宕機,Hadoop集群仍舊可以繼續(xù)運行勋拟,或者快速重啟勋磕。但是由于NameNode是Hadoop集群中的一個單一節(jié)點,一旦NameNode服務(wù)器宕機敢靡,整個系統(tǒng)將無法運行挂滓。
DataNode
集群中的每個從服務(wù)器都運行著一個DataNode后臺程序,它負責(zé)把HDFS數(shù)據(jù)塊讀寫到本地的文件系統(tǒng)醋安。當(dāng)需要通過客戶端讀/寫某個數(shù)據(jù)時杂彭,先由NameNode告訴客戶端去哪個DataNode進行具體的讀/寫操作,然后吓揪,客戶端直接與這個DataNode服務(wù)器的后臺程序進行通信亲怠,并且對相應(yīng)的數(shù)據(jù)塊進行讀/寫操作。
Secondary NameNode
Secondary NameNode是一個用來監(jiān)控HDFS狀態(tài)的輔助后臺程序柠辞。就像NameNode一樣团秽,每個集群都有一個Secondary NameNode,并且部署在一臺單獨的服務(wù)器上。Secondary NameNode不同于NameNode习勤,它不接收或記錄任何實時的數(shù)據(jù)變化踪栋,但是,它會與NameNode進行通信图毕,以便定期地保存HDFS元數(shù)據(jù)的快照夷都。由于NameNode是單點的,通過Secondary NameNode的快照功能予颤,可以講NameNode的宕機事件和數(shù)據(jù)損失降低到最小囤官。同時,如果NameNode發(fā)生問題時蛤虐,Secondary NameNode可以及時地作為備用NameNode繼續(xù)使用党饮。
JobTracker
JobTracker后臺程序用來連接應(yīng)用程序與Hadoop。用戶代碼提交到集群以后驳庭,由JobTracker決定哪個文件將被處理刑顺,并且為不同的task分配節(jié)點。同時饲常,它還監(jiān)控所有運行的task蹲堂,一旦某個task失敗了,JobTracker就會自動重新開啟這個task不皆,在大多數(shù)情況下這個task會被放在不同的節(jié)點上贯城,當(dāng)然,具體運行情況取決于重啟的預(yù)設(shè)值霹娄。每個Hadoop集群只有一個JobTracker能犯,一般運行在集群的Master節(jié)點上。
TaskTracker
TaskTracker與負責(zé)存儲數(shù)據(jù)的DataNode相結(jié)合犬耻,其處理結(jié)構(gòu)上也遵循主/從架構(gòu)踩晶。JobTracker位于主節(jié)點,統(tǒng)領(lǐng)MapReduce工作枕磁,而TaskTracker位于從節(jié)點渡蜻,獨立管理各自的task。每個TaskTracker負責(zé)獨立執(zhí)行具體的task计济,而JobTracker負責(zé)分配task茸苇。雖然每個從節(jié)點上僅有唯一的一個TaskTracker,但是每個TaskTracker可以產(chǎn)生多個Java虛擬機(JVM)沦寂,用于并行處理多個map以及reduce任務(wù)学密。TaskTracker的一個重要職責(zé)就是與JobTracker交互。如果IobTaskTracker無法準時地獲取TaskTracker提交的信息传藏,JobTracker就判定TaskTracker已經(jīng)崩潰腻暮,并將任務(wù)分配給其他的節(jié)點處理彤守。