Yarn的资源管理机制
??? 資源調(diào)度器是Yarn的核心組件之一,它是ResourceManager中的一個組件,負(fù)責(zé)整個集群資源的管理和分配。
?
ResourceManager要處理的各種事件:
ResourceManager本質(zhì)上是一個事件處理器,處理來自外部的各種SchedulerEventType類型的事件,然后對Yarn上的資源做一些調(diào)整,事件有如下幾種:
?
部分事件對應(yīng)的動作如下:
?
NODE_ADDED/NODE_REMOVED:分別表示集群中增加了一個計(jì)算節(jié)點(diǎn)和刪除了一個計(jì)算節(jié)點(diǎn),需要對可分配資源總量進(jìn)行相應(yīng)的增加或者減少
APPLICATION_ADDED/APPLICATION_REMOVED:ResourceManager收到一個新的Application或者一個Application運(yùn)行結(jié)束(可能成功可能失敗),需要增加一個記錄該Application信息的結(jié)構(gòu)或者將結(jié)構(gòu)刪除
CONTAINER_EXPIRED:如果一個Container分配給某個ApplicationMaster之后再一定時間內(nèi)沒有使用,那么這個Container會回收再分配
NODE_UPDATE:接受NodeManager心跳匯報的信息,有可能是新的Container釋放,此時該事件可能會觸發(fā)資源調(diào)度器最核心的資源分配機(jī)制。
?
RMAppAttempt狀態(tài)是干嘛用的?
每個Application會對應(yīng)一個RMApp對象,保存該Application的各種信息。而每個RMApp可能會對應(yīng)多個RMAppAttempt對象,取決與前一個RMAppAttempt對象是否成功,如果不成功則會啟動另外一個,直到運(yùn)行成功
?
Yarn的雙層資源調(diào)度模型:
??? Yarn使采用的是雙層資源調(diào)度模型:第一層中,ResourceManager中的資源調(diào)度器將資源分配給各個ApplicationMaster;第二層再由各個ApplicationMaster將資源分配給內(nèi)部的各個任務(wù)。Yarn實(shí)現(xiàn)的是第一步,第二步是由用戶應(yīng)用程序自己決定的。分配過程是異步的。資源調(diào)度器給ApplicationMaster分配資源之后會先放到一個緩沖區(qū)中,等待ApplicationMaster通過周期性的心跳來主動獲取。
資源保證機(jī)制:
在分布式計(jì)算中,資源調(diào)度器需要選擇合適的資源保證機(jī)制,當(dāng)應(yīng)用程序申請的資源暫時無法保證時:
1.優(yōu)先為應(yīng)用程序預(yù)留一個節(jié)點(diǎn)上的資源直到累計(jì)釋放的空閑資源滿足應(yīng)用程序需求(稱為“增量資源分配”)
2.暫時放棄當(dāng)前資源直到出現(xiàn)一個節(jié)點(diǎn)剩余資源一次性滿足應(yīng)用程序需求(稱為“一次性資源分配”)
這兩種機(jī)制均存在優(yōu)缺點(diǎn),對于增量資源分配來說,資源預(yù)留會導(dǎo)致資源浪費(fèi),降低集群資源利用率;而一次性資源分配則會產(chǎn)生餓死現(xiàn)象,即應(yīng)用程序可能永遠(yuǎn)等不到滿足資源需求的節(jié)點(diǎn)出現(xiàn),YARN采用了增量資源分配機(jī)制 ,盡管這種機(jī)制會造成浪費(fèi),但不會出現(xiàn)餓死現(xiàn)象;
?
Yarn的資源調(diào)度器
Yarn的資源調(diào)度器是可配置的,Yarn定義了一套接口規(guī)范(接口ResourceScheduler),用戶可以按照自己的需求實(shí)現(xiàn)這個接口中的方法。Yarn自身自帶了三種調(diào)度器,分別是:FIFO Scheduler、Capacity Scheduler(Yahoo!)和Fair Scheduler(Facebook)。
FIFO Scheduler:
最初Hadoop使用的就是FIFO這種非常簡單的任務(wù)調(diào)度機(jī)制,所有的作業(yè)都被統(tǒng)一提交到一個隊(duì)列中,優(yōu)先給隊(duì)列中的第一個任務(wù)分配資源,第一個任務(wù)資源滿足后再給下一個分配,以此類推。
??? 優(yōu)點(diǎn)是簡單可靠,也不需要任何配置。缺點(diǎn)也很明顯,如果上一個作業(yè)一下子就把資源全部占光的話,那么下一個作業(yè)就需要等到上一個作業(yè)完成才能運(yùn)行,這樣不能充分利用硬件資源且不能滿足多樣化的需求。
??? 所以FOFO Scheduler不適用于共享集群,共享集群更適合采用Capacity Scheduler或Fair Scheduler,這兩個調(diào)度器都允許大任務(wù)和小任務(wù)在提交的同時獲得一定的系統(tǒng)資源。
?
Capacity Scheduler:
設(shè)計(jì)思想是資源按比例分配給各個隊(duì)列。這些隊(duì)列是用戶通過配置文件配置的。隊(duì)列里的資源如果空閑的話,會被其他隊(duì)列中的任務(wù)暫時占用(所以那個“隊(duì)列最小容量”的配置不一定生效)。
每個隊(duì)列都會設(shè)置一個最大資源占比,這樣可以保證每個隊(duì)列不用占用整個集群的資源。默認(rèn)是不設(shè)置的,這樣隊(duì)列有可能使用100%的資源,當(dāng)其他隊(duì)列有應(yīng)用程序提交時,再逐步歸還。
每個用戶也可以設(shè)定一定的資源上限,防止資源濫用。
隊(duì)列內(nèi)部是以FIFO方式調(diào)度的。正常情況下,Capacity Scheduler不會強(qiáng)行通過強(qiáng)行終止來強(qiáng)占容器。意思就是說,隨著任務(wù)的增多,資源不夠用時并且隊(duì)列中的資源被其他隊(duì)列給強(qiáng)占了,它只能等待其他隊(duì)列釋放資源。一般可以通過設(shè)置其他隊(duì)列的最大容量來環(huán)節(jié)這種情況,這個就是需要權(quán)衡的地方。
?
Fair Scheduler:
設(shè)計(jì)思想是所有的應(yīng)用分配公平的資源。公平是通過隊(duì)列配置的權(quán)重(weight)來作為公平調(diào)度的依據(jù),如果沒有配置權(quán)重,那么所有隊(duì)列的權(quán)重都為1,所有隊(duì)列公平分配集群資源。
它也是以隊(duì)列為單位劃分資源,每個隊(duì)列可以設(shè)置一定比例的資源最低保證和使用上限,同時每個用戶也可設(shè)定一定的資源使用上限以防止資源濫用,當(dāng)一個隊(duì)列有資源剩余的時候可以共享給其他隊(duì)列…和Capacity Scheduler基本一致
??? 從圖上可以看出,它不需要預(yù)留資源,因?yàn)檎{(diào)度器會在運(yùn)行的作業(yè)之間動態(tài)平衡資源:第一個作業(yè)(用戶A)啟動時,由于是唯一運(yùn)行的任務(wù),所以它獨(dú)占全部資源.當(dāng)?shù)诙€作業(yè)(用戶B)啟動時,它會分配到一半資源.當(dāng)然,第二個作業(yè)從啟動到獲得公平共享資源的時間會有滯后,因?yàn)楸仨毜却谝粋€任務(wù)的容器用完并釋放出資源,當(dāng)?shù)诙€作業(yè)完成后,第一個作業(yè)會再次獨(dú)占全部資源.
??? 不同的是Fair Scheduler實(shí)現(xiàn)了更多樣化的調(diào)度策略,它允許每個隊(duì)列單獨(dú)配置調(diào)度策略(schedulingPolicy),分別有:FIFO/Fair/DRF,默認(rèn)使用的是Fair。而且Fair Scheduler實(shí)現(xiàn)了搶占功能,允許調(diào)度器Kill掉超過其應(yīng)占份額資源隊(duì)列的Containers(公平的定義),需要注意搶占會降低集群的執(zhí)行效率,因?yàn)楸唤K止的containers需要被重新執(zhí)行。
??? 默認(rèn)情況下,Fair調(diào)度器只是對內(nèi)存資源做公平的調(diào)度和分配,也可以配置成基于內(nèi)存+Cpu。
?
總結(jié):
如果業(yè)務(wù)邏輯比較簡單或者剛接觸Hadoop的時候建議使用FIFO調(diào)度器;如果需要控制部分應(yīng)用的優(yōu)先級同時又想要充分利用集群資源的情況下,建議使用Capacity調(diào)度器;如果想要多用戶或者多隊(duì)列公平的共享集群資源,那么就選用Fair調(diào)度器。
??? 具體的源碼層面細(xì)節(jié)的分析后面看完了再補(bǔ)充吧。
?
?
?
參考:
??? https://www.jianshu.com/p/2c100d4f5349?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation(三種Scheduler示意圖)
??? https://blog.csdn.net/zhanyuanlin/article/details/78799341(Yarn資源預(yù)留機(jī)制引起的問題)
總結(jié)
以上是生活随笔為你收集整理的Yarn的资源管理机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio 2008下载
- 下一篇: VoIP技术(2)--语音编码算法-1