內存使用預測器,用于根據(jù)任務內存使用及運行進度監(jiān)控器提供的內存使用量信 息擬合任務內存資源使用預測函數(shù)并計算任務需要追加或釋放的內存量(步驟(2)和步 驟(3))。為了實現(xiàn)該方法,本發(fā)明在Map/Re化ce平臺中增設任務內存資源動態(tài)分配器,用 于根據(jù)預測器提供的預測結果,完成對運行任務內存資源的追加或釋放(步驟(4)和步驟 妨)。
【附圖說明】
[0066] 圖1為本發(fā)明方法所依附的Map/Re化ce平臺的部署圖。
[0067] 圖2為采用本發(fā)明方法的Map/Re化ce平臺中新增軟件模塊及其交互關系圖。
[0068] 圖3為本發(fā)明方法的總體流程圖。
[0069] 圖4為任務內存資源使用量預測函數(shù)構建流程圖。
[0070] 圖5為任務內存資源追加/釋放量計算的流程圖。
[0071] 圖6為任務內存資源追加過程流程圖。
【具體實施方式】
[0072] 下面結合附圖和【具體實施方式】對本發(fā)明加W說明。
[0073] 本發(fā)明所提出的內存資源動態(tài)分配方法可依附于現(xiàn)有Map/Re化ce數(shù)據(jù)處理平臺 (如化doop平臺),通過修改和新增相應的軟件模塊實現(xiàn)。圖1是本方法所依附的Map/ Re化ce平臺的部署圖。該平臺由多個計算機服務器(平臺節(jié)點)組成,服務器間通過網(wǎng)絡連 接。平臺節(jié)點分為兩類:包括一個管理節(jié)點(Master)和多個計算節(jié)點(Slave)。本發(fā)明方 法所依附的Map/Re化ce平臺包含四類核屯、軟件模塊;資源管理模塊化esourceManager)、 應用管理模塊(ApplicationMaster)、任務執(zhí)行模塊(TaskContainer)和節(jié)點管理模塊 (NodeManager)。其中,ResourceManager負責維護平臺中所有節(jié)點的內存資源信息、執(zhí)行作 業(yè)調度及根據(jù)用戶提交的內存需求進行任務內存資源的初始分配,僅在管理節(jié)點上部署; NodeManager負責啟動和結束任務的運行,并監(jiān)控本節(jié)點上任務運行情況及資源使用情況, 每個計算節(jié)點上均部署一個NodeManager。ApplicationMaster負責Map/Reduce作業(yè)生命 周期管理,對作業(yè)包含的每個Map和Re化ce任務記錄其初始內存資源需求量信息W及任務 狀態(tài)信息,并對任務的啟動、運行、結束等進行管理和監(jiān)控。在Map/Re化ce平臺中提交和運 行的每一個Map/Re化ce作業(yè)均對應一個獨立的ApplicationMaster,該模塊在計算節(jié)點上 部署。TaskContainer負責執(zhí)行Map任務或Re化ce任務。每一個Map任務或Re化ce任務 均對應一個獨立的化skContainer,該模塊在任務運行所在節(jié)點上部署。上述四類軟件模 塊中,ResourceManager模塊和NodeManager模塊在Map/Reduce平臺啟動時即部署運行, ApplicationMaster模塊和"TaskContainer模塊分別在相應的Map/Reduce作業(yè)提交W及 Map或Re化ce任務運行時觸發(fā)部署運行。
[0074] 圖2是為實施本發(fā)明方法在所依附的Map/Re化ce平臺中需增加的軟件模塊及其 交互關系圖。陰影模塊是為實現(xiàn)本發(fā)明方法須在既有Map/Re化ce平臺中新增的軟件模塊, 包括任務監(jiān)控模塊(MemCollector)、內存使用預測模塊(MemPredictor)、內存重分配模塊 (MemReallocator)、任務狀態(tài)更新模塊(TaskUpdator)和資源更新模塊(MemUpdator)。其 中,MemCollector負責收集其所在節(jié)點的所有任務執(zhí)行模塊的內存使用情況及任務運行 進度信息,MemPredictor負責根據(jù)MemCollector模塊提供的各任務內存使用信息預測任 務后續(xù)的內存使用量,MemReallocator負責根據(jù)內存使用預測信息,調整(包括追加和釋 放)各任務的內存分配量。上述S個模塊可作為NodeManager的子模塊部署于每個計算節(jié) 點上。TaskUpdator作為ApplicationMaster的子模塊,部署于計算節(jié)點,負責接收任務狀 態(tài)調整信息,并修改ApplicationMaster中保存的相應任務的狀態(tài)信息。MemUpdator作為 ResourceManager的子模塊,部署于管理節(jié)點,負責收集計算節(jié)點上任務內存資源分配變動 信息,并修改ResourceManager中維護的計算節(jié)點可分配內存資源信息。上述新增模塊中, 隸屬于同一軟件模塊的子模塊間采用共享變量和方法調用的通信方式,隸屬于不同軟件模 子模塊線程間采用遠程過程調用(RPC)的網(wǎng)絡通信方式。
[0075] 為實現(xiàn)本發(fā)明方法,在每個計算節(jié)點的MemCollector、MemPredictor和 MemReallocator模塊之間設置一個共享變量--運行任務信息列表RunTasklist,每一個列 表單元對應一個運行任務。對于任一運行任務ty,列表單元的存儲信息格式如下:
[0076]
[0077] 其中,任務內存資源使用歷史記錄集合中每個記錄包含記錄時刻和內存使用量信 息。為實現(xiàn)本發(fā)明方法,每個計算節(jié)點上的MemCollector需要周期性地收集本節(jié)點上運行 任務的內存資源使用量及運行進度信息,并將收集的信息添加至共享變量RunTasklist相 應列表單元中,供內存使用預測模塊MemPredictor獲取使用。具體實施方法包括;
[007引 1)任務注冊任務ty對應的化skContainer啟動后,WRPC調用的方式,向所在 節(jié)點的MemCollector進行任務注冊。MemCollector根據(jù)"TaskContainer發(fā)送的任務注冊 信息,包括任務號、作業(yè)號、任務進程號、任務對應的化skUpdator的IP地址,在共享變量 RunTasklist中創(chuàng)建一個新的列表單元,并填寫相應信息。
[0079] 2)任務內存使用量及運行進度信息收集在完成任務注冊后,MemCollector通過 在NodeManager模塊中嵌入的回調接口,根據(jù)任務號j和作業(yè)號i,周期性(每隔5秒)地 從NodeManager獲取任務進程的內存使用量信息,然后將獲取的任務內存使用量信息及相 應的記錄時刻,按記錄時刻順序追加至RunTasklist相應列表單元的任務內存資源使用量 歷史記錄集合RUy項中,并用獲取的任務當前內存分配量信息更新RunTasklist相應列表 單元的任務當前內存分配量RCy項值。同時,MemCollector周期性地W RPC調用的方式, 從化skContainer獲取任務運行進度信息,并將獲取的量值賦給RunTasklist中相應列表 單元的任務當前運行進度Pu項。
[0080] 3)任務注銷在任務運行結束后,TaskContainer WRPC調用的方式,向所在節(jié)點的 MemCollector發(fā)送任務注銷消息,任務注銷消息包含作業(yè)號、任務號信息。MemCollector 根據(jù)作業(yè)號和任務號信息,停止對該任務周期性內存使用量和運行進度信息的收集操作, 并刪除RunTasklist中該任務相應的列表單元。
[0081] 下面結合圖3
【發(fā)明內容】
總流程說明本發(fā)明方法的具體實施方法。在本實施方法 中,五個基本的參數(shù)的設置如下:預測函數(shù)擬合次數(shù)闊值Cm"= 5、任務內存資源追加判斷 闊值叫=0. 1、任務內存資源釋放判斷闊值Uf=0.5、內存追加量計算時間步長T為10秒、 任務搶占優(yōu)先級權值比例0 =0.8。本實施方法可分為W下步驟:
[0082] (1)初始化任務ty運行所在計算節(jié)點上的MemCollector讀取共享變量 RunTasklist中任務ty的信息,根據(jù)任務號j和作業(yè)號i,通過在NodeManager模塊中嵌入 的回調接口,從NodeManager獲取任務的當前內存分配量信息,并根據(jù)任務信息中的任務 對應的化skUpdator IP地址,W RPC調用的方式,從相應化skUpdator獲取任務ty開始運 行時刻,將上述量值分別賦給RunTasklist中任務ty對應列表單元中任務當前內存分配量 RCy項和任務開始運行時刻c_i U項。任務內存資源使用量歷史記錄集合RU U和任務當前 運行進度Pu,則如前所述,通過MemCollector周期性收集運行任務的內存資源使用量及運 行進度信息獲得。
[008引 (2)建立任務ty的內存資源使用量預測函數(shù)。
[0084] 2. 1)設置任務ty的內存資源使用預測量是關于時間的函數(shù),預測函數(shù)形如 斬(0 = log~(t + 1) + C。',其中,ay與C U是待估算的參數(shù);
[0085] 2. 2)任務ty運行所在計算節(jié)點上的MemPredictor讀取共享變量RunTasklist 中任務t。.的內存資源使用量歷史記錄集合RU U,RUu= {r 1 |ri; (t 1,mi),t〇= 0, 111_1, 0《1《n。},其中,t巧第1個記錄時亥Ij,m巧11記錄時刻任務t u的內存使用量。設置 RUy為預測樣本;
[0086] 2.如令X = ln(t+l),y = Qu(t),by二品^,將任務tu的內存資源需求預測函 數(shù)變換為y= byX+Cu,待估算的參數(shù)變換為by和Cu;MemPredictor設置函數(shù)擬合失敗的 次數(shù)Cy = 0 ;
[0087] 2. 4)MemPredictor根據(jù)
【發(fā)明內容】
2.4)中的方法,采用線性回歸方法進行變換預 測函數(shù)的擬合;
[008引 2. 5)MemPredictor根據(jù)
【發(fā)明內容】
2. 5)所述的方法,采用t檢驗法對擬合函數(shù)進行 顯著性檢驗;
[0089] 2. 6)MemPredictor判斷檢驗是否滿足,若是,則函數(shù)擬合成功,執(zhí)行步驟2. 10); 否則,執(zhí)行步驟2.7);
[0090] 2. 7)MemPredictor將Cy加1,判斷擬合總次數(shù)是否大于總次數(shù)闊值Cm。,,則擬合失 敗,執(zhí)行步驟2.9);否則,執(zhí)行步驟2. 10)。其中,Cm。,為預測函數(shù)擬合次數(shù)闊值;
[0091] 2. 8)修正預測樣本。MemPredictor讀取共享變量RunTasklist中任務ty的內 存資源使用量歷史信息集合RUu,從RUu中去除所有滿足條件r 1_1; (t 1_1,mi_i),ri_i G RU U, 0的內存資源使用量記錄r 1; (t 1,mi),并執(zhí)行步驟2. 4);
[009引2. 9) MemPredictor標記任務ty內存資源使用量預測函數(shù)構建失敗,執(zhí)行步驟 (3);
[009引 2. 10) MemPredictor標記任務ty內存資源使用量預測函數(shù)構建成功,將任 務t。的內存資源需求預測函數(shù)g0'(0二W + Cy中的待估計參數(shù)設置為
[0094] (3)計算任務t。的內存資源追加量RA。和釋放量畑。。令當前時刻為c_c。,任務 ty當前內存使用量為RNu。
[0095] 3. l)MemPredictor 設置 RAu=0,畑 u=0;
[0096] 3. 2)MemPredictor從共享變量RunTasklist中讀取任務ty的任務起始運行時刻 c_iu和任務t。的當前運行進度P U,并根據(jù)
【發(fā)明內容】
3. 2)所述方法估算任務tj.j.的完成時 刻以。';
[0097] 3. 3)MemPredictor從共享變量RunTasklist中讀取任務ty當前內存資源分配量 RCy,并按照記錄時刻的先后獲取tu最近一次的內存資源使用記錄,作為任務t。的當前內 存使用量RNyDMemPredictor判i
是否滿足,若是,則執(zhí)行步驟3. 7);否則, 執(zhí)行步驟3. 4)。
[009引3. 4)MemPredictor根據(jù)步驟(2),判斷任務ty的預測函數(shù)是否構建成功,若是,貝U 執(zhí)行步驟3. 5),否則,執(zhí)行步驟3. 6);
[0099] 3. 5)MemPredictor 根據(jù)公式(8)計算 RA。.,執(zhí)行步驟 3. 8);
[0100]
(8)
[0101] 3. 6)根據(jù)公式(9)計算RAu,執(zhí)行步驟3. 8);
[010引RAu=巧C u-RN。') X 1. 5 (9)
[010引 3. 7)MemPredictor 設置 RAu= 0 ;
[0