詹文濤+艾中良+劉忠麟+李常寶+高澤



摘要:提交到Y(jié)ARN上的一個(gè)大數(shù)據(jù)作業(yè)會(huì)被切分為一個(gè)或者多個(gè)任務(wù),任務(wù)是大數(shù)據(jù)作業(yè)申請(qǐng)資源和執(zhí)行的基本單位。在某些領(lǐng)域中存在需要對(duì)作業(yè)緊急度作有效區(qū)分使得高緊急度作業(yè)優(yōu)先獲得資源的需求,但是在現(xiàn)有的YARN資源調(diào)度策略中,對(duì)于提交到Y(jié)ARN上的高優(yōu)先級(jí)作業(yè)缺乏資源優(yōu)先分配和高質(zhì)量的資源保障機(jī)制。本文在修改YARN原有資源調(diào)度方案的基礎(chǔ)上,提出了一種基于YARN的高優(yōu)先級(jí)作業(yè)調(diào)度實(shí)現(xiàn)方案。實(shí)驗(yàn)表明,提交到Y(jié)ARN上的高優(yōu)先級(jí)作業(yè)執(zhí)行效率提升了7%左右,證明設(shè)計(jì)方案行之有效。
關(guān)鍵詞:YARN;作業(yè)調(diào)度;高優(yōu)先級(jí)
中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.3969/j.issn.1003-6970.2016.03.021
0引言
YARN分布式大數(shù)據(jù)資源調(diào)度框架用于給運(yùn)行于其上的作業(yè)調(diào)度資源并管理作業(yè)執(zhí)行流程。現(xiàn)有的作業(yè)調(diào)度方案是以將作業(yè)分配給有空閑資源的節(jié)點(diǎn)為唯一目標(biāo)的。在某些領(lǐng)域中存在需要對(duì)作業(yè)緊急度作有效區(qū)分使得高緊急度作業(yè)優(yōu)先獲得調(diào)度資源的需求,在實(shí)際調(diào)研和使用中發(fā)現(xiàn)已有的YARN資源調(diào)度方案并不能很好的滿足這一需求。本文提出了一種YARN上的高優(yōu)先級(jí)作業(yè)調(diào)度方案,通過將作業(yè)提交到自定義的高優(yōu)先級(jí)隊(duì)列上,在資源調(diào)度過程中優(yōu)先為高優(yōu)先級(jí)作業(yè)分配資源,并避免當(dāng)高優(yōu)先級(jí)作業(yè)運(yùn)行時(shí),低優(yōu)先級(jí)作業(yè)對(duì)其形成的資源競(jìng)爭,實(shí)現(xiàn)了在集群負(fù)載較高情況下高優(yōu)先級(jí)作業(yè)的執(zhí)行效率提升。
1現(xiàn)有的YARN作業(yè)調(diào)度方案
對(duì)于YARN資源調(diào)度平臺(tái)而言,按照現(xiàn)在的調(diào)度方案,當(dāng)有一個(gè)緊急度比較高的任務(wù)提交到處理平臺(tái)時(shí),會(huì)提交到相應(yīng)的調(diào)度隊(duì)列上,由中心調(diào)度器處理。中心調(diào)度器選中將要為其分配任務(wù)的目標(biāo)節(jié)點(diǎn)、遍歷調(diào)度隊(duì)列的層級(jí)隊(duì)列樹選擇隊(duì)列,給選中隊(duì)列分配節(jié)點(diǎn)上的資源。對(duì)于隊(duì)列上待分配資源的作業(yè)集合,首先按照作業(yè)提交先進(jìn)先出的順序分配節(jié)點(diǎn)上的資源,在同一個(gè)作業(yè)的多個(gè)任務(wù)中,為了控制任務(wù)執(zhí)行順序,給資源請(qǐng)求一個(gè)優(yōu)先級(jí)屬性,使得優(yōu)先級(jí)高的任務(wù)能夠優(yōu)先獲得資源。
這種作業(yè)調(diào)度方案對(duì)于作業(yè)整體而言缺乏一個(gè)作業(yè)層面的整體保障,使得不同作業(yè)之間調(diào)度緊急性缺乏一個(gè)有效的區(qū)分,同時(shí)有高緊急度作業(yè)提交到Y(jié)ARN上,無法避免當(dāng)節(jié)點(diǎn)上運(yùn)行有高優(yōu)先級(jí)任務(wù)時(shí)普通任務(wù)對(duì)高優(yōu)先級(jí)作業(yè)形成的資源競(jìng)爭。
因此,需求為:保障當(dāng)集群中提交有高優(yōu)先級(jí)作業(yè)時(shí),高優(yōu)先作業(yè)優(yōu)先獲得集群資源,使其能夠更快的獲得資源分配;保障當(dāng)一個(gè)普通作業(yè)提交到目標(biāo)節(jié)點(diǎn)上時(shí),如果目標(biāo)節(jié)點(diǎn)運(yùn)行有高優(yōu)先級(jí)任務(wù),限制低優(yōu)先級(jí)任務(wù)分配可用資源量,以使得高優(yōu)先級(jí)任務(wù)能夠更好的運(yùn)行。
2高優(yōu)先級(jí)作業(yè)調(diào)度設(shè)計(jì)與實(shí)現(xiàn)
2.1實(shí)現(xiàn)思路
高優(yōu)先級(jí)作業(yè)優(yōu)先調(diào)度的設(shè)計(jì)方案是基于Capacity資源調(diào)度器實(shí)現(xiàn)的,本課題的開展按照以下步驟進(jìn)行:
高優(yōu)先級(jí)作業(yè)描述和解析。中心調(diào)度器是一個(gè)可插拔組件,可采用定義配置文件的方式給調(diào)度器配置相關(guān)參數(shù)。本課題設(shè)計(jì)為,給隊(duì)列一個(gè)優(yōu)先級(jí)屬性,使得提交到該隊(duì)列上的作業(yè)優(yōu)先調(diào)度分配資源。并且給隊(duì)列一個(gè)資源閾值屬性,使得提交到該隊(duì)列的任務(wù)能夠參考該閾值屬性,確定是否需要限制節(jié)點(diǎn)可分配資源量。并修改Web界面中對(duì)任務(wù)隊(duì)列描述部分參數(shù)。
在對(duì)高優(yōu)先級(jí)隊(duì)列進(jìn)行描述的基礎(chǔ)上,設(shè)計(jì)高優(yōu)先級(jí)作業(yè)資源分配流程。流程如下:
選擇任務(wù)調(diào)度的目標(biāo)節(jié)點(diǎn)。中心調(diào)度器保存了集群上所有節(jié)點(diǎn)及其資源量信息,該過程為選中節(jié)點(diǎn)集合中待為該節(jié)點(diǎn)分配作業(yè)的目標(biāo)節(jié)點(diǎn)。
給高優(yōu)先級(jí)隊(duì)列上任務(wù)優(yōu)先分配資源。在選擇好目標(biāo)節(jié)點(diǎn)后,本步驟為在高優(yōu)先級(jí)隊(duì)列已經(jīng)定義過,并且作業(yè)提交到高優(yōu)先級(jí)隊(duì)列上時(shí),設(shè)計(jì)先為高優(yōu)先級(jí)隊(duì)列上的作業(yè)分配節(jié)點(diǎn)上資源后為普通隊(duì)列上的任務(wù)分配資源。
節(jié)點(diǎn)上運(yùn)行有高優(yōu)先級(jí)任務(wù)時(shí),給普通任務(wù)添加閾值限制。一個(gè)節(jié)點(diǎn)上會(huì)同時(shí)運(yùn)行不同作業(yè)的任務(wù),當(dāng)節(jié)點(diǎn)上有高優(yōu)先級(jí)任務(wù)時(shí),保障優(yōu)先級(jí)任務(wù)的資源質(zhì)量。
2.2實(shí)現(xiàn)方案
本課題設(shè)計(jì)的YARN高優(yōu)先級(jí)作業(yè)調(diào)度模塊圖如圖l所示:
其中陰影部分模塊為添加或者修改過的模塊,功能如下。
調(diào)度器配置:是管理員用戶使用調(diào)度處理器的對(duì)外接口,用以配置調(diào)度器中集群上資源的組織方式,包括層級(jí)隊(duì)列的結(jié)構(gòu),隊(duì)列可使用資源量,用戶提交權(quán)限等信息。
Web界面:Hadoop YARN提供了一個(gè)可視化的web界面,用以實(shí)時(shí)監(jiān)測(cè)隊(duì)列中資源使用信息,隊(duì)列資源相關(guān)的參數(shù)。
資源層級(jí)隊(duì)列:其中隊(duì)列分為父隊(duì)列和葉子隊(duì)列兩種,隊(duì)列基本信息包括從配置文件中解析到的信息和任務(wù)提交時(shí)作業(yè)集合信息,以及NodeManager注冊(cè)和心跳過程中更新的集群中資源量信息等。
作業(yè)調(diào)度處理器:作業(yè)調(diào)度器同時(shí)也是一個(gè)作業(yè)調(diào)度處理器,不同的調(diào)度事件類型觸發(fā)不同的行為,包括NODE_ADDED,NODE_REMOVED,NODE RESOURCE_UPDATE,NODE_UPDATE,APP_ADDED等。NODE_UPDATE事件觸發(fā)資源調(diào)度分配過程,是高優(yōu)先作業(yè)調(diào)度的執(zhí)行入口。
作業(yè)分配:對(duì)于調(diào)度處理器中已經(jīng)分配好的作業(yè),放在一個(gè)數(shù)據(jù)結(jié)構(gòu)中,由AppplciationMaster主動(dòng)拉取。
高優(yōu)先級(jí)作業(yè)調(diào)度策略的實(shí)現(xiàn)按照如下步驟進(jìn)行。
高優(yōu)先級(jí)作業(yè)描述和解析。
1.隊(duì)列描述共涉及到如下類或者接口:
CSQueue接口是隊(duì)列通用方法描述接口,添加getPSThreshold、isPrior方法。AbstractCSQueue抽象類,定義葉子節(jié)點(diǎn)和非葉子隊(duì)列共有的方法。
LeafOueue繼承了AbstractCSQueue類,添加psthreshold、isPrior屬性。實(shí)現(xiàn)CSQueue接口中方法。
ParentQueue繼承了AbstractCSQueue類,實(shí)現(xiàn)CSQueue接口中方法。
2.隊(duì)列解析,共涉及到如下類或接口。CapacityScheduler類,將配置文件中隊(duì)列描述映射為配置文件對(duì)象。共涉及到如下方法:initializeQueues,初始化配置文件中定義的隊(duì)列,轉(zhuǎn)換為iava對(duì)象;initializeQueueMappings,檢驗(yàn)隊(duì)列的合法性;parseQueue,遞歸解析隊(duì)列并判斷某一個(gè)隊(duì)列是否為高優(yōu)先級(jí)隊(duì)列,并修改高優(yōu)先級(jí)隊(duì)列可用容量為集群總?cè)萘浚4嬖贑apacityScheduler屬性里。隊(duì)列解析流程如下:
(1)選擇任務(wù)調(diào)度的目標(biāo)節(jié)點(diǎn)。中心調(diào)度器選擇目標(biāo)節(jié)點(diǎn)有兩種方案,第一種方案與心跳協(xié)議相關(guān),發(fā)送心跳消息的節(jié)點(diǎn)為目標(biāo)節(jié)點(diǎn);第二種方案按照節(jié)點(diǎn)列表的順序選擇目標(biāo)節(jié)點(diǎn)。因此第二種方案存在選擇目標(biāo)節(jié)點(diǎn)的流程,CapacityScheduler類中schedule方法實(shí)現(xiàn)了選擇目標(biāo)節(jié)點(diǎn)邏輯。
YARN web界面中相應(yīng)的修改,主要涉及到如下類和方法:CapacitySchedulerPage類中render方法。CapacitySchedulerLeafOueuelnfo類中添加getPSTheshold、isPrior方法,這部分類圖調(diào)用關(guān)系如下:
(2)給高優(yōu)先隊(duì)列上任務(wù)優(yōu)先分配資源。涉及到CapacitySchedule類中priorAllocateContainersTo-Node函數(shù),其代碼流程圖如下:
(3)節(jié)點(diǎn)運(yùn)行有高優(yōu)先級(jí)任務(wù)時(shí),給普通任務(wù)添加閾值限制。主要涉及到CapacitySchedule類中allocateContainersToNode方法,為第三步中流程的一個(gè)子流程,細(xì)分如下:
以上是高優(yōu)先級(jí)作業(yè)調(diào)度的實(shí)現(xiàn)方案的整個(gè)過程。這種設(shè)計(jì)方案的好處是,保持YARN對(duì)外接口一致性,兼容了YARN本身的資源調(diào)度策略,在此基礎(chǔ)上添加相關(guān)配置參數(shù)即可使用。
3實(shí)驗(yàn)驗(yàn)證與性能分析
本課題實(shí)驗(yàn)環(huán)境搭建如下,共有4臺(tái)服務(wù)器,一臺(tái)普通計(jì)算節(jié)點(diǎn)。可用資源配置如下:
搭建hadoop集群環(huán)境,修改capacity-sched-uler.xml隊(duì)列描述,給集群配置三個(gè)子隊(duì)列,分別為:
實(shí)驗(yàn)測(cè)試實(shí)例一為wordcount,數(shù)據(jù)集為8.3G;實(shí)例二為pi 100 100。以下為功能驗(yàn)證和性能驗(yàn)證。
3.1功能驗(yàn)證
高優(yōu)先級(jí)作業(yè)優(yōu)先調(diào)度部分驗(yàn)證功能點(diǎn)如下:(1)對(duì)高優(yōu)先級(jí)作業(yè)的描述和解析,即對(duì)隊(duì)列屬性描述的實(shí)現(xiàn);(2)在集群負(fù)載比較滿的情況下,高優(yōu)先級(jí)作業(yè)優(yōu)先獲得資源并調(diào)度運(yùn)行。因此實(shí)驗(yàn)驗(yàn)證也分兩部分進(jìn)行,其中(1)可從啟動(dòng)時(shí)HadoopYARN界面中隊(duì)列相關(guān)的屬性展示驗(yàn)證,(2)需要進(jìn)一步設(shè)計(jì)相關(guān)的實(shí)驗(yàn)。
啟動(dòng)YARN后,訪問Hadoop YARN界面,查看隊(duì)列定義部分功能,界面顯示如下:
圖中參數(shù)描述顯示root隊(duì)列下共有兩個(gè)子隊(duì)列default與prod。配置default為普通隊(duì)列,資源閾值為0.8;prod為優(yōu)先級(jí)隊(duì)列,資源閾值為1,可用資源量為100%,即集群資源量。功能要點(diǎn)(1)驗(yàn)證成功。
功能要點(diǎn)(2)實(shí)驗(yàn)設(shè)計(jì)思路如下:利用集群單節(jié)點(diǎn)資源量有限,提交較大任務(wù),造成節(jié)點(diǎn)資源占滿的情況,再向高優(yōu)先級(jí)隊(duì)列中提交任務(wù),記錄相關(guān)數(shù)據(jù)。詳細(xì)設(shè)計(jì)為:在同一個(gè)節(jié)點(diǎn),先向default普通隊(duì)列上提交一個(gè)任務(wù),在任務(wù)運(yùn)行過程中向prod優(yōu)先級(jí)隊(duì)列提交另一個(gè)相同任務(wù)。實(shí)驗(yàn)過程如下:
分別提交作業(yè)1、2、3.作業(yè)執(zhí)行情況數(shù)據(jù)匯總?cè)缦拢?/p>
記錄作業(yè)1更加詳細(xì)的執(zhí)行情況:
分析以上實(shí)驗(yàn)數(shù)據(jù),得出如下結(jié)論:
1.由表3可知:作業(yè)提交時(shí)間為1<2<3,作業(yè)執(zhí)行完成時(shí)間為2<3<1,其中1為普通隊(duì)列上的作業(yè),2、3為優(yōu)先級(jí)隊(duì)列上的作業(yè)。即在集群負(fù)載滿情況下,任務(wù)隊(duì)列中同時(shí)有高低優(yōu)先級(jí)作業(yè)時(shí),高優(yōu)先級(jí)作業(yè)優(yōu)先調(diào)度完成。
2.對(duì)照表3和4可知:在執(zhí)行普通作業(yè)的過程中提交高優(yōu)先級(jí)作業(yè),此時(shí)普通作業(yè)暫停執(zhí)行,直到高優(yōu)先級(jí)作業(yè)執(zhí)行完畢后,普通作業(yè)重新開始調(diào)度執(zhí)行。這是因?yàn)樵诩贺?fù)載較滿情況下,高優(yōu)先級(jí)作業(yè)優(yōu)先分配資源。
綜上說明了提交到高優(yōu)先級(jí)隊(duì)列上的作業(yè)優(yōu)先調(diào)度執(zhí)行,功能點(diǎn)(2)驗(yàn)證成功。
3.2性能分析
本課題的性能分析設(shè)計(jì)為:在集群閑置情況下測(cè)試實(shí)例執(zhí)行時(shí)間,實(shí)例一執(zhí)行時(shí)間為10分鐘左右,實(shí)例二執(zhí)行時(shí)間為3分鐘左右。設(shè)計(jì)分兩個(gè)過程進(jìn)行:
過程1:先向default隊(duì)列提交1個(gè)作業(yè),再向food隊(duì)列提交1個(gè)作業(yè),使集群資源負(fù)載占滿,作業(yè)選擇實(shí)例1,在任務(wù)執(zhí)行過程中再向prod隊(duì)列提交3個(gè)作業(yè),記錄prod隊(duì)列上作業(yè)從提交到運(yùn)行結(jié)束時(shí)間,作業(yè)選擇實(shí)例2。
過程2:先向defaulf隊(duì)列提交1個(gè)作業(yè),在任務(wù)執(zhí)行過程中再向food隊(duì)列提交1個(gè)作業(yè),使集群負(fù)載占滿,作業(yè)選擇實(shí)例1,在任務(wù)執(zhí)行過程中再向food隊(duì)列提交3個(gè)作業(yè),記錄food隊(duì)列上后提交三個(gè)任務(wù)從提交到運(yùn)行結(jié)束時(shí)間,作業(yè)選擇實(shí)例2。
重復(fù)三次,取均值。實(shí)驗(yàn)記錄為:
由表5可知:在運(yùn)行有較大任務(wù)將集群資源占滿的情況下,提交高優(yōu)先級(jí)作業(yè),高優(yōu)先級(jí)作業(yè)能立即開始執(zhí)行。
綜上所述,本課題中設(shè)計(jì)的資源調(diào)度方案,成功實(shí)現(xiàn)了高優(yōu)先級(jí)作業(yè)優(yōu)先調(diào)度,并提升了在集群負(fù)載較滿的情況下高緊急度作業(yè)執(zhí)行效率,效率提升為(359.7-336.7)/336.7≈7%。
4結(jié)論
本文實(shí)現(xiàn)了一種基于YARN的高優(yōu)先級(jí)作業(yè)調(diào)度方案,解決了在某些領(lǐng)域中需要區(qū)分作業(yè)緊急度,實(shí)現(xiàn)高緊急度作業(yè)優(yōu)先調(diào)度資源并保障資源質(zhì)量的問題,實(shí)驗(yàn)證明該方案提升了高緊急度作業(yè)的執(zhí)行效率。