Hadoop2.0(HDFS2)以及YARN設(shè)計(jì)的亮點(diǎn) - 似水流年 - CSDN博客 http://blog.csdn.net/xiaoshunzi111/article/details/49283213
HADOOP2.0(HDFS2)以及YARN設(shè)計(jì)的亮點(diǎn)進(jìn)行總結(jié):
1.針對(duì)Hadoop1.0中單個(gè)NameNode制約HDFS的擴(kuò)展性問(wèn)題,Hadoop2.0提出了HDFS Federation,它讓多個(gè)NameNode分管不同的目錄進(jìn)而實(shí)現(xiàn)訪問(wèn)隔離和橫向擴(kuò)展。對(duì)于運(yùn)行中NameNode的單點(diǎn)故障,通過(guò)NameNode熱備方案(NameNode HA)實(shí)現(xiàn)。
2.在Hadoop1.0中,JobTracker由資源管理和作業(yè)控制兩部分組成,對(duì)JobTracker賦予的功能過(guò)多而造成負(fù)載過(guò)重,從設(shè)計(jì)角度上看,Hadoop未能夠?qū)①Y源管理相關(guān)功能與應(yīng)用程序相關(guān)功能非開(kāi),造成Hadoop1.0難以支持多種計(jì)算框架。而YARN通過(guò)將資源管理和應(yīng)用程序管理兩部分分剝離開(kāi),分別由ResouceManager和ApplicationMaster負(fù)責(zé),其中,ResouceManager專管資源管理和調(diào)度,而ApplicationMaster則負(fù)責(zé)與具體應(yīng)用程序相關(guān)的任務(wù)切分、任務(wù)調(diào)度和容錯(cuò)等。
YARN總體上仍然是Master/Slave結(jié)構(gòu),在整個(gè)資源管理框架中,ResourceManager為Master,NodeManager為Slave,ResouceManager負(fù)責(zé)對(duì)各個(gè)NodeManager上的資源進(jìn)行統(tǒng)一管理和調(diào)度。當(dāng)用戶提交一個(gè)應(yīng)用程序時(shí),需要提供一個(gè)用以跟蹤和管理這個(gè)程序的ApplicationMaster,它負(fù)責(zé)向ResourceManger申請(qǐng)資源,并要求NodeManager啟動(dòng)可以占用一定資源的任務(wù)。
Hadoop2.0 YARN包含以下實(shí)體,可以看圖:
ResourceManager(RM):全局的資源管理器,負(fù)責(zé)整個(gè)系統(tǒng)的資源管理和分配
NodeManager(NM):每個(gè)節(jié)點(diǎn)上的資源和任務(wù)管理器,定時(shí)向RM匯報(bào)本節(jié)點(diǎn)上的資源使用情況和各個(gè)Container的運(yùn)行狀態(tài),接收并處理來(lái)自AM的Container啟動(dòng)/停止等各種請(qǐng)求
ApplicationMaster(AM):用戶提交的每個(gè)應(yīng)用程序均包含一個(gè)AM,主要功能與RM調(diào)度器協(xié)商以獲取資源,進(jìn)一步分配給內(nèi)部的任務(wù),與NM通信啟動(dòng)/停止任務(wù),監(jiān)控任務(wù)的運(yùn)行狀態(tài)
Container:是YARN中資源的抽象,封裝了某個(gè)節(jié)點(diǎn)上的多維度資源,如內(nèi)存、CPU、磁盤(pán)、網(wǎng)絡(luò)等。當(dāng)AM向RM申請(qǐng)資源時(shí),RM為AM返回的資源便是用Container表示的。
結(jié)合YARN架構(gòu)圖描述一個(gè)資源請(qǐng)求的流程:
NodeManager向ResourceManager注冊(cè)各機(jī)器資源
客戶端向ResouceManager提交作業(yè)
ApplicationMaster向ResouceManager請(qǐng)求資源,并判斷是否滿足需要
ResouceManager以Container的形式將資源反饋給ApplicationMaster
Container作為資源單元保證作業(yè)隔離運(yùn)行
關(guān)于Hadoop2.0的安裝可以參考這篇博文,Hadoop 2.0安裝以及不停集群加datanode,下面對(duì)HADOOP2.0(HDFS2)以及YARN設(shè)計(jì)的亮點(diǎn)進(jìn)行總結(jié):
1.針對(duì)Hadoop1.0中單個(gè)NameNode制約HDFS的擴(kuò)展性問(wèn)題,Hadoop2.0提出了HDFS Federation,它讓多個(gè)NameNode分管不同的目錄進(jìn)而實(shí)現(xiàn)訪問(wèn)隔離和橫向擴(kuò)展。對(duì)于運(yùn)行中NameNode的單點(diǎn)故障,通過(guò)NameNode熱備方案(NameNode HA)實(shí)現(xiàn)。
2.在Hadoop1.0中,JobTracker由資源管理和作業(yè)控制兩部分組成,對(duì)JobTracker賦予的功能過(guò)多而造成負(fù)載過(guò)重,從設(shè)計(jì)角度上看,Hadoop未能夠?qū)①Y源管理相關(guān)功能與應(yīng)用程序相關(guān)功能非開(kāi),造成Hadoop1.0難以支持多種計(jì)算框架。而YARN通過(guò)將資源管理和應(yīng)用程序管理兩部分分剝離開(kāi),分別由ResouceManager和ApplicationMaster負(fù)責(zé),其中,ResouceManager專管資源管理和調(diào)度,而ApplicationMaster則負(fù)責(zé)與具體應(yīng)用程序相關(guān)的任務(wù)切分、任務(wù)調(diào)度和容錯(cuò)等。
3.在ResouceManager中,ClientRMService和AdminService兩個(gè)服務(wù)分別負(fù)責(zé)處理來(lái)自普通用戶和管理員的請(qǐng)求,需要注意的是,之所以讓這兩類請(qǐng)求通過(guò)兩個(gè)不同的通信通道發(fā)送個(gè)ResourceManager,是因?yàn)橐苊馄胀ㄓ脩粽?qǐng)求過(guò)多導(dǎo)致管理員請(qǐng)求被阻塞而遲遲得不到處理。
4.JDK中自帶一個(gè)RPC框架-RMI,之所以不直接使用該框架,主要是考慮到RPC是Hadoop最底層最核心的模塊之一,保證其輕量級(jí)、高性能和可控性顯得尤為重要,而RMI重量級(jí)過(guò)大且用戶可控之處太少(如網(wǎng)絡(luò)連接、超時(shí)和緩沖等均難以定制或者修改),Doug Cutting在Hadoop最初設(shè)計(jì)時(shí)就是這樣描述Hadoop RPC設(shè)計(jì)動(dòng)機(jī)的。
5.總體來(lái)說(shuō)Hadoop2.0中的HDFS和YARN均采用了基于共享存儲(chǔ)的HA解決方案,即Active Master不斷將信息寫(xiě)入一個(gè)共享存儲(chǔ)系統(tǒng),而Standby Master則不斷讀取這些信息,以與Active Master的內(nèi)存信息保持同步。當(dāng)需要主備切換時(shí),選中的Standby Master需先保證信息完全同步后,再將自己的角色切換至Active Master。目前而言,常用的共享存儲(chǔ)系統(tǒng)有以下幾個(gè):Zookeeper,NFS,HDFS,Bookeeper和QJM。HA架構(gòu)均分為手動(dòng)模式和自動(dòng)模式,其中手動(dòng)模式是指由管理員通過(guò)命令進(jìn)行主備切換,這通常用于服務(wù)升級(jí);自動(dòng)模式可降低運(yùn)維成本,但存在潛在危險(xiǎn)。
6.Zookeeper設(shè)計(jì)的目的并不是數(shù)據(jù)存儲(chǔ),但他的確可以安全可靠地存儲(chǔ)少量數(shù)據(jù)以解決分布式環(huán)境下多個(gè)服務(wù)之間的數(shù)據(jù)共享問(wèn)題。
7.解決HA問(wèn)題需考慮以下幾個(gè)問(wèn)題:腦裂和切換對(duì)外透明。腦裂是指在主備切換時(shí),由于切換不徹底或其他原因,導(dǎo)致客戶端和Slave誤以為出現(xiàn)兩個(gè)Active Master,最終使得整個(gè)集群處于混亂狀態(tài)。通常采用隔離機(jī)制解決腦裂問(wèn)題。為了保證整個(gè)切換是對(duì)外透明的,Hadoop應(yīng)保證所有客戶端和Slave能自動(dòng)重定向到新的Active Master上,通常是通過(guò)若干次嘗試連接舊Master不成功后,再重新嘗試新Master完成的,整個(gè)過(guò)程有一定的延時(shí),可以自行設(shè)置相關(guān)參數(shù)。
8.ResourceManger并不會(huì)保存已經(jīng)分配給 每個(gè)ApplicationMaster的資源信息和每個(gè)NodeManage的資源使用信息,這些均可通過(guò)相應(yīng)的心跳匯報(bào)機(jī)制重構(gòu)出來(lái)。正因?yàn)槿绱耍琑esouceManager HA的實(shí)現(xiàn)是非常輕量的。
9.Hadoop調(diào)度器支持多個(gè)隊(duì)列多用戶,這種調(diào)度器允許管理員按照應(yīng)用需求對(duì)用戶或者應(yīng)用程序分組,并為不同的分組分配不同的資源量,同時(shí)通過(guò)添加各種約束防止單個(gè)用戶或者應(yīng)用程序獨(dú)占資源,進(jìn)而能夠滿足各種QoS需求,典型的代表是Yahoo!的Capacity Scheduler和Facebook的Fair Scheduler。
10.YARN的內(nèi)存資源隔離,默認(rèn)采用線程監(jiān)控的方案,提供靈活的控制策略,具體可以看這篇博文,Hadoop YARN資源隔離技術(shù)。
參考:
《Hadoop技術(shù)內(nèi)幕--深入解析YARN架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理》
《大規(guī)模分布式系統(tǒng)架構(gòu)與設(shè)計(jì)實(shí)踐》
E-mail: huahuiyang@gmail.comhttps://cn.linkedin.com/pub/huahui-yang/91/13a/105