????????hadoop主要組件有hdfs、yarn,hdfs是分布式文件系統(tǒng),主要是進(jìn)行文件的存儲(chǔ),而yarn是hadoop集群資源管理系統(tǒng),支持分布式計(jì)算模式,下面將介紹yarn的運(yùn)行和調(diào)度過程。
? ? ?yarn運(yùn)行機(jī)制
? ? ? ? yarn通過管理集群資源使用的資源管理器和運(yùn)行在集群節(jié)點(diǎn)上啟動(dòng)、監(jiān)控容器的節(jié)點(diǎn)管理器兩類長(zhǎng)期運(yùn)行的守護(hù)進(jìn)程提供核心服務(wù)。提到的容器是用于執(zhí)行特定應(yīng)用程序的進(jìn)程,每個(gè)容器都有資源限制(內(nèi)存、cpu),一個(gè)容器是一個(gè)linux進(jìn)程即Linux cgroup。
????????yarn上運(yùn)行一個(gè)應(yīng)用步驟:
? ? ? ? 1、客戶端聯(lián)系資源管理器,要求運(yùn)行一個(gè)application master進(jìn)程(上圖步驟1)。
? ? ? ? 2、資源管理其找到一個(gè)能夠在容器啟動(dòng)application master的節(jié)點(diǎn)管理器(上圖步驟2a、2b)。
? ? ? ? 3、application master運(yùn)行后,根據(jù)應(yīng)用本身向資源管理器請(qǐng)求更多容器(上圖步驟3)。
? ? ? ? 4、資源管理器給application master分配需要的資源后,application master在對(duì)應(yīng)資源節(jié)點(diǎn)管理器啟動(dòng)容器,節(jié)點(diǎn)管理器獲取任務(wù)運(yùn)行需要的resources后,在該容器運(yùn)行任務(wù)。(上圖4a、4b)。
? ? ? ? 下面對(duì)運(yùn)行機(jī)制中對(duì)資源管理部分細(xì)節(jié)進(jìn)行展開細(xì)化:
? ? ? ? yarn有一個(gè)靈活資源請(qǐng)求模型,當(dāng)請(qǐng)求多個(gè)容器時(shí),可以指定每個(gè)容器需要的計(jì)算機(jī)資源數(shù)量(內(nèi)存和cpu),也可以指定對(duì)容器本地限制要求。容器本地限制可用于申請(qǐng)位于指定節(jié)點(diǎn)或機(jī)架或集群中任何位置容器,確保分布式數(shù)據(jù)處理可以高效使用集群寬帶資源。HDFS默認(rèn)數(shù)據(jù)存儲(chǔ)三個(gè)復(fù)本,如果三個(gè)副本所在節(jié)點(diǎn)或機(jī)架資源申請(qǐng)失敗后,則可以申請(qǐng)集群中任意節(jié)點(diǎn)。
? ? ?yarn調(diào)度
? ? ? ? 理想情況下yarn應(yīng)用發(fā)出資源請(qǐng)求會(huì)立刻給予滿足,但現(xiàn)實(shí)是資源是有限的,通常需要等待才能得到所需資源,因此yarn提供多種調(diào)度器和可配置策略來供選擇。
? ? ?調(diào)度策略
? ? ? ? yarn提供FIFO調(diào)度器、容量調(diào)度器(Capacity Scheduler)和公平調(diào)度器(Fair Scheduler)三種調(diào)度器可用。
? ? ? ? FIFO調(diào)度器將應(yīng)用放置在一個(gè)隊(duì)列中,按照提價(jià)順序運(yùn)行應(yīng)用,首先為隊(duì)列中第一個(gè)應(yīng)用請(qǐng)求分配資源,第一個(gè)應(yīng)用請(qǐng)求被滿足后再依次為隊(duì)列下一個(gè)應(yīng)用服務(wù)。FIFO調(diào)度器簡(jiǎn)單易懂,不需要配置,但不適合共享集群。如果碰到大應(yīng)用(運(yùn)行資源多)占用集群所有資源,其他應(yīng)用必須等待直到輪到自己運(yùn)行。這種情況下容量調(diào)度器或公平調(diào)度器更適合,這兩種調(diào)度器允許長(zhǎng)時(shí)間作業(yè)及時(shí)完成,又允許較小臨時(shí)查詢用戶能得到反饋。下圖描述調(diào)度器差異性。
????????如上圖所屬,當(dāng)使用FIFO調(diào)度器(i)時(shí),小作業(yè)會(huì)一直被阻塞,直到大作業(yè)完成。使用容量調(diào)度器時(shí)一個(gè)獨(dú)立的專門隊(duì)列保證小作業(yè)一提交就啟動(dòng),由于隊(duì)列容量為固定隊(duì)列中作業(yè)所保留的,這種策略是以整個(gè)集群利用率為代價(jià),相比于FIFO調(diào)度器相比,大作業(yè)執(zhí)行時(shí)間更長(zhǎng)。
????????使用公平調(diào)度器時(shí),不需要預(yù)留一定資源,調(diào)度器會(huì)在所有運(yùn)行的作業(yè)之間動(dòng)態(tài)平衡資源,第一個(gè)作業(yè)啟動(dòng)時(shí),因?yàn)槭俏ㄒ贿\(yùn)行作業(yè)因而可以獲得集群所有資源。當(dāng)?shù)诙€(gè)作業(yè)啟動(dòng),它被分配到集群的一半資源,每個(gè)作業(yè)都能公平共享資源。在這個(gè)過程中第二個(gè)作業(yè)啟動(dòng)能獲得公平共享資源之間會(huì)有時(shí)間滯后,必須等待第一個(gè)作業(yè)使用的容器能用完并釋放出資源。當(dāng)小作業(yè)結(jié)束且不再申請(qǐng)資源后,大作業(yè)將再次使用全部資源,最終實(shí)現(xiàn)即得到較高集群利用率,又保證小作業(yè)及時(shí)完成。
? ? ? ? 在yarn進(jìn)行資源調(diào)度時(shí)有一些細(xì)節(jié)知識(shí)需要注意下,比如搶占和延遲調(diào)度。
? ? ?搶占
? ? ? ? 搶占是在公平調(diào)度器模式下,當(dāng)作業(yè)被提交到一個(gè)空隊(duì)列時(shí),因?yàn)闆]有作業(yè)運(yùn)行需要的資源,作業(yè)不會(huì)立刻啟動(dòng),這時(shí)允許調(diào)度器終止那些占用資源超過其公平共享份額的隊(duì)列容器,這些容器釋放后分配給資源數(shù)量低于應(yīng)得份額隊(duì)列。要啟動(dòng)這項(xiàng)功能需要配置下面策略參數(shù)。將yarn.scheduler.fair.preemption設(shè)置為true,開啟搶占功能。觸發(fā)搶占功能設(shè)置:mininum share preemption timeout和fair share preemption timeout,單位是秒。
????????mininum share preemption timeout設(shè)置指定時(shí)間內(nèi)未獲得被承諾最小共享資源,調(diào)度器就搶占其他容器,可以通過分配文件中頂層元素defaultMinSharePreemptionTimeout為所有隊(duì)列設(shè)置默認(rèn)超時(shí)時(shí)間,也可以通過設(shè)置每個(gè)隊(duì)列minSharePreemptionTimeout為單個(gè)隊(duì)列指定超時(shí)時(shí)間。? ?
? ??????fair share preemption timeout設(shè)置指定時(shí)間內(nèi)獲得資源仍然低于公平共享分享份額一半,那調(diào)度器就搶占其他容器。
? ? ? 延遲調(diào)度
? ? ? ? 延遲調(diào)度是嘗試以本地請(qǐng)求為重,如果一個(gè)應(yīng)用請(qǐng)求某個(gè)節(jié)點(diǎn)等待一段時(shí)間后能夠增加在所請(qǐng)求節(jié)點(diǎn)上分配容器的機(jī)會(huì),增加調(diào)度本地性,提高集群效率。
? ? ? ? 當(dāng)使用延遲調(diào)度時(shí),調(diào)度器不會(huì)簡(jiǎn)單使用它收到第一調(diào)度機(jī)會(huì),而是等待設(shè)定的最大數(shù)目調(diào)度機(jī)會(huì)發(fā)生,才放松本地限制并接受下一個(gè)調(diào)度機(jī)會(huì)。
? ? ? ? 容量調(diào)度器可以通過設(shè)置yarn.scheduler.capacity.node-locality-delay配置延遲調(diào)度,設(shè)置為正書表示,調(diào)度器在放松節(jié)點(diǎn)限制改為同一機(jī)架上其他節(jié)點(diǎn)準(zhǔn)備錯(cuò)過的調(diào)度機(jī)會(huì)數(shù)量。? ?
? ? ? ? 公平調(diào)度器也使用調(diào)度機(jī)會(huì)數(shù)量來決定延遲時(shí)間,將yarn.scheduler.fair.locality.threshold.node設(shè)置為0.5,表示調(diào)度器在接受同一機(jī)架中其他節(jié)點(diǎn)之間,將一直等待到集群中一半節(jié)點(diǎn)已給過調(diào)度機(jī)會(huì)。
? ? ? ? 總結(jié)
? ? ? ? 本文是對(duì)yarn運(yùn)行機(jī)制和調(diào)度過程梳理,包括yarn資源調(diào)度步驟流程、三種調(diào)度策略特點(diǎn)介紹和資源調(diào)度過程進(jìn)行優(yōu)化時(shí)可以使用的搶占、延遲調(diào)度功能梳理,希望通過本文可以幫你掌握yarn運(yùn)行機(jī)制和調(diào)度過程知識(shí)。