本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別涉及一種任務分配方法及裝置。
背景技術(shù):
隨著大數(shù)據(jù)時代的到來,單純的高性能單節(jié)點運算已經(jīng)很難滿足大數(shù)據(jù)計算的需要,MapReduce、Spark以及Storm等分布式計算模型應運而生。
目前,在分布式計算模型中,利用多個計算節(jié)點構(gòu)建分布式計算模型,通過將一個計算量較大的目標計算任務按照時間順序?qū)⑵洳鸱譃榇杏嬎氵^程,當串行計算過程可以進一步拆分為多個并行計算過程時,進一步將當前串行計算過程拆分為多個并行任務時,針對當前串行計算過程下的每一個并行任務,分別將其隨機分配到分布式計算模型中相應的計算節(jié)點上,以使相應計算節(jié)點分別執(zhí)行對應的并行任務。
由于分布式計算模型中各個計算節(jié)點的硬件性能并不相同,當硬件性能較低的計算節(jié)點不能滿足當前計算節(jié)點分配到的并行任務的計算需求或存儲需求時,則需要在當前計算節(jié)點上kill掉該并行任務,并將該并行任務重新分配給其他計算節(jié)點,頻繁的kill并重啟并行任務將會耗費大量的時間,增加目標計算任務的計算時長。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種任務分配方法及裝置,可減小目標計算任務的計算時長。
第一方面,本發(fā)明實施例提供了一種任務分配方法,包括:
S1:獲取外部分布式計算模型中每一個計算節(jié)點分別對應的資源信息,根據(jù)每一個計算節(jié)點分別對應的資源信息將當前計算節(jié)點確定為計算優(yōu)先型計算節(jié)點或存儲優(yōu)先型計算節(jié)點;
S2:獲取目標計算任務,將所述目標計算任務解析為具備時間順序的至少兩個計算過程;
S3:按順序解析所述至少兩個計算過程,在當前計算過程可以被解析為至少兩個并行任務時,將當前計算過程解析為至少兩個并行任務;
S4:解析每一個所述并行任務,以確定每一個所述并行任務分別對應的屬性信息;
S5:根據(jù)每一個所述并行任務分別對應的屬性信息,將當前并行任務確定為數(shù)據(jù)密集型并行任務或計算密集型并行任務;
S6將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并將每一個所述數(shù)據(jù)密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點。
優(yōu)選地,
所述解析每一個所述并行任務,以確定每一個所述并行任務分別對應的屬性信息,包括:解析每一個所述并行任務,以確定每一個所述并行任務分別對應的計算量、數(shù)據(jù)量以及算法復雜度。
優(yōu)選地,
還包括:根據(jù)每一個所述并行任務分別對應的計算量、數(shù)據(jù)量以及算法復雜度確定每一個所述并行任務分別對應的資源需求信息;
所述將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并將每一個所述數(shù)據(jù)密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點,包括:根據(jù)每一個所述計算密集型并行任務分別對應的資源需求信息,將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并根據(jù)每一個所述數(shù)據(jù)密集型并行任務分別對應的資源需求信息,將每一個所述計算密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點。
優(yōu)選地,
所述資源需求信息至少包括如下三種申請信息:內(nèi)存資源申請信息、IO資源申請信息及CPU資源申請信息;還包括:
A1:將每一個所述并行任務分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重均置為1;
A2:根據(jù)每一個所述并行任務分別對應的計算量、數(shù)據(jù)量以及算法復雜度,確定是否存在至少一個目標并行任務出現(xiàn)數(shù)據(jù)傾斜,如果是,則將所述目標并行任務對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重均加1,然后執(zhí)行步驟A3;否則,執(zhí)行步驟A3;
A3:將每一個所述數(shù)據(jù)密集型并行任務分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重加1,以及將每一個所述計算密集型并行任務分別對應的CPU資源申請信息的權(quán)重加1;
所述根據(jù)每一個所述計算密集型并行任務分別對應的資源需求信息,將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并根據(jù)每一個所述數(shù)據(jù)密集型并行任務分別對應的資源需求信息,將每一個所述數(shù)據(jù)密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點,包括:根據(jù)每一個所述計算密集型并行任務分別對應的內(nèi)存資源申請信息、IO資源申請信息、CPU資源申請信息以及當前計算密集型并行任務對應的CPU資源申請信息的權(quán)重,將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并根據(jù)每一個所述數(shù)據(jù)密集型并行任務分別對應的內(nèi)存資源申請信息、IO資源申請信息、CPU資源申請信息以及當前數(shù)據(jù)密集型并行任務對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重,將每一個所述數(shù)據(jù)密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點。
優(yōu)選地,還包括:
在當前計算過程不可被解析為至少兩個并行任務時,解析當前計算過程,以確定當前計算過程對應的計算量、數(shù)據(jù)量以及算法復雜度;
根據(jù)當前計算過程對應的計算量、數(shù)據(jù)量以及算法復雜度確定當前計算過程的類型為數(shù)據(jù)密集型或計算密集型;
在當前計算過程的類型為數(shù)據(jù)密集型時,將當前計算過程分配給所述至少一個存儲優(yōu)先型計算節(jié)點;或,在當前計算過程的類型為計算密集型時,將當前計算過程分配給所述至少一個計算優(yōu)先型計算節(jié)點。
第二方面,本發(fā)明實施例提供了一種任務分配裝置,包括:
節(jié)點管理模塊,用于獲取外部分布式計算模型中每一個計算節(jié)點分別對應的資源信息,根據(jù)每一個計算節(jié)點分別對應的資源信息將當前計算節(jié)點確定為計算優(yōu)先型計算節(jié)點或存儲優(yōu)先型計算節(jié)點;
獲取模塊,用于獲取目標計算任務,將所述目標計算任務解析為具備時間順序的至少兩個計算過程;
第一解析模塊,用于按順序解析所述至少兩個計算過程,在當前計算過程可以被解析為至少兩個并行任務時,將當前計算過程解析為至少兩個并行任務;
第二解析模塊,用于解析每一個所述并行任務,以確定每一個所述并行任務分別對應的屬性信息;
確定模塊,用于根據(jù)每一個所述并行任務分別對應的屬性信息,將當前并行任務確定為數(shù)據(jù)密集型并行任務或計算密集型并行任務;
任務處理模塊,用于將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并將每一個所述數(shù)據(jù)密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點,以使分配到數(shù)據(jù)密集型并行任務的至少一個存儲優(yōu)先型計算節(jié)點以及分配到計算密集型并行任務的至少一個計算優(yōu)先型計算節(jié)點分別執(zhí)行對應的并行任務。
優(yōu)選地,
所述第二解析模塊,用于解析每一個所述并行任務,以確定每一個所述并行任務分別對應的計算量、數(shù)據(jù)量以及算法復雜度。
優(yōu)選地,還包括:
量化處理模塊,用于根據(jù)每一個所述并行任務分別對應的計算量、數(shù)據(jù)量以及算法復雜度確定每一個所述并行任務分別對應的資源需求信息;
所述任務處理模塊,用于根據(jù)每一個所述計算密集型并行任務分別對應的資源需求信息,將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并根據(jù)每一個所述數(shù)據(jù)密集型并行任務分別對應的資源需求信息,將每一個所述計算密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點。
優(yōu)選地,
還包括:權(quán)重配置模塊、判斷模塊、第一修正模塊以及第二修正模塊;其中,
所述權(quán)重配置模塊,用于將每一個所述并行任務分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重均置為1;
判斷模塊,用于根據(jù)每一個所述并行任務分別對應的計算量、數(shù)據(jù)量以及算法復雜度,確定是否存在至少一個目標并行任務出現(xiàn)數(shù)據(jù)傾斜,如果是,則觸發(fā)所述第一修正模塊;否則,觸發(fā)所述第二修正模塊;
所述第一修正模塊,用于在所述判斷模塊的觸發(fā)下,將所述目標并行任務對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重均加1,然后觸發(fā)所述第二修正模塊;
所述第二修正模塊,用于在所述判斷模塊或所述第一修正模塊的觸發(fā)下,將每一個所述數(shù)據(jù)密集型并行任務分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重加1,以及將每一個所述計算密集型并行任務分別對應的CPU資源申請信息的權(quán)重加1;
所述任務處理模塊,用于根據(jù)每一個所述計算密集型并行任務分別對應的內(nèi)存資源申請信息、IO資源申請信息、CPU資源申請信息以及當前計算密集型并行任務對應的CPU資源申請信息的權(quán)重,將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并根據(jù)每一個所述數(shù)據(jù)密集型并行任務分別對應的內(nèi)存資源申請信息、IO資源申請信息、CPU資源申請信息以及當前數(shù)據(jù)密集型并行任務對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重,將每一個所述數(shù)據(jù)密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點。
優(yōu)選地,
所述第二解析模塊,進一步用于在當前計算過程不可被解析為至少兩個并行任務時,解析當前計算過程,以確定當前計算過程對應的計算量、數(shù)據(jù)量以及算法復雜度;
所述確定模塊,進一步用于根據(jù)當前計算過程對應的計算量、數(shù)據(jù)量以及算法復雜度確定當前計算過程的類型為數(shù)據(jù)密集型或計算密集型;
所述任務處理模塊,進一步用于在當前計算過程的類型為數(shù)據(jù)密集型時,將當前計算過程分配給所述至少一個存儲優(yōu)先型計算節(jié)點;或,在當前計算過程的類型為計算密集型時,將當前計算過程分配給所述至少一個計算優(yōu)先型計算節(jié)點。
本發(fā)明實施例提供了一種任務分配方法及裝置,在該方法中,首先獲取外部分布式計算模型中每一個計算節(jié)點分別對應的資源信息,以根據(jù)獲取的資源信息將每一個計算節(jié)點分別確定為計算優(yōu)先型計算節(jié)點或存儲優(yōu)先型計算節(jié)點,在獲取目標任務并將其拆分為具備時間順序的多個計算過程之后,即可按順序?qū)⒖刹鸱值挠嬎氵^程拆分為多個可并行執(zhí)行的并行任務,進而確定每一個并行任務的屬性信息,根據(jù)當前并行任務的屬性信息將當前并行任務確定為數(shù)據(jù)密集型并行任務或計算密集型并行任務,之后,則將每一個計算密集型并行任務分別分配給計算優(yōu)先型計算節(jié)點,并將每一個數(shù)據(jù)密集型并行任務分別分配給存儲優(yōu)先型計算節(jié)點;綜上可見,通過將計算密集型任務分配給計算性能較好的計算優(yōu)先型計算節(jié)點,并將數(shù)據(jù)密集型任務分配給存儲性能較好的存儲優(yōu)先型計算節(jié)點,避免分布式計算模型中的計算節(jié)點因不能滿足分配到的并行任務的計算需求或存儲需求而頻繁kill及重啟并行任務,可減小目標計算任務的計算時長。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一實施例提供的一種任務分配方法的流程圖;
圖2是本發(fā)明一實施例提供的另一種任務分配方法的流程圖;
圖3是本發(fā)明一實施例提供的一種任務分配裝置的結(jié)構(gòu)示意圖;
圖4是本發(fā)明一實施例提供的另一種任務分配裝置的結(jié)構(gòu)示意圖;
圖5是本發(fā)明一實施例提供的又一種任務分配裝置的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例,基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
如圖1所示,本發(fā)明實施例提供了一種任務分配方法,包括:
S1:獲取外部分布式計算模型中每一個計算節(jié)點分別對應的資源信息,根據(jù)每一個計算節(jié)點分別對應的資源信息將當前計算節(jié)點確定為計算優(yōu)先型計算節(jié)點或存儲優(yōu)先型計算節(jié)點;
S2:獲取目標計算任務,將所述目標計算任務解析為具備時間順序的至少兩個計算過程;
S3:按順序解析所述至少兩個計算過程,在當前計算過程可以被解析為至少兩個并行任務時,將當前計算過程解析為至少兩個并行任務;
S4:解析每一個所述并行任務,以確定每一個所述并行任務分別對應的屬性信息;
S5:根據(jù)每一個所述并行任務分別對應的屬性信息,將當前并行任務確定為數(shù)據(jù)密集型并行任務或計算密集型并行任務;
S6:將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并將每一個所述數(shù)據(jù)密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點,以使分配到數(shù)據(jù)密集型并行任務的至少一個存儲優(yōu)先型計算節(jié)點以及分配到計算密集型并行任務的至少一個計算優(yōu)先型計算節(jié)點分別執(zhí)行對應的并行任務。
本發(fā)明上述實施例中,首先獲取外部分布式計算模型中每一個計算節(jié)點分別對應的資源信息,以根據(jù)獲取的資源信息將每一個計算節(jié)點分別確定為計算優(yōu)先型計算節(jié)點或存儲優(yōu)先型計算節(jié)點,在獲取目標任務并將其拆分為具備時間順序的多個計算過程之后,即可按順序?qū)⒖刹鸱值挠嬎氵^程拆分為多個可并行執(zhí)行的并行任務,進而確定每一個并行任務的屬性信息,根據(jù)當前并行任務的屬性信息將當前并行任務確定為數(shù)據(jù)密集型并行任務或計算密集型并行任務,之后,則將每一個計算密集型并行任務分別分配給計算優(yōu)先型計算節(jié)點,并將每一個數(shù)據(jù)密集型并行任務分別分配給存儲優(yōu)先型計算節(jié)點;綜上可見,通過將計算密集型任務分配給計算性能較好的計算優(yōu)先型計算節(jié)點,并將數(shù)據(jù)密集型任務分配給存儲性能較好的存儲優(yōu)先型計算節(jié)點,避免分布式計算模型中的計算節(jié)點因不能滿足分配到的并行任務的計算需求或存儲需求而頻繁kill及重啟并行任務,可減小目標計算任務的計算時長。
具體地,本發(fā)明一個實施例中,根據(jù)分布式計算模型中每一個計算節(jié)點分別對應的資源信息將當前計算節(jié)點確定為存儲優(yōu)先型計算節(jié)點或計算優(yōu)先型計算節(jié)點時,如果當前計算節(jié)點對應的資源信息反應出CPU效能相對于硬盤、內(nèi)存的效能較高,當前計算節(jié)點在執(zhí)行計算任務時,大部分的狀況下應當是CPU在等待硬盤及內(nèi)存的讀、寫,則可將當前計算節(jié)點確定為計算優(yōu)先型計算節(jié)點;反之,如果當前計算節(jié)點對應的資源信息反應出CPU效能相對于硬盤、內(nèi)存的效能較低,當前計算節(jié)點在執(zhí)行計算任務時,大部分的狀況下應當是CPU占用率在100%,硬盤及內(nèi)存的讀、寫在極短的時間內(nèi)即可完成而出現(xiàn)IO空閑,則可將當前計算節(jié)點確定為存儲優(yōu)先型計算節(jié)點。
進一步的,為了方便對并行任務的任務類型進行確定,以及確定同一個計算過程下的多個并行任務是否存在一個或多個并行任務發(fā)生數(shù)據(jù)傾斜,本發(fā)明一個實施例中,所述解析每一個所述并行任務,以確定每一個所述并行任務分別對應的屬性信息,包括:解析每一個所述并行任務,以確定每一個所述并行任務分別對應的計算量、數(shù)據(jù)量以及算法復雜度。
本發(fā)明上述實施例中,在確定出同一個計算過程下的多個并行任務分別對應的計算量、數(shù)據(jù)量以及算法復雜度之后,如果存在至少一個目標并行任務對應的計算量、數(shù)據(jù)量或算法復雜度遠高于其他并行任務相對應的計算量、數(shù)據(jù)量或算法復雜度時,則可確定當前目標并行任務出現(xiàn)數(shù)據(jù)傾斜。
進一步的,為了節(jié)約計算資源,本發(fā)明一個實施例中,還包括:根據(jù)每一個所述并行任務分別對應的計算量、數(shù)據(jù)量以及算法復雜度確定每一個所述并行任務分別對應的資源需求信息;
所述將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并將每一個所述數(shù)據(jù)密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點,包括:根據(jù)每一個所述計算密集型并行任務分別對應的資源需求信息,將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并根據(jù)每一個所述數(shù)據(jù)密集型并行任務分別對應的資源需求信息,將每一個所述計算密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點。
本發(fā)明上述實施例中,根據(jù)并行任務對應的計算量、數(shù)據(jù)量以及算法復雜度,可對計算節(jié)點在執(zhí)行當前并行任務時需要的資源大小(比如,內(nèi)存資源大小、IO資源大小、硬盤資源大小以及CPU資源大小)進行量化,對應的計算節(jié)點在執(zhí)行當前并行任務時,可根據(jù)量化的資源大小配置虛擬機,以通過該虛擬機來執(zhí)行當前并行任務,避免并行任務耗費當前計算節(jié)點的大量資源。
應當理解的是,在量化的資源不能滿足執(zhí)行當前并行任務時,可對當前計算節(jié)點中的虛擬機進行動態(tài)擴容,不必在當前計算節(jié)點中kill掉運行的并行任務。
進一步的,由于將同一個計算過程拆分為多個可并行執(zhí)行的并行任務時,可能導致同一個計算過程下的一個或多個并行任務出現(xiàn)數(shù)據(jù)傾斜,比如,因該計算過程中key值分布不均勻,導致該計算過程中出現(xiàn)單點數(shù)據(jù)過度集中,該計算過程下的一個或多個并行任務對應的數(shù)據(jù)量過大,同時,并行任務中也可能存在部分不能套用分布式計算模型的復雜度較高的挖掘算法,也可能導致并行任務的執(zhí)行時間過長,因此,為了方便對存在數(shù)據(jù)傾斜的并行任務進行優(yōu)先處理,同時方便為其分配更多的計算資源,盡可能的減小當前計算過程對應的計算時長,本發(fā)明一個實施例中,所述資源需求信息至少包括如下三種申請信息:內(nèi)存資源申請信息、IO資源申請信息及CPU資源申請信息;還包括:
A1:將每一個所述并行任務分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重均置為1;
A2:根據(jù)每一個所述并行任務分別對應的計算量、數(shù)據(jù)量以及算法復雜度,確定是否存在至少一個目標并行任務出現(xiàn)數(shù)據(jù)傾斜,如果是,則將所述目標并行任務對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重均加1,然后執(zhí)行步驟A3;否則,執(zhí)行步驟A3;
A3:將每一個所述數(shù)據(jù)密集型并行任務分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重加1,以及將每一個所述計算密集型并行任務分別對應的CPU資源申請信息的權(quán)重加1;
所述根據(jù)每一個所述計算密集型并行任務分別對應的資源需求信息,將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并根據(jù)每一個所述數(shù)據(jù)密集型并行任務分別對應的資源需求信息,將每一個所述數(shù)據(jù)密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點,包括:根據(jù)每一個所述計算密集型并行任務分別對應的內(nèi)存資源申請信息、IO資源申請信息、CPU資源申請信息以及當前計算密集型并行任務對應的CPU資源申請信息的權(quán)重,將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并根據(jù)每一個所述數(shù)據(jù)密集型并行任務分別對應的內(nèi)存資源申請信息、IO資源申請信息、CPU資源申請信息以及當前數(shù)據(jù)密集型并行任務對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重,將每一個所述數(shù)據(jù)密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點。
舉例來說,當目標計算任務被拆分為具備時間順序的計算過程job1和計算過程job2,計算過程job1被拆分為task1、task2、task3和task4等四個并行任務,且task1和task2分別對應的計算量相對較高,而數(shù)據(jù)量相對較少,task3和task4分別對應的計算量相對較少,而數(shù)據(jù)量相對較高時,即task1和task2分別被確定為計算密集型并行任務,而task3和task4分別被確定為數(shù)據(jù)密集型并行任務時;首先將task1、task2、task3和task4等四個并行任務分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重均置為1,當task1對應的計算量遠高于task2、task3和task4時、task1對應的數(shù)據(jù)量遠高于task2、task3和task4時、或者task1對應的算法復雜度遠高于task2、task3和task4時,則可對task1對應內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息均進行加1處理;之后,將task3和task4分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重加1,以及將task1和tsk2分別對應的CPU資源申請信息的權(quán)重加1;如此,使得task1、task2、task3和task4分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重為:task1——(2,2,3);task2——(1,1,2);task3——(2,2,1);task4——(2,2,1);如此,在將task1、task2、task3和task4等四個并行任務分配給計算節(jié)點的過程中,則可結(jié)合task1、task2、task3和task4分別對應的內(nèi)存資源申請信息、IO資源申請信息、CPU資源申請信息,優(yōu)先分配task1至性能最優(yōu)的計算優(yōu)先型計算節(jié)點,然后將task2分配至相應的計算優(yōu)先型計算節(jié)點,以及將task3和task4分別分配至相應的存儲優(yōu)先型計算節(jié)點。
綜上所述,通過將存在數(shù)據(jù)傾斜的并行任務優(yōu)先分配至性能最優(yōu)的相應計算優(yōu)先型計算節(jié)點或存儲優(yōu)先型計算節(jié)點,使得存在數(shù)據(jù)傾斜的并行任務可在多個并行任務中被分布式計算模型中相應計算節(jié)點首先開始處理的同時,對應的計算節(jié)點還可以給予存在數(shù)據(jù)傾斜的并行任務更多的資源支持。
進一步的,本發(fā)明一個實施例中,還包括:
在當前計算過程不可被解析為至少兩個并行任務時,解析當前計算過程,以確定當前計算過程對應的計算量、數(shù)據(jù)量以及算法復雜度;
根據(jù)當前計算過程對應的計算量、數(shù)據(jù)量以及算法復雜度確定當前計算過程的類型為數(shù)據(jù)密集型或計算密集型;
在當前計算過程的類型為數(shù)據(jù)密集型時,將當前計算過程分配給所述至少一個存儲優(yōu)先型計算節(jié)點;或,在當前計算過程的類型為計算密集型時,將當前計算過程分配給所述至少一個計算優(yōu)先型計算節(jié)點。
本發(fā)明上述實施例中,針對不能拆分為多個并行任務的計算過程,首先對其進行解析以確定其對應的計算量、數(shù)據(jù)量以及算法復雜度,并根據(jù)當前計算過程對應的計算量、數(shù)據(jù)量以及算法復雜度確定當前計算過程的類型為數(shù)據(jù)密集型或計算密集型,有針對性的根據(jù)當前計算過程的類型將其分配至對應類型的計算節(jié)點,使得對應類型的計算節(jié)點能夠為計算過程給予足夠的資源支持,避免計算節(jié)點因不能滿足分配到的并行任務的計算需求或存儲需求而頻繁kill及重啟并行任務,進一步減小目標計算任務的計算時長。
為了更清楚的說明本發(fā)明提供的技術(shù)方案的目的及優(yōu)點,如圖2所示,本發(fā)明實施例提供了另一種任務分配方法,可以包括如下各個步驟:
步驟201,獲取外部分布式計算模型中計算節(jié)點A、B、C、D分別對應的資源信息。
步驟202,根據(jù)計算節(jié)點A、B、C、D分別對應的資源信息將計算節(jié)點A、B、C、D分別確定為計算優(yōu)先型計算節(jié)點或存儲優(yōu)先型計算節(jié)點。
舉例來說,根據(jù)計算節(jié)點A、B、C、D分別對應的資源信息將計算節(jié)點A、B、C、D分別確定為數(shù)據(jù)優(yōu)先型計算節(jié)點或計算優(yōu)先型計算節(jié)點時,如果計算節(jié)點A和B分別對應的資源信息反應出CPU效能相對于硬盤、內(nèi)存的效能較高,計算節(jié)點A和B在執(zhí)行計算任務時,大部分的狀況下應當是CPU在等待硬盤及內(nèi)存的讀寫,則可將計算節(jié)點A和B確定為計算優(yōu)先型計算節(jié)點;相反的,如果計算節(jié)點C和D對應的資源信息反應出CPU效能相對于硬盤、內(nèi)存的效能較低,計算節(jié)點C和D在執(zhí)行計算任務時,大部分的狀況下應當是CPU占用率達到100%,硬盤及內(nèi)存的讀寫在極短的時間內(nèi)即可完成而出現(xiàn)IO空閑,則可將計算節(jié)點C和D確定為存儲優(yōu)先型計算節(jié)點。
步驟203,獲取目標計算任務Application。
步驟204,將Application解析為具備時間順序的兩個計算過程job1和job2。
步驟205,將job1解析為并行任務tast1、tast2、tast3和tast4。
步驟206,分別解析tast1、tast2、tast3和tast4,以確定tast1、tast2、tast3 和tast4分別對應的計算量、數(shù)據(jù)量及算法復雜度。
步驟207,根據(jù)tast1、tast2、tast3和tast4分別對應的計算量、數(shù)據(jù)量及算法復雜度,將tast1、tast2、tast3和tast4分別確定為數(shù)據(jù)密集型并行任務或計算密集型并行任務。
舉例來說,當task1和task2分別對應的計算量相對較高,而數(shù)據(jù)量相對較少,task3和task4分別對應的計算量相對較少,而數(shù)據(jù)量相對較高時,則可將task1和task2分別被確定為計算密集型并行任務,以及將task3和task4分別被確定為數(shù)據(jù)密集型并行任務。
步驟208,根據(jù)tast1、tast2、tast3以及tast4分別對應的計算量、數(shù)據(jù)量及算法復雜度,確定tast1、tast2、tast3以及tast4分別對應的內(nèi)存資源申請信息、IO資源申請信息及CPU資源申請信息。
這里,即實現(xiàn)預先對相應計算節(jié)點在執(zhí)行對應的并行任務時需要的資源進行量化,比如量化當前并行任務對應的內(nèi)存資源大小、IO資源大小、硬盤資源大小以及CPU資源大小等,對應的計算節(jié)點在執(zhí)行當前并行任務時,可根據(jù)量化的資源大小配置虛擬機,以通過該虛擬機來執(zhí)行當前并行任務,避免并行任務耗費當前計算節(jié)點的大量資源。
步驟209,將tast1、tast2、tast3和tast4分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重均置為1。
步驟210,根據(jù)tast1、tast2、tast3和tast4分別對應的計算量、數(shù)據(jù)量及算法復雜度確定tast1、tast2、tast3和tast4中是否存在目標并行任務出現(xiàn)數(shù)據(jù)傾斜,如果是,則執(zhí)行步驟211;否則,執(zhí)行步驟212。
步驟211,將目標并行任務task1對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重均加1。
舉例來說,在步驟209至步驟211中,步驟209首先將task1、task2、task3和task4等四個并行任務分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重均置為1,當步驟210中判斷出task1對應的計算量遠高于task2、task3和task4時、task1對應的數(shù)據(jù)量遠高于task2、task3和task4時、或者task1對應的算法復雜度遠高于task2、task3和task4時,則可通過步驟211對task1對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息均進行加1處理。
步驟212,將task3和task4分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重加1,以及將task1和task2分別對應的CPU資源申請信息的權(quán)重加1。
本發(fā)明實施例中,通過步驟209至步驟212對task1、task2、task3和task4分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重進行相應的配置及修正處理之后,task1、task2、task3和task4分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重為:
task1——(2,2,3);
task2——(1,1,2);
task3——(2,2,1);
task4——(2,2,1)。
步驟213,根據(jù)task1、task2、task3個task4分別對應的內(nèi)存資源申請信息、IO資源申請信息、CPU資源申請信息,以及task1和task2分別對應的CPU資源申請信息的權(quán)重,將task1分配給計算節(jié)點A,將task2分配給計算節(jié)點A或B,并將task3和task4分配給計算節(jié)點C和/或計算節(jié)點D。
通過上述各個步驟,一方面,針對同一個計算過程下的多個并行任務,將計算密集型任務tast1和tast2分配給計算性能較好的計算優(yōu)先型計算節(jié)點A和B,并將數(shù)據(jù)密集型任務tast3和tast4分配給存儲性能較好的存儲優(yōu)先型計算節(jié)點C和D,避免分布式計算模型中的計算節(jié)點因不能滿足分配到的并行任務的計算需求或存儲需求而頻繁kill及重啟并行任務,可減小目標計算任務的計算時長;另一方面,針對計算密集型任務tast1和tast2,可將存在數(shù)據(jù)傾斜的目標并行任務tast1優(yōu)先分配給計算性能最好的計算優(yōu)先型計算節(jié)點A,計算節(jié)點A能夠為tast1給予足夠的支援支持,提高tast1的執(zhí)行速度,減少job1的計算時長;再一方面,可根據(jù)量化的內(nèi)存資源申請信息、IO資源申請信息以及CPU資源申請信息將tast1、tast2、tast3和tast4選擇性分配至對應的計算節(jié)點,計算節(jié)點在執(zhí)行當前并行任務時,可根據(jù)量化的資源配置虛擬機,以通過該虛擬機來執(zhí)行當前并行任務,避免并行任務耗費當前計算節(jié)點的大量資源。
步驟214,解析job2,以確定job2對應的計算量、數(shù)據(jù)量及算法復雜度。
步驟215,根據(jù)job2對應的計算量、數(shù)據(jù)量及算法復雜度確定job2的類型為計算優(yōu)先型或存儲優(yōu)先型。
步驟216,在job2的類型為數(shù)據(jù)密集型時,將job2分配給計算節(jié)點C;在job2的類型為計算密集型時,將job2分配給計算節(jié)點A。
如圖3所示,本發(fā)明實施例提供了一種任務分配裝置,包括:
節(jié)點管理模塊301,用于獲取外部分布式計算模型中每一個計算節(jié)點分別對應的資源信息,根據(jù)每一個計算節(jié)點分別對應的資源信息將當前計算節(jié)點確定為計算優(yōu)先型計算節(jié)點或存儲優(yōu)先型計算節(jié)點;
獲取模塊302,用于獲取目標計算任務,將所述目標計算任務解析為具備時間順序的至少兩個計算過程;
第一解析模塊303,用于按順序解析所述至少兩個計算過程,在當前計算過程可以被解析為至少兩個并行任務時,將當前計算過程解析為至少兩個并行任務;
第二解析模塊304,用于解析每一個所述并行任務,以確定每一個所述并行任務分別對應的屬性信息;
確定模塊305,用于根據(jù)每一個所述并行任務分別對應的屬性信息,將當前并行任務確定為數(shù)據(jù)密集型并行任務或計算密集型并行任務;
任務處理模塊306,用于將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并將每一個所述數(shù)據(jù)密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點。
進一步的,為了方便對并行任務的任務類型進行確定,以及確定同一個計算過程下的多個并行任務是否存在一個或多個并行任務發(fā)生數(shù)據(jù)傾斜,本發(fā)明一個實施例中,所述第二解析模塊304,用于解析每一個所述并行任務,以確定每一個所述并行任務分別對應的計算量、數(shù)據(jù)量以及算法復雜度。
進一步的,為了節(jié)約資源,如圖4所示,本發(fā)明一個實施例中,還包括:
量化處理模塊401,用于根據(jù)每一個所述并行任務分別對應的計算量、數(shù)據(jù)量以及算法復雜度確定每一個所述并行任務分別對應的資源需求信息;
所述任務處理模塊306,用于根據(jù)每一個所述計算密集型并行任務分別對應的資源需求信息,將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并根據(jù)每一個所述數(shù)據(jù)密集型并行任務分別對應的資源需求信息,將每一個所述計算密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點。
進一步的,為了方便對存在數(shù)據(jù)傾斜的并行任務進行優(yōu)先處理,同時方便為其分配更多的計算資源,盡可能的減小當前計算過程對應的計算時長,如圖5所示,本發(fā)明一個實施例中,還包括:權(quán)重配置模塊501、判斷模塊502、第一修正模塊503以及第二修正模塊504;其中,
所述權(quán)重配置模塊501,用于將每一個所述并行任務分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重均置為1;
判斷模塊502,用于根據(jù)每一個所述并行任務分別對應的計算量、數(shù)據(jù)量以及算法復雜度,確定是否存在至少一個目標并行任務出現(xiàn)數(shù)據(jù)傾斜,如果是,則觸發(fā)所述第一修正模塊503;否則,觸發(fā)所述第二修正模塊504;
所述第一修正模塊503,用于在所述判斷模塊502的觸發(fā)下,將所述目標并行任務對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重以及CPU資源申請信息的權(quán)重均加1,然后觸發(fā)所述第二修正模塊504;
所述第二修正模塊504,用于在所述判斷模塊502或所述第一修正模塊501的觸發(fā)下,將每一個所述數(shù)據(jù)密集型并行任務分別對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重加1,以及將每一個所述計算密集型并行任務分別對應的CPU資源申請信息的權(quán)重加1;
所述任務處理模塊306,用于用于根據(jù)每一個所述計算密集型并行任務分別對應的內(nèi)存資源申請信息、IO資源申請信息、CPU資源申請信息以及當前計算密集型并行任務對應的CPU資源申請信息的權(quán)重,將每一個所述計算密集型并行任務分別分配給所述至少一個計算優(yōu)先型計算節(jié)點,并根據(jù)每一個所述數(shù)據(jù)密集型并行任務分別對應的內(nèi)存資源申請信息、IO資源申請信息、CPU資源申請信息以及當前數(shù)據(jù)密集型并行任務對應的內(nèi)存資源申請信息的權(quán)重、IO資源申請信息的權(quán)重,將每一個所述數(shù)據(jù)密集型并行任務分別分配給所述至少一個存儲優(yōu)先型計算節(jié)點。
本發(fā)明一個實施例中,所述第二解析模塊304,進一步用于在當前計算過程不可被解析為至少兩個并行任務時,解析當前計算過程,以確定當前計算過程對應的計算量、數(shù)據(jù)量以及算法復雜度;
所述確定模塊305,進一步用于根據(jù)當前計算過程對應的計算量、數(shù)據(jù)量以及算法復雜度確定當前計算過程的類型為數(shù)據(jù)密集型或計算密集型;
所述任務處理模塊306,進一步用于在當前計算過程的類型為數(shù)據(jù)密集型時,將當前計算過程分配給所述至少一個存儲優(yōu)先型計算節(jié)點;或,在當前計算過程的類型為計算密集型時,將當前計算過程分配給所述至少一個計算優(yōu)先型計算節(jié)點。
上述裝置內(nèi)的各單元之間的信息交互、執(zhí)行過程等內(nèi)容,由于與本發(fā)明方法實施例基于同一構(gòu)思,具體內(nèi)容可參見本發(fā)明方法實施例中的敘述,此處不再贅述。
綜上所述,本發(fā)明各個實施例至少具有如下有益效果:
1、本發(fā)明一實施例中,首先獲取外部分布式計算模型中每一個計算節(jié)點分別對應的資源信息,以根據(jù)獲取的資源信息將每一個計算節(jié)點分別確定為計算優(yōu)先型計算節(jié)點或存儲優(yōu)先型計算節(jié)點,在獲取目標任務并將其拆分為具備時間順序的多個計算過程之后,即可按順序?qū)⒖刹鸱值挠嬎氵^程拆分為多個可并行執(zhí)行的并行任務,進而確定每一個并行任務的屬性信息,根據(jù)當前并行任務的屬性信息將當前并行任務確定為數(shù)據(jù)密集型并行任務或計算密集型并行任務,之后,則將每一個計算密集型并行任務分別分配給計算優(yōu)先型計算節(jié)點,并將每一個數(shù)據(jù)密集型并行任務分別分配給存儲優(yōu)先型計算節(jié)點;綜上可見,通過將計算密集型任務分配給計算性能較好的計算優(yōu)先型計算節(jié)點,并將數(shù)據(jù)密集型任務分配給存儲性能較好的存儲優(yōu)先型計算節(jié)點,避免分布式計算模型中的計算節(jié)點因不能滿足分配到的并行任務的計算需求或存儲需求而頻繁kill及重啟并行任務,可減小目標計算任務的計算時長。
2、本發(fā)明一實施例中,根據(jù)并行任務對應的計算量、數(shù)據(jù)量以及算法復雜度,可對計算節(jié)點在執(zhí)行當前并行任務時需要的資源大小(比如,內(nèi)存資源大小、IO資源大小、硬盤資源大小以及CPU資源大小)進行量化,對應的計算節(jié)點在執(zhí)行當前并行任務時,可根據(jù)量化的資源大小配置虛擬機,以通過該虛擬機來執(zhí)行當前并行任務,避免并行任務耗費當前計算節(jié)點的大量資源。
3、本發(fā)明一實施例中,針對存在數(shù)據(jù)傾斜的并行任務,對其行優(yōu)先處理,根據(jù)當前并行任務所述的計算類型,優(yōu)先分配至性能最優(yōu)的相應計算優(yōu)先型計算節(jié)點或存儲優(yōu)先型計算節(jié)點,使得存在數(shù)據(jù)傾斜的并行任務可在多個并行任務中被分布式計算模型中相應計算節(jié)點首先開始處理的同時,對應的計算節(jié)點還可以給予存在數(shù)據(jù)傾斜的并行任務更多的資源支持,盡可能的減小當前計算過程對應的計算時長。
需要說明的是,在本文中,諸如第一和第二之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個〃·····”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同因素。
最后需要說明的是:以上所述僅為本發(fā)明的較佳實施例,僅用于說明本發(fā)明的技術(shù)方案,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內(nèi)。