hdfs(hadoop Distributed File System)的資源調(diào)度主要通過yarn(Yet Another Resource Negotiator)來實(shí)現(xiàn)。YARN是一個(gè)資源調(diào)度平臺(tái),負(fù)責(zé)為運(yùn)行在Hadoop集群上的應(yīng)用程序提供資源管理和調(diào)度服務(wù)。以下是HDFS資源調(diào)度的實(shí)現(xiàn)方式:
YARN架構(gòu)和資源調(diào)度簡介
- ResourceManager:處理客戶端請求,監(jiān)控NodeManager的啟動(dòng)或監(jiān)控ApplicationMaster資源的分配與調(diào)度,包含調(diào)度器(Scheduler)、應(yīng)用程序管理器(ApplicationsManager)。
- NodeManager:管理單個(gè)節(jié)點(diǎn)上的資源,處理來自ResourceManager的命令,處理來自ApplicationMaster的命令。
- ApplicationMaster:為應(yīng)用程序申請資源并分配內(nèi)部任務(wù),任務(wù)的監(jiān)控與容錯(cuò)。
- Container:YARN資源的抽象封裝,某個(gè)節(jié)點(diǎn)的多維度資源(內(nèi)存、CPU、磁盤、網(wǎng)絡(luò)等),Task都是在一個(gè)容器里執(zhí)行完成的,容器大小可以動(dòng)態(tài)調(diào)整。
工作機(jī)制
- 客戶端提交mapreduce作業(yè)到客戶端所在的節(jié)點(diǎn),YARN Runner向ResourceManager申請一個(gè)Application。
- ResourceManager將該應(yīng)用程序的資源路徑返回給YARN Runner,程序?qū)⑦\(yùn)行所需資源提交到HDFS上。
- 程序資源提交完畢后,申請運(yùn)行mapreduce AppMaster。
- ResourceManager將用戶的請求初始化成一個(gè)Task,其中一個(gè)NodeManager領(lǐng)取到Task任務(wù),該NodeManager創(chuàng)建Container,并產(chǎn)生MapReduce AppMaster。
- Container從HDFS上拷貝資源到本地,MapReduce AppMaster向ResourceManager申請運(yùn)行MapTask資源,ResourceManager將運(yùn)行MapTask任務(wù)分配給另外兩個(gè)NodeManager,這兩個(gè)NodeManager分別領(lǐng)取任務(wù)并創(chuàng)建Container。
- Map向兩個(gè)接收到任務(wù)的NodeManager發(fā)送程序啟動(dòng)腳本,這兩個(gè)NodeManager分別啟動(dòng)MapTask,MapTask對數(shù)據(jù)分區(qū)排序。
- MapReduce AppMaster等待所有MapTask運(yùn)行完畢后,向ResourceManager申請容器,運(yùn)行ReduceTask。
- ReduceTask向MapTask獲取相應(yīng)分區(qū)的數(shù)據(jù),程序運(yùn)行完畢后,MapReduce AppMaster會(huì)向ResourceManager申請注銷自己。
調(diào)度器和調(diào)度算法
目前,Hadoop作業(yè)調(diào)度器主要有三種:FIFO(先進(jìn)先出)、Capacity Scheduler和Fair Scheduler。
- FIFO:按照作業(yè)提交的順序執(zhí)行任務(wù),簡單但可能導(dǎo)致資源浪費(fèi)。
- Capacity Scheduler:為不同的隊(duì)列分配固定比例的資源,保證資源的合理利用和作業(yè)的公平執(zhí)行。
- Fair Scheduler:根據(jù)隊(duì)列的資源需求和作業(yè)的歷史資源使用情況進(jìn)行資源分配,更加公平。
通過上述機(jī)制,HDFS能夠有效地管理和調(diào)度集群資源,確保數(shù)據(jù)的高可用性、可靠性和高效性。