本申請涉及計算機數(shù)據(jù)處理技術(shù)領(lǐng)域,特別涉及任務調(diào)度方法、裝置及控制節(jié)點。
背景技術(shù):
分布式計算集群可以分為分布式實時計算集群和分布式離線計算集群,在現(xiàn)有的分布式離線計算集群中,都有兩種基本角色,分別為控制節(jié)點和計算節(jié)點。控制節(jié)點可以為各個計算節(jié)點分配任務,由計算節(jié)點執(zhí)行各個任務。在實際應用中,計算節(jié)點可能由于異常原因而出現(xiàn)意外情況,而為了保障計算節(jié)點在單點失效后,集群仍可對外提供服務,控制節(jié)點可以將在失效的計算節(jié)點上的任務分配到其他計算節(jié)點上重新運行。
但是發(fā)明人在研究過程中發(fā)現(xiàn),計算任務已經(jīng)在失效的計算節(jié)點上運行了一段時間,如果分配至新的計算節(jié)點重新運行,勢必會造成任務的某些階段被重復在多個計算節(jié)點上執(zhí)行的情況,這樣就降低了任務的執(zhí)行效率,并且浪費了節(jié)點的計算資源。
技術(shù)實現(xiàn)要素:
本申請所要解決的技術(shù)問題是提供一種任務調(diào)度方法,用以盡量避免現(xiàn)有技術(shù)中任務已經(jīng)被執(zhí)行一段時間之后仍然需要在重新分配的計算節(jié)點中重新運行的情況,以解決計算任務在重復執(zhí)行時導致的計算資源浪費的問題。
本申請還提供了任務調(diào)度裝置及控制節(jié)點,用以保證上述方法在實際中的實現(xiàn)及應用。
為了解決上述問題,本申請公開了一種任務調(diào)度方法,應用于分布式離線計算集群的控制節(jié)點中;包括:
響應于任務的觸發(fā),每隔固定的時間采集段,獲取與所述控制節(jié)點相連的各個計算節(jié)點的第一計算參數(shù),所述第一計算參數(shù)包括:初始CPU使用率、初始內(nèi)存使用率和各個計算任務的任務進度;
在所述第一計算參數(shù)獲取了第一預設(shè)采集次數(shù)之后,參考所述各個計算節(jié)點的初始CPU使用率和初始內(nèi)存使用率分別組成的初始CPU使用率序列和初始內(nèi)存使用率序列,計算下一個時間采集點;
針對所述各個計算任務的任務進度分別組成的各個進度變化集合,判斷所述各個進度變化集合是否表示對應的計算任務執(zhí)行緩慢;
如果是,則為執(zhí)行緩慢的計算任務重新分配計算節(jié)點;
如果否,則在計算的所述下一個時間采集點到來時,執(zhí)行所述獲取與所述控制節(jié)點相連的各個計算節(jié)點的第一計算參數(shù)的步驟,直至所述各個計算任務執(zhí)行完畢。
本申請還公開了一種任務調(diào)度方法,應用于分布式離線計算集群的控制節(jié)點中;該方法包括:
響應于任務的觸發(fā),每隔固定的時間采集段,獲取與所述控制節(jié)點相連的各個計算節(jié)點的第二計算參數(shù),所述第二計算參數(shù)包括:初始CPU使用率、初始內(nèi)存使用率和各個計算任務的健康狀態(tài);
在所述第二計算參數(shù)獲取了第一預設(shè)采集次數(shù)之后,參考所述各個計算節(jié)點的初始CPU使用率和初始內(nèi)存使用率分別組成的初始CPU使用率序列和初始內(nèi)存使用率序列,計算下一個時間采集點;
判斷所述各個計算任務的健康狀態(tài)是否表示對應的計算任務執(zhí)行失敗,如果是,則為所述執(zhí)行失敗的計算任務重新分配計算節(jié)點;
如果否,則在計算的下一個時間采集點到來時,執(zhí)行所述獲取與所述控制節(jié)點相連的各個計算節(jié)點的第二計算參數(shù)的步驟,直至所述各個計算任務執(zhí)行完畢。
本申請公開了一種任務調(diào)度裝置,包括:
第一獲取模塊,用于響應于任務的觸發(fā),每隔固定的時間采集段,獲取與所述控制節(jié)點相連的各個計算節(jié)點的第一計算參數(shù),所述第一計算參數(shù)包括:初始CPU使用率、初始內(nèi)存使用率和各個計算任務的任務進 度;
第一計算模塊,用于在所述第一計算參數(shù)獲取了第一預設(shè)采集次數(shù)之后,參考所述各個計算節(jié)點的初始CPU使用率和初始內(nèi)存使用率分別組成的初始CPU使用率序列和初始內(nèi)存使用率序列,計算下一個時間采集點;
第一判斷模塊,用于針對所述各個計算任務的任務進度組成的各個進度變化集合,判斷所述各個進度變化集合是否表示對應的計算任務執(zhí)行緩慢;
第一分配模塊,用于在所述判斷模塊的結(jié)果為是的情況下,為執(zhí)行緩慢的計算任務重新分配計算節(jié)點;
第一觸發(fā)模塊,用于在所述判斷模塊的結(jié)果為否的情況下,在所述計算的下一個時間采集點到來時,觸發(fā)所述獲取模塊,直至所述各個計算任務執(zhí)行完畢。
本申請還公開了一種任務調(diào)度裝置,包括:
第三獲取模塊,用于響應于任務的觸發(fā),每隔固定的時間采集段,獲取與所述控制節(jié)點相連的各個計算節(jié)點的第二計算參數(shù),所述第二計算參數(shù)包括:初始CPU使用率、初始內(nèi)存使用率和各個計算任務的健康狀態(tài);
第二計算模塊,用于在所述第二計算參數(shù)獲取了第一預設(shè)采集次數(shù)之后,參考所述各個計算節(jié)點的初始CPU使用率和初始內(nèi)存使用率分別組成的初始CPU使用率序列和初始內(nèi)存使用率序列,計算下一個時間采集點;
第二判斷模塊,用于判斷所述各個計算任務的健康狀態(tài)是否表示對應的計算任務執(zhí)行失??;
第二分配模塊,用于在所述第二判斷模塊的結(jié)果為是的情況下,為所述執(zhí)行失敗的計算任務重新分配計算節(jié)點;
第二觸發(fā)模塊,用于在所述第二判斷模塊的結(jié)果為否的情況下,在所述計算的下一個時間采集點到來時,觸發(fā)所述第二獲取模塊,直至所述各個計算任務執(zhí)行完畢。
本申請公開了一種控制節(jié)點,包括:前述的任一項任務調(diào)度裝置。
與現(xiàn)有技術(shù)相比,本申請包括以下優(yōu)點:
在本申請實施例中,針對最近的第一預設(shè)采集次數(shù)個周期內(nèi)的計算參數(shù),可以預測得出下一個采集時間點,使得針對計算任務的采集時間點可以動態(tài)變化,并且通過對計算任務的任務進度的監(jiān)控,可以在發(fā)現(xiàn)任務執(zhí)行緩慢的情況下,從距離該任務執(zhí)行緩慢的最近的時間點來重新運行,而不是重新運行整個任務,從而可以提高任務執(zhí)行的效率,并且節(jié)約了分布式離線計算集群的計算資源。
進一步的,各個計算任務的中間結(jié)果的元數(shù)據(jù)可以同步到程序協(xié)調(diào)集群中,例如,一個私有的zookeeper上,這樣可以很好地保障中間結(jié)果的元數(shù)據(jù)的可靠性和可用性。由于可以在程序協(xié)調(diào)集群中保留當前在運行的任務的最近N(即第一預設(shè)采集次數(shù))個周期的元數(shù)據(jù),因此zookeeper上的數(shù)據(jù)也不會很多,完全符合zookeeper的使用特性。
當然,實施本申請的任一產(chǎn)品并不一定需要同時達到以上所述的所有優(yōu)點。
附圖說明
為了更清楚地說明本申請實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本申請的任務調(diào)度方法實施例1的流程圖;
圖2是本申請的方法實施例在實際應用中的場景結(jié)構(gòu)圖;
圖3是本申請的任務調(diào)度方法實施例2的流程圖;
圖4為本申請的任務調(diào)度裝置實施例1的結(jié)構(gòu)框圖;
圖5為本申請的任務調(diào)度裝置實施例2的結(jié)構(gòu)框圖。
具體實施方式
下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實 施例,而不是全部的實施例?;诒旧暾堉械膶嵤├绢I(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
本申請可用于眾多通用或?qū)S玫挠嬎阊b置環(huán)境或配置中。例如:個人計算機、服務器計算機、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器裝置、包括以上任何裝置或設(shè)備的分布式計算環(huán)境等等。
本申請可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實踐本申請,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡而被連接的遠程處理設(shè)備來執(zhí)行任務。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設(shè)備在內(nèi)的本地和遠程計算機存儲介質(zhì)中。
參考圖1,示出了本申請一種任務調(diào)度方法實施例1的流程圖,本實施例應用于分布式離線計算集群的控制節(jié)點中;本實施例可以包括以下步驟:
步驟101:響應于任務的觸發(fā),每隔固定的時間采集段,獲取與所述控制節(jié)點相連的各個計算節(jié)點的第一計算參數(shù),所述第一計算參數(shù)包括:初始CPU使用率、初始內(nèi)存使用率和各個計算任務的任務進度。
在本實施例中,如果任務被觸發(fā),控制節(jié)點在將任務分配至各個計算節(jié)點之后,需要每隔固定的時間采集段,從執(zhí)行任務的各個計算節(jié)點采集各個計算節(jié)點的第一計算參數(shù),在本實施例中,該第一計算參數(shù)可以包括:各個計算節(jié)點的初始CPU使用率,各個計算節(jié)點的初始內(nèi)存使用率,以及,各個計算節(jié)點所執(zhí)行的各個計算任務的任務進度。其中,任務進度可以表示當前計算任務執(zhí)行完成的百分比,例如任務進度為50%,則表示該任務已經(jīng)執(zhí)行了一半。
在本步驟中,固定的時間采集段Tm可以采用如下所示的公式(一)計算得到:
Tm=e-(aα+bβ) (一)
在公式(一)中,α為計算節(jié)點的初始CPU使用率,β為計算節(jié)點的初始內(nèi)存使用率。可見,固定的時間采集段Tm,可以由兩方面因素決定:一是計算任務所在的計算節(jié)點的性能,二是可以人為設(shè)定的變量,a和b。其中,a和b是兩個可以人為設(shè)定的變量。如公式(一)所示,固定的時間采集段Tm與“初始CPU使用率α和初始內(nèi)存使用率β”成反比,這是因為當計算節(jié)點的CPU使用率和內(nèi)存使用率提高后,各個任務出錯的可能性就會增大,因此固定的采集時間段就應當相應縮短,以免錯過最接近的任務恢復點;反之,固定的采集時間段則可以適當延長,以避免對于任務的第一計算參數(shù)的不必要的采集。
接著返回圖1,進入步驟102:在所述第一計算參數(shù)獲取了第一預設(shè)采集次數(shù)之后,參考所述各個計算節(jié)點的初始CPU使用率和初始內(nèi)存使用率分別組成的初始CPU使用率序列和初始內(nèi)存使用率序列,計算下一個時間采集點。
在本實施例中,步驟101可以執(zhí)行第一預設(shè)采集次數(shù)示意的次數(shù),例如,第一預設(shè)采集次數(shù)為10,則步驟101就可以執(zhí)行10次,一共得到10個第一計算參數(shù)?;诖?,步驟102在實際應用中可以包括如下所示的步驟A1~步驟A3:
步驟A1:根據(jù)所述初始CPU使用率序列和初始內(nèi)存使用率序列,計算下一個時間采集點的目標CPU使用率和目標內(nèi)存使用率。
以第一預設(shè)采集次數(shù)為10為例,當步驟101執(zhí)行10次之后,就可以得到各個計算節(jié)點的10個初始CPU使用率和10個內(nèi)存使用率,從而組成了各個計算節(jié)點的初始CPU使用率序列和初始內(nèi)存使用率序列,在本實施例中分別表示為:αx和βx,其中:αx={α1 α2 ... αn}(0≤n≤N),βx={β1 β2 ... βn}(0≤n≤N)。
然后,根據(jù)αx和βx,分別按照如下所示的公式(二)、(三)分別計算出下一個采集點的目標CPU使用率和目標內(nèi)存使用率αN+1和βN+1。
其中,在公式(二)和公式(三)中分別采用了折半衰減原理來對前10次采集的第一計算參數(shù)加上權(quán)值,主要是為了區(qū)別各個時間采集點采集的第一計算參數(shù)對預測數(shù)據(jù)的影響,即:每過一個固定的時間采集段,采集的第一計算參數(shù)對預測數(shù)據(jù)的影響系數(shù)衰減為之前的一半。
步驟A2:依據(jù)所述目標CPU使用率和目標內(nèi)存使用率計算下一次采集間隔。
根據(jù)步驟A1中計算的下一個采集點的CPU和內(nèi)存使用率αN+1和βN+1,再次依據(jù)公式(一)計算出下一個采集間隔TN+1。
步驟A3:依據(jù)所述下一次采集間隔和當前時間計算得到下一個時間采集點。
根據(jù)計算出的采集間隔TN+1和當前采集時間to,按照如下所示的公式(四)計算出下一個采集時間點to′:
to′=to+TN+1 公式(四)
其中,以第一預設(shè)采集次數(shù)為10為例,當前采集時間to為第10次采集第一計算參數(shù)的系統(tǒng)時間。
步驟103:針對所述各個計算任務的任務進度分別組成的各個進度變化集合,判斷所述各個進度變化集合是否表示對應的計算任務執(zhí)行緩慢,果是,則進入步驟105,如果否,則進入步驟104。
根據(jù)步驟101中采集到的各個計算任務的任務進度Pi,可以得到各個計算任務的進度變化集合可表示為如下所示的公式(五):
在公式(五)中,計算任務的進度變化“PΔi”就等于當前任務進度“Pij”與上一個任務進度“Pij-1”之差,“MP”為計算任務的進度變化的最大范圍,可以設(shè)置為固定的時間采集段的兩倍。當然,本領(lǐng)域技術(shù)人員也可以根據(jù)需要設(shè)置為其他數(shù)值。
那么,判斷各個進度變化集合是否表示對應的計算任務執(zhí)行緩慢,可以通過判斷各個進度變化集合中計算任務的變化趨勢值是否小于預設(shè) 的任務緩慢閾值來實現(xiàn)。例如,當判斷得到任務進度變化集合PΔi中的變化程度都趨近于0的結(jié)果的情況下,說明該計算節(jié)點負載過高或者任務變慢,即,該進度變化集合表示計算任務執(zhí)行緩慢。
步驟104:獲取與所述控制節(jié)點相連的各個計算節(jié)點的第一計算參數(shù),并計算下一個時間采集點,直至所述各個計算任務執(zhí)行完畢。
而如果計算任務并沒有執(zhí)行緩慢的情況出現(xiàn),則可以在計算的下一個時間采集點到來的時候,獲取與控制節(jié)點相連的各個計算節(jié)點的第一計算參數(shù),重新計算下下一個時間采集點,直至各個計算任務執(zhí)行完畢。需要說明的是,在本實施例中,以第一預設(shè)采集次數(shù)為10次為例,那么每次就采用最近前10次所獲取到的第二計算參數(shù)計算下一個時間采集點。
步驟105:為執(zhí)行緩慢的計算任務重新分配計算節(jié)點。
在某個計算任務執(zhí)行緩慢的時候,可能說明執(zhí)行該計算任務的計算節(jié)點已經(jīng)達到飽和狀態(tài),或者計算節(jié)點出現(xiàn)了異常情況等,在這種情況下,控制節(jié)點可以在該計算任務所屬的計算節(jié)點中將該計算任務殺死(kill),然后為其分配新的計算節(jié)點。
其中,為執(zhí)行緩慢的計算任務重新分配計算節(jié)點,具體可以包括如下所示的步驟B1~步驟B3:
步驟B1:在執(zhí)行緩慢的計算任務歸屬的計算節(jié)點上殺死所述執(zhí)行緩慢的計算任務。
首先,在執(zhí)行緩慢的計算任務所屬的計算節(jié)點上,將已經(jīng)執(zhí)行緩慢的計算任務kill掉。
步驟B2:將執(zhí)行緩慢的計算任務依次加入預先設(shè)置的重試隊列。
再將執(zhí)行緩慢的計算任務加入至預先設(shè)置的一個重試隊列中,以便控制節(jié)點后續(xù)從該充實隊列中按照時間順序讀取計算任務。
步驟B3:從所述重試隊列中按照時間順序獲取執(zhí)行緩慢的計算任務,并為獲取到的計算任務依次分配其他計算節(jié)點。
然后,控制節(jié)點再從重試隊列中按照時間順序獲取執(zhí)行緩慢的計算任務,并依次為其重新分配其他計算節(jié)點。
在實際應用中,步驟101中獲取到的第一計算參數(shù)還可以包括:各個計算任務的中間結(jié)果的元數(shù)據(jù)。其中,中間結(jié)果的元數(shù)據(jù)為執(zhí)行計算任務過程中產(chǎn)生的中間數(shù)據(jù),用來表示計算任務的執(zhí)行過程。例如,假設(shè)計算任務為讀取一張EXCEL表格,那么中間結(jié)果的元數(shù)據(jù)可能是該EXCEL表格的存儲位置,當前已經(jīng)讀取至該EXCEL表格的哪一行那一列,以及,讀取到的結(jié)果的存儲位置,等等。
那么,在本實施例中,在獲取到各個計算任務的中間結(jié)果的元數(shù)據(jù)之后,還可以包括:
步驟100:將所述各個計算任務的中間結(jié)果的元數(shù)據(jù)存儲至程序協(xié)調(diào)集群中。
可以將中間步驟獲取到的中間結(jié)果的元數(shù)據(jù)Di存儲至程序協(xié)調(diào)集群中,例如,可以存儲至zookeeper上。因為程序協(xié)調(diào)集群可以與控制節(jié)點和計算節(jié)點相互獨立,因此,一旦某個計算任務執(zhí)行緩慢或者執(zhí)行失敗,就可以參考中間結(jié)果的元數(shù)據(jù)來從距離任務失敗的最接近的時間點開始繼續(xù)執(zhí)行,而不是從頭再執(zhí)行計算任務,相對更為節(jié)省分布式集群的計算資源,還能為提高任務執(zhí)行的效率。
可以理解的是,在程序協(xié)調(diào)集群zookeeper中可以僅僅保留當前在運行的任務的最近N(即第一預設(shè)采集次數(shù))個周期的元數(shù)據(jù)(計算下一個時間采集點所需),因此zookeeper上的數(shù)據(jù)也不會很多,完全符合zookeeper的使用特性。
那么,在所述為執(zhí)行緩慢的計算任務重新分配計算節(jié)點之后,還可以包括:
步驟106:從所述程序協(xié)調(diào)集群中獲取執(zhí)行緩慢的計算任務的中間結(jié)果元數(shù)據(jù),并將所述中間結(jié)果的元數(shù)據(jù)發(fā)送至重新分配的計算節(jié)點,以觸發(fā)所述重新分配的計算節(jié)點依據(jù)所述中間結(jié)果的元數(shù)據(jù)繼續(xù)執(zhí)行所述計算任務。
如果出現(xiàn)了為執(zhí)行緩慢的計算任務重新分配計算節(jié)點的情況,則控制節(jié)點可以接著從程序協(xié)調(diào)集群中獲取到執(zhí)行緩慢的計算任務的中間結(jié)果 元數(shù)據(jù),并將所述中間結(jié)果的元數(shù)據(jù)發(fā)送至重新分配的計算節(jié)點,以觸發(fā)所述重新分配的計算節(jié)點依據(jù)所述中間結(jié)果的元數(shù)據(jù)繼續(xù)執(zhí)行所述計算任務。
可以理解的是,在計算任務執(zhí)行完畢之后,才可以在程序協(xié)調(diào)集群例如zookeeper中刪除該計算任務的中間結(jié)果的元數(shù)據(jù),以保證程序協(xié)調(diào)集群的高性能。
參考圖2所示,為本申請方法實施例在實際應用中的場景架構(gòu)圖??刂乒?jié)點是分布式離線計算集群中負責分配任務的節(jié)點,當各種任務被提交到控制節(jié)點,控制節(jié)點可以根據(jù)任務所需的時間和各個計算節(jié)點的當前狀態(tài)等,來將任務分配給合適的計算節(jié)點去執(zhí)行。
可見,在本申請實施例中,針對最近的第一預設(shè)采集次數(shù)個周期內(nèi)的計算參數(shù),可以預測得出下一個采集時間點,使得針對計算任務的采集時間點可以動態(tài)變化,并且通過對計算任務的任務進度的監(jiān)控,可以在發(fā)現(xiàn)任務執(zhí)行緩慢的情況下,從距離該任務執(zhí)行緩慢的最近的時間點來重新運行,而不是重新運行整個任務,從而可以提高任務執(zhí)行的效率,并且節(jié)約了分布式離線計算集群的計算資源。
參考圖3所示,示出了本申請一種任務調(diào)度方法實施例2的流程圖,本實施例應用于分布式離線計算集群的控制節(jié)點中;本實施例可以包括以下步驟:
步驟301:響應于任務的觸發(fā),每隔固定的時間采集段,獲取與所述控制節(jié)點相連的各個計算節(jié)點的第二計算參數(shù),所述第二計算參數(shù)包括:初始CPU使用率、初始內(nèi)存使用率和各個計算任務的健康狀態(tài)。
在本實施例中,與實施例1的區(qū)別之處在于,本實施例中,獲取到的第二計算參數(shù)除了各個計算節(jié)點的初始CPU使用率和初始內(nèi)存使用率之外,還獲取到的是各個計算任務的健康狀態(tài)Hi。其中,該健康狀態(tài)Hi用于表示計算任務是否在正常執(zhí)行,例如可以采用0或1來表示,當健康狀態(tài)的值為0時表示該計算任務的執(zhí)行狀態(tài)為不健康,當健康狀態(tài)的值為1時表示該計算任務的執(zhí)行狀態(tài)為健康。
步驟302:在所述第二計算參數(shù)獲取了第一預設(shè)采集次數(shù)之后,參考所述各個計算節(jié)點的初始CPU使用率和初始內(nèi)存使用率分別組成的初始CPU使用率序列和初始內(nèi)存使用率序列,計算下一個時間采集點。
本步驟的執(zhí)行過程可以和步驟102相同,在此不再贅述。
步驟303:判斷所述各個計算任務的健康狀態(tài)是否表示對應的計算任務執(zhí)行失敗,如果是,則進入步驟305,如果否,則進入步驟304。
在本實施例中,可以根據(jù)各個計算任務的健康狀態(tài)來判斷,是否對應的計算任務執(zhí)行失敗。例如,如果某個計算任務的健康狀態(tài)持續(xù)為0,則說明該計算任務在其當前所屬的計算節(jié)點上執(zhí)行失敗。
步驟304:在計算的下一個時間采集點到來時,執(zhí)行所述獲取與所述控制節(jié)點相連的各個計算節(jié)點的第二計算參數(shù)的步驟,直至所述各個計算任務執(zhí)行完畢。
如果某個計算任務沒有執(zhí)行失敗,則可以在計算的下一個時間采集點到來時,接著獲取與所述控制節(jié)點相連的各個計算節(jié)點的第二計算參數(shù),進而根據(jù)當前獲取到的第二計算參數(shù)來計算下下一個時間采集點。直至所述各個計算任務執(zhí)行完畢。需要說明的是,在本實施例中,以第一預設(shè)采集次數(shù)為10次為例,那么每次就采用最近前10次所獲取到的第二計算參數(shù)計算下一個時間采集點。
步驟305:所述執(zhí)行失敗的計算任務重新分配計算節(jié)點。
而如果任務執(zhí)行失敗,則也需要為執(zhí)行失敗的計算任務重新分配計算節(jié)點,具體過程可以參考步驟105的詳細介紹,在此不再贅述。
在本實施例中,也可以在一開始判斷得到計算任務執(zhí)行失敗的情況下,先不為該執(zhí)行失敗的計算任務重新分配計算節(jié)點,那么,在為執(zhí)行失敗的計算任務重新分配計算節(jié)點之前,還包括:
步驟C1:按照所述固定的時間采集段,繼續(xù)獲取所述執(zhí)行失敗的計算任務的第二計算參數(shù)。
當在某個時間點發(fā)現(xiàn)計算任務失敗后,就放棄計算下一個時間采集點,而是又回歸到固定的時間采集端,再持續(xù)獲取計算任務的第二計算 參數(shù)。
步驟C2:在所述第二計算參數(shù)繼續(xù)獲取了第二預設(shè)采集次數(shù)之后,根據(jù)各個計算任務的健康狀態(tài)判斷所述執(zhí)行失敗的計算任務是否確實失敗,如果否,則進入步驟C3,如果是,則進入步驟C4。
持續(xù)監(jiān)測MH(即第二預設(shè)采集次數(shù))個周期后,再根據(jù)各個計算任務的健康狀態(tài)判斷所述執(zhí)行失敗的計算任務是否確實失敗,如果發(fā)現(xiàn)任務健康狀態(tài)都沒有好轉(zhuǎn)(例如,健康狀態(tài)持續(xù)為零),就認為該計算任務真正失敗,需要說明的是,MH可以為確認任務失敗的最大檢測次數(shù),例如,可以設(shè)置為第一預設(shè)采集次數(shù)的一半,例如5次。
步驟C3:執(zhí)行參考所述各個計算節(jié)點的初始CPU使用率和初始內(nèi)存使用率分別組成的初始CPU使用率序列和初始內(nèi)存使用率序列,計算下一個時間采集點的步驟。
如果計算任務不是真正失敗,例如監(jiān)控狀態(tài)從0變?yōu)?,則可以認為該計算任務已經(jīng)重新正常執(zhí)行,在這種情況下,可以執(zhí)行計算下一個時間采集點的步驟。
步驟C4:執(zhí)行所述執(zhí)行失敗的計算任務重新分配計算節(jié)點的步驟。
而在計算任務確實已經(jīng)失敗的情況下,可以再為執(zhí)行失敗的計算任務重新分配計算節(jié)點。
在本實施例中,針對最近的第一預設(shè)采集次數(shù)個周期內(nèi)的計算參數(shù),可以預測得出下一個采集時間點,使得針對計算任務的采集時間點可以動態(tài)變化,并且通過對計算任務的健康狀態(tài)的監(jiān)控,可以在發(fā)現(xiàn)任務執(zhí)行失敗的情況下,從距離該任務執(zhí)行失敗的最近的時間點來重新運行,而不是重新運行整個任務,從而可以提高任務執(zhí)行的效率,并且節(jié)約了分布式離線計算集群的計算資源。
對于前述的方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應該知悉,本申請并不受所描述的動作順序的限制,因為依據(jù)本申請,某些步驟可以采用其他順序或者同時進行。其次,本領(lǐng)域技術(shù)人員也應該知悉,說明書中所描述的實施例均屬 于優(yōu)選實施例,所涉及的動作和模塊并不一定是本申請所必須的。
與上述本申請一種任務調(diào)度方法實施例1所提供的方法相對應,參見圖4,本申請還提供了一種任務調(diào)度裝置實施例1,本實施例的裝置可以集成在控制節(jié)點上,在本實施例中,該裝置可以包括:
第一獲取模塊401,用于響應于任務的觸發(fā),每隔固定的時間采集段,獲取與所述控制節(jié)點相連的各個計算節(jié)點的第一計算參數(shù),所述第一計算參數(shù)包括:初始CPU使用率、初始內(nèi)存使用率和各個計算任務的任務進度。
第一計算模塊402,用于在所述第一計算參數(shù)獲取了第一預設(shè)采集次數(shù)之后,參考所述各個計算節(jié)點的初始CPU使用率和初始內(nèi)存使用率分別組成的初始CPU使用率序列和初始內(nèi)存使用率序列,計算下一個時間采集點。
其中,所述第一計算模塊402可以包括:
第一計算子模塊,用于根據(jù)所述初始CPU使用率序列和初始內(nèi)存使用率序列,計算下一個時間采集點的目標CPU使用率和目標內(nèi)存使用率;第二計算子模塊,用于依據(jù)所述目標CPU使用率和目標內(nèi)存使用率計算下一次采集間隔;以及,第三計算子模塊,用于依據(jù)所述下一次采集間隔和當前時間計算得到下一個時間采集點。
第一判斷模塊403,用于針對所述各個計算任務的任務進度組成的各個進度變化集合,判斷所述各個進度變化集合是否表示對應的計算任務執(zhí)行緩慢。
其中,所述第一判斷模塊403具體可以用于:判斷所述進度變化集合中計算任務的變化趨勢值是否小于預設(shè)的任務失敗閾值。
第一分配模塊404,用于在所述判斷模塊的結(jié)果為是的情況下,為執(zhí)行緩慢的計算任務重新分配計算節(jié)點。
其中,所述第一分配模塊404具體可以包括:
刪除子模塊,用于在所述執(zhí)行緩慢的計算任務歸屬的計算節(jié)點上殺死所述執(zhí)行緩慢的計算任務;加入子模塊,用于將所述執(zhí)行緩慢的計算任 務加入預先設(shè)置的重試隊列;獲取子模塊,用于從所述重試隊列中按照時間順序獲取執(zhí)行緩慢的計算任務;以及,分配子模塊,用于為獲取到的計算任務依次分配其他計算節(jié)點。
第一觸發(fā)模塊405,用于在所述判斷模塊的結(jié)果為否的情況下,在所述計算的下一個時間采集點到來時,觸發(fā)所述獲取模塊,直至所述各個計算任務執(zhí)行完畢。
在實際應用中,第一計算參數(shù)還可以包括:各個計算任務的中間結(jié)果的元數(shù)據(jù);
則本實施例所述的裝置還可以包括:
存儲模塊,用于將所述中間結(jié)果的元數(shù)據(jù)存儲至程序協(xié)調(diào)集群zookeeper中;
以及,
第二獲取模塊,用于從所述程序協(xié)調(diào)集群中獲取執(zhí)行緩慢的計算任務的中間結(jié)果元數(shù)據(jù);
發(fā)送模塊,用于將所述中間結(jié)果的元數(shù)據(jù)發(fā)送至重新分配的計算節(jié)點,以觸發(fā)所述重新分配的計算節(jié)點依據(jù)所述中間結(jié)果的元數(shù)據(jù)繼續(xù)執(zhí)行所述計算任務。
可見,在本申請實施例中,針對最近的第一預設(shè)采集次數(shù)個周期內(nèi)的計算參數(shù),可以預測得出下一個采集時間點,使得針對計算任務的采集時間點可以動態(tài)變化,并且通過對計算任務的任務進度的監(jiān)控,可以在發(fā)現(xiàn)任務執(zhí)行緩慢的情況下,從距離該任務執(zhí)行緩慢的最近的時間點來重新運行,而不是重新運行整個任務,從而可以提高任務執(zhí)行的效率,并且節(jié)約了分布式離線計算集群的計算資源。
與上述本申請一種任務調(diào)度方法實施例2所提供的方法相對應,參見圖5,本申請還提供了一種任務調(diào)度裝置實施例2,本實施例的裝置可以集成在控制節(jié)點上,在本實施例中,該裝置可以包括:
第三獲取模塊501,用于響應于任務的觸發(fā),每隔固定的時間采集段,獲取與所述控制節(jié)點相連的各個計算節(jié)點的第二計算參數(shù),所述第二計 算參數(shù)包括:初始CPU使用率、初始內(nèi)存使用率和各個計算任務的健康狀態(tài)。
第二計算模塊502,用于在所述第二計算參數(shù)獲取了第一預設(shè)采集次數(shù)之后,參考所述各個計算節(jié)點的初始CPU使用率和初始內(nèi)存使用率分別組成的初始CPU使用率序列和初始內(nèi)存使用率序列,計算下一個時間采集點。
第二判斷模塊503,用于判斷所述各個計算任務的健康狀態(tài)是否表示對應的計算任務執(zhí)行失敗。
第二分配模塊504,用于在所述第二判斷模塊的結(jié)果為是的情況下,為所述執(zhí)行失敗的計算任務重新分配計算節(jié)點。
第二觸發(fā)模塊505,用于在所述第二判斷模塊的結(jié)果為否的情況下,在所述計算的下一個時間采集點到來時,觸發(fā)所述第二獲取模塊,直至所述各個計算任務執(zhí)行完畢。
在實際應用中,本實施例所述的裝置還可以包括:
第四獲取模塊,用于按照所述固定的時間采集段,繼續(xù)獲取預設(shè)個數(shù)的所述執(zhí)行失敗的計算任務的第二計算參數(shù);第三判斷模塊,用于在所述第二計算參數(shù)繼續(xù)獲取了第二預設(shè)采集次數(shù)之后,根據(jù)所述預設(shè)個數(shù)的健康狀態(tài)判斷所述執(zhí)行失敗的計算任務是否確實失敗;第三觸發(fā)模塊,用于在所述判斷模塊的結(jié)果為否的情況下,觸發(fā)所述計算模塊;以及,第三分配模塊,用于在所述判斷模塊的結(jié)果為是的情況下,觸發(fā)所述分配模塊。
在本實施例中,針對最近的第一預設(shè)采集次數(shù)個周期內(nèi)的計算參數(shù),可以預測得出下一個采集時間點,使得針對計算任務的采集時間點可以動態(tài)變化,并且通過對計算任務的健康狀態(tài)的監(jiān)控,可以在發(fā)現(xiàn)任務執(zhí)行失敗的情況下,從距離該任務執(zhí)行失敗的最近的時間點來重新運行,而不是重新運行整個任務,從而可以提高任務執(zhí)行的效率,并且節(jié)約了分布式離線計算集群的計算資源。
本申請實施例還提供了一種控制節(jié)點,該控制節(jié)點可以包括裝置實 施例1或裝置實施例2所述的任務調(diào)度裝置。
需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對于裝置類實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。
最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
以上對本申請所提供的任務調(diào)度方法、裝置及控制節(jié)點進行了詳細介紹,本文中應用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在具體實施方式及應用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應理解為對本申請的限制。