數(shù)據(jù)處理作業(yè)調(diào)度方法、裝置及系統(tǒng)的制作方法
【專利摘要】本發(fā)明實(shí)施例提供一種數(shù)據(jù)處理作業(yè)調(diào)度方法、裝置及系統(tǒng),所述方法包括:獲取預(yù)先配置的數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系;初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為不可運(yùn)行,生成第一更新指令;響應(yīng)所述第一更新指令,將不存在前提作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行;調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn)行,根據(jù)運(yùn)行結(jié)果更新所述作業(yè)的運(yùn)行狀態(tài)為運(yùn)行成功或運(yùn)行失敗,并生成第二更新指令;響應(yīng)所述第二更新指令,將存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行。本發(fā)明實(shí)施例減少作業(yè)調(diào)度時(shí)間,提高了作業(yè)調(diào)度效率。
【專利說(shuō)明】
數(shù)據(jù)處理作業(yè)調(diào)度方法、裝置及系統(tǒng)
技術(shù)領(lǐng)域
[0001] 本發(fā)明實(shí)施例涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)處理作業(yè)調(diào)度方法、裝置 及系統(tǒng)。
【背景技術(shù)】
[0002] 在進(jìn)行數(shù)據(jù)處理的流程中,特別是大數(shù)據(jù)領(lǐng)域比較復(fù)雜的數(shù)據(jù)處理流程中,通常 是將數(shù)據(jù)處理流程劃分為若干作業(yè)對(duì)數(shù)據(jù)進(jìn)行處理。
[0003] 這些作業(yè)之間有的需要依賴其他作業(yè)的正確運(yùn)行結(jié)果才能夠運(yùn)行,有的作業(yè)之間 并無(wú)這種依賴關(guān)系,可以并發(fā)運(yùn)行。而整個(gè)數(shù)據(jù)處理流程的全部作業(yè)均運(yùn)行成功,數(shù)據(jù)處理 流程才會(huì)認(rèn)為運(yùn)行成功,如果一個(gè)作業(yè)依賴的前提作業(yè)還未運(yùn)行或運(yùn)行失敗,該作業(yè)即開(kāi) 始執(zhí)行,則會(huì)造成數(shù)據(jù)錯(cuò)誤,數(shù)據(jù)處理流程也會(huì)認(rèn)為運(yùn)行失敗,因此需要對(duì)作業(yè)進(jìn)行有效的 調(diào)度。
[0004] 現(xiàn)有技術(shù)的一種數(shù)據(jù)處理作業(yè)調(diào)度方法中,是由技術(shù)人員根據(jù)數(shù)據(jù)處理流程中各 個(gè)作業(yè)之間的依賴關(guān)系,首先將各個(gè)作業(yè)劃分多個(gè)執(zhí)行階段。根據(jù)依賴關(guān)系可知,這些執(zhí)行 階段之間存在執(zhí)行順序。在進(jìn)行作業(yè)調(diào)度時(shí),即按照?qǐng)?zhí)行階段的執(zhí)行順序,分階段的進(jìn)行作 業(yè)調(diào)度,每一個(gè)階段的作業(yè)全部運(yùn)行成功之后,再調(diào)度下一個(gè)階段中的作業(yè)執(zhí)行。比如,假 設(shè)數(shù)據(jù)處理流程包括作業(yè)A、B、C、D、E,作業(yè)A為數(shù)據(jù)處理流程中的初始作業(yè),作業(yè)E為最 終的作業(yè),作業(yè)B和作業(yè)C分別依賴作業(yè)A的運(yùn)行結(jié)果,作業(yè)D依賴作業(yè)B的運(yùn)行結(jié)果,作 業(yè)E依賴作業(yè)C和作業(yè)D的執(zhí)行結(jié)果。因此根據(jù)各個(gè)作業(yè)之間的依賴關(guān)系,劃分的執(zhí)行階 段為:第一個(gè)執(zhí)行階段包括作業(yè)A ;由于作業(yè)C分別與作業(yè)B和作業(yè)D不存在依賴關(guān)系,可 以放在一個(gè)執(zhí)行階段并發(fā)執(zhí)行,而作業(yè)B和作業(yè)D之間存在依賴關(guān)系,不能放在一個(gè)執(zhí)行階 段執(zhí)行,因此第二執(zhí)行階段只包括作業(yè)B和作業(yè)C,作業(yè)D劃分為第三執(zhí)行階段;第四執(zhí)行 階段即包括作業(yè)E。
[0005] 由上述描述過(guò)程可知,現(xiàn)有的數(shù)據(jù)處理作業(yè)調(diào)度方法,雖然可以保證作業(yè)有序執(zhí) 行,不會(huì)造成數(shù)據(jù)錯(cuò)誤,但是分階段執(zhí)行這種方式,使得作業(yè)調(diào)度效率較低,比如上述假設(shè) 中,作業(yè)B和作業(yè)D之間存在依賴關(guān)系,作業(yè)B運(yùn)行成功之后,作業(yè)D即可以運(yùn)行了,但是按 照分階段執(zhí)行的方式,作業(yè)C若未運(yùn)行完成,作業(yè)D仍無(wú)法運(yùn)行,這就會(huì)導(dǎo)致作業(yè)調(diào)度時(shí)間 較長(zhǎng),降低了作業(yè)調(diào)度效率。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明實(shí)施例提供一種數(shù)據(jù)處理作業(yè)調(diào)度方法、裝置及系統(tǒng),用以解決現(xiàn)有技術(shù) 中作業(yè)調(diào)度時(shí)間長(zhǎng),作業(yè)調(diào)度效率低的技術(shù)問(wèn)題。
[0007] 本發(fā)明實(shí)施例提供一種數(shù)據(jù)處理作業(yè)調(diào)度方法,包括:
[0008] 獲取預(yù)先配置的數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系;
[0009] 初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為不可運(yùn)行,生成第一更新指令;
[0010] 響應(yīng)所述第一更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將 不存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行;
[0011] 調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn)行,根據(jù)運(yùn)行結(jié)果更新所述作業(yè)的運(yùn)行狀態(tài)為 運(yùn)行成功或運(yùn)行失敗,并生成第二更新指令;
[0012] 響應(yīng)所述第二更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將 存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以 運(yùn)行。
[0013] 本發(fā)明實(shí)施例提供一種數(shù)據(jù)處理作業(yè)調(diào)度裝置,包括:
[0014] 作業(yè)調(diào)度模塊,用于初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為不可運(yùn)行,生 成第一更新指令;調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn)行,根據(jù)運(yùn)行結(jié)果更新所述作業(yè)的運(yùn) 行狀態(tài)為運(yùn)行成功或運(yùn)行失敗,并生成第二更新指令;
[0015] 所述規(guī)則確定模塊,用于獲取預(yù)先配置的數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān) 系;響應(yīng)所述第一更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將不存在 前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行;響應(yīng)所述第二更新指令,按照所述數(shù)據(jù)處理 流程的各個(gè)作業(yè)之間的依賴關(guān)系,將存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行 成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行。
[0016] 本發(fā)明提供一種數(shù)據(jù)處理作業(yè)調(diào)度系統(tǒng),包括至少一個(gè)作業(yè)調(diào)度節(jié)點(diǎn)、至少一個(gè) 規(guī)則推理節(jié)點(diǎn)以及多個(gè)計(jì)算節(jié)點(diǎn);
[0017] 任一個(gè)作業(yè)調(diào)度節(jié)點(diǎn),用于初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為不可運(yùn) 行,生成第一更新指令;將運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)提供給所述多個(gè)計(jì)算節(jié)點(diǎn),由至少一 個(gè)計(jì)算節(jié)點(diǎn)運(yùn)行至少一個(gè)運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè);根據(jù)運(yùn)行結(jié)果更新所述作業(yè)的運(yùn)行 狀態(tài)為運(yùn)行成功或運(yùn)行失敗,并生成第二更新指令;
[0018] 任一個(gè)規(guī)則推理節(jié)點(diǎn),用于獲取預(yù)先配置的數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴 關(guān)系;響應(yīng)所述第一更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將不存 在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行;響應(yīng)所述第二更新指令,按照所述數(shù)據(jù)處 理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn) 行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行;
[0019] 所述計(jì)算節(jié)點(diǎn),用于運(yùn)行所述作業(yè)調(diào)度節(jié)點(diǎn)提供的運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)。
[0020] 本發(fā)明實(shí)施例提供的數(shù)據(jù)處理作業(yè)調(diào)度方法、裝置及系統(tǒng),通過(guò)規(guī)則推導(dǎo)的方式, 根據(jù)作業(yè)之間依賴關(guān)系,可以更新各個(gè)作業(yè)的運(yùn)行狀態(tài),從而存在運(yùn)行狀態(tài)為可以運(yùn)行的 作業(yè)時(shí),即可以該調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn)行。既可以保證存在依賴關(guān)系的作業(yè) 能夠有序執(zhí)行,不會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)誤,且當(dāng)前作業(yè)在其前提作業(yè)運(yùn)行成功之后,即可以運(yùn)行, 無(wú)需等待,減少了作業(yè)調(diào)度時(shí)間,同時(shí)無(wú)依賴關(guān)系的作業(yè)可以并發(fā)執(zhí)行,進(jìn)一步減少了作業(yè) 調(diào)度時(shí)間,提高了作業(yè)調(diào)度的效率。
【附圖說(shuō)明】
[0021] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā) 明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根 據(jù)這些附圖獲得其他的附圖。
[0022] 圖1為本發(fā)明數(shù)據(jù)處理作業(yè)調(diào)度方法一實(shí)施例的流程圖;
[0023] 圖2為本發(fā)明提供的DAG(Directed Acyclic Graph,有向無(wú)環(huán)圖)的一種示意圖;
[0024] 圖3為本發(fā)明數(shù)據(jù)處理作業(yè)調(diào)度方法又一實(shí)施例流程圖;
[0025] 圖4為本發(fā)明數(shù)據(jù)處理作業(yè)調(diào)度裝置一實(shí)施例結(jié)構(gòu)示意圖;
[0026] 圖5為本發(fā)明數(shù)據(jù)處理作業(yè)調(diào)度裝置又一實(shí)施例結(jié)構(gòu)示意圖;
[0027] 圖6為本發(fā)明數(shù)據(jù)處理作業(yè)調(diào)度裝置又一實(shí)施例結(jié)構(gòu)示意圖;
[0028] 圖7為本發(fā)明數(shù)據(jù)處理作業(yè)調(diào)度系統(tǒng)一實(shí)施例結(jié)構(gòu)示意圖;
[0029] 圖8為本發(fā)明數(shù)據(jù)處理作業(yè)調(diào)度系統(tǒng)又一實(shí)施例結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0030] 為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例 中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是 本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員 在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0031] 正如【背景技術(shù)】中所述,現(xiàn)有技術(shù)中分階段的數(shù)據(jù)處理作業(yè)調(diào)度方法,為了保證作 業(yè)能夠有序執(zhí)行,在一個(gè)執(zhí)行階段中的作業(yè)未運(yùn)行成功時(shí),下一個(gè)執(zhí)行階段中的作業(yè)將無(wú) 法調(diào)度運(yùn)行,這就會(huì)導(dǎo)致作業(yè)調(diào)度時(shí)間較長(zhǎng),降低了作業(yè)調(diào)度效率。特別是當(dāng)數(shù)據(jù)處理流程 中作業(yè)較多,作業(yè)之間的依賴關(guān)系很復(fù)雜時(shí),作業(yè)調(diào)度效率將受到很大的影響,且由于執(zhí)行 階段需要人工來(lái)劃分,工作量較大,也會(huì)影響作業(yè)調(diào)度時(shí)間,且執(zhí)行階段劃分的準(zhǔn)確性也無(wú) 法完全保證。
[0032] 為了解決現(xiàn)有技術(shù)中存在的技術(shù)問(wèn)題,發(fā)明人經(jīng)過(guò)不斷的研究發(fā)現(xiàn),為了保證作 業(yè)調(diào)度時(shí)間,提高作業(yè)調(diào)度效率,作業(yè)有序執(zhí)行的同時(shí),就要減少作業(yè)等待執(zhí)行的時(shí)間。
[0033] 發(fā)明人進(jìn)一步發(fā)現(xiàn),為了減少作業(yè)等待執(zhí)行時(shí)間,又保證作業(yè)有序的執(zhí)行,可以將 無(wú)依賴關(guān)系的作業(yè)最大化的并行運(yùn)行,也即將無(wú)依賴關(guān)系的作業(yè)同時(shí)運(yùn)行,將會(huì)大大提高 作業(yè)調(diào)度效率,且可以充分的利用計(jì)算資源。
[0034] 因此,發(fā)明人基于這一創(chuàng)造性的思維,提出了本發(fā)明的技術(shù)方案:
[0035] 在本發(fā)明實(shí)施例中,首先將數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行初始化為不可運(yùn)行; 根據(jù)預(yù)先配置的作業(yè)之間依賴關(guān)系,再將不存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn) 行;從而根據(jù)作業(yè)的運(yùn)行狀態(tài),可以調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn)行,并根據(jù)運(yùn)行結(jié)果 更新所述作業(yè)的運(yùn)行狀態(tài)為運(yùn)行成功或運(yùn)行失??;根據(jù)作業(yè)之間的依賴關(guān)系,可以將存在 前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行。 采用根據(jù)各個(gè)作業(yè)的運(yùn)行狀態(tài)進(jìn)行調(diào)度的方式,不存在前提作業(yè)的作業(yè)首先運(yùn)行,每一個(gè) 作業(yè)在前提作業(yè)均運(yùn)行成功之后運(yùn)行,保證了作業(yè)能夠有序執(zhí)行;且當(dāng)前作業(yè)在其前提作 業(yè)運(yùn)行成功之后,即可以運(yùn)行,無(wú)需等待,減少了作業(yè)調(diào)度時(shí)間;且由于作業(yè)的前提作業(yè)均 運(yùn)行成功,作業(yè)即可以運(yùn)行,使得無(wú)依賴關(guān)系的作業(yè),可以最大化的并發(fā)運(yùn)行,進(jìn)一步減少 了作業(yè)調(diào)度時(shí)間,提高了作業(yè)調(diào)度的效率。同時(shí),作業(yè)的并發(fā)運(yùn)行,也使得計(jì)算資源也得到 了充分利用。
[0036] 且本發(fā)明實(shí)施例中,直接根據(jù)預(yù)先配置的數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān) 系進(jìn)行調(diào)度,無(wú)需由人工劃分為多個(gè)執(zhí)行階段,也節(jié)省了人工工作量,從而進(jìn)一步提高了作 業(yè)調(diào)度效率。
[0037] 下面結(jié)合附圖對(duì)本發(fā)明技術(shù)方案進(jìn)行詳細(xì)描述。
[0038] 圖1為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)處理作業(yè)調(diào)度方法一個(gè)實(shí)施例的流程圖,該 方法可以包括以下幾個(gè)步驟:
[0039] 101 :獲取預(yù)先配置的數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系。
[0040] 102 :初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為不可運(yùn)行,生成第一更新指 令。
[0041] 103:響應(yīng)所述第一更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān) 系,將不存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行。
[0042] 按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,可以確定出不存在前提作業(yè) 的作業(yè),因此通過(guò)響應(yīng)第一更新指令,可以將該不存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為 可以運(yùn)行。
[0043] 104:調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn)行,根據(jù)運(yùn)行結(jié)果更新所述作業(yè)的運(yùn)行狀 態(tài)為運(yùn)行成功或運(yùn)行失敗,并生成第二更新指令。
[0044] 105 :響應(yīng)所述第二更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān) 系,將存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為 可以運(yùn)行。
[0045] 按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,可以確定出存在前提作業(yè)的 作業(yè)。通過(guò)響應(yīng)第二更新指令,可以將存在前提作業(yè)的作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均 為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行。
[0046] -個(gè)數(shù)據(jù)處理流程中的作業(yè)之間存在依賴關(guān)系,根據(jù)作業(yè)之間的依賴關(guān)系,最終 會(huì)匯聚到一個(gè)作業(yè),即數(shù)據(jù)處理流程中最后一個(gè)作業(yè)。
[0047] 前提作業(yè)是指任一個(gè)作業(yè)需要依賴其運(yùn)行結(jié)果才能運(yùn)行的作業(yè)。例如作業(yè)B依賴 作業(yè)A的運(yùn)行結(jié)果,作業(yè)A即為作業(yè)B的依賴的前提作業(yè)。
[0048] 由作業(yè)之間的依賴關(guān)系形成的拓?fù)浣Y(jié)構(gòu)中,部分作業(yè)可能是不存在依賴關(guān)系的, 這些不存在依賴關(guān)系的作業(yè)是可以并行執(zhí)行的。
[0049] 因此,本發(fā)明實(shí)施例中,為數(shù)據(jù)處理流程中的各個(gè)作業(yè)記錄運(yùn)行狀態(tài),運(yùn)行狀態(tài)至 少包括不可運(yùn)行、可以運(yùn)行、運(yùn)行成功、運(yùn)行失敗或放棄運(yùn)行。如果作業(yè)的運(yùn)行狀態(tài)為可以 運(yùn)行,則可以調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn)行;
[0050] 如果運(yùn)行狀態(tài)為不可運(yùn)行,則處于等待狀態(tài),等待可以運(yùn)行的作業(yè)。
[0051] 在數(shù)據(jù)處理流程處理過(guò)程中,首先初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為 不可運(yùn)行,之后生成第一更新指令;檢測(cè)到第一更新指令之后,可以將數(shù)據(jù)處理流程中不存 在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行。從而即可以調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作 業(yè)運(yùn)行,并可以根據(jù)運(yùn)行結(jié)果更新所述作業(yè)的運(yùn)行狀態(tài)為運(yùn)行成功或運(yùn)行失敗,同時(shí)生成 第二更新指令;檢測(cè)到第二更新指令之后,即可以將存在前提作業(yè),且所述前提作業(yè)的運(yùn)行 狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行。
[0052] 本發(fā)明實(shí)施例從不存在前提作業(yè)的作業(yè),也即初始作業(yè)開(kāi)始調(diào)度運(yùn)行,通過(guò)規(guī)則 推導(dǎo)的方式,根據(jù)作業(yè)之間依賴關(guān)系,可以更新各個(gè)作業(yè)的運(yùn)行狀態(tài),從而可以調(diào)度運(yùn)行狀 態(tài)為可以運(yùn)行的作業(yè)運(yùn)行。既可以保證存在依賴關(guān)系的作業(yè)能夠有序執(zhí)行,不會(huì)出現(xiàn)數(shù)據(jù) 錯(cuò)誤,同時(shí)使得無(wú)依賴關(guān)系的作業(yè)可以并發(fā)執(zhí)行,減少了作業(yè)調(diào)時(shí)間,提高作業(yè)調(diào)度效率, 且提高了資源的利用率。
[0053] 在進(jìn)行規(guī)則推導(dǎo)時(shí),是根據(jù)作業(yè)之間的依賴關(guān)系進(jìn)行的,且為了避免死循環(huán),在數(shù) 據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功、運(yùn)行失敗或放棄運(yùn)行時(shí),即可以結(jié)束流 程,停止作業(yè)調(diào)度。
[0054] 其中,為了方便區(qū)分作業(yè)的運(yùn)行狀態(tài),本發(fā)明實(shí)施例中,通過(guò)響應(yīng)所述第二更新指 令,還可以將存在前提作業(yè),且任一前提作業(yè)運(yùn)行狀態(tài)為運(yùn)行失敗或放棄運(yùn)行的作業(yè)的運(yùn) 行狀態(tài),更新為放棄運(yùn)行。
[0055] 從而,如果檢測(cè)到的作業(yè)為放棄運(yùn)行,即不會(huì)運(yùn)行該作業(yè),從而可以減少計(jì)算步 驟。
[0056] 在實(shí)際應(yīng)用中,本發(fā)明實(shí)施例可以通過(guò)軟件實(shí)現(xiàn)時(shí),響應(yīng)第二更新指令更新作業(yè) 運(yùn)行狀態(tài)的執(zhí)行程序可以如下所述:
[0057] generate-rules : if node has any dependencies for dependency in dependencies generate-rule dependenc\' end add-rule "if all deiipenclenci.es' status is then mark this node as 可以運(yùn)行" add-rule "if ail denpendencies!status is or then mark this node as 放異運(yùn)《亍" els:0 add-rule "if all nodes' status is th雜 mark this node a.s 卞廠以i在行 end
[0058] 其中,node表示作業(yè),dependency即表示前提作業(yè)。
[0059] 數(shù)據(jù)處理流程的各個(gè)作業(yè)可以保存在數(shù)據(jù)庫(kù),以作業(yè)狀態(tài)表的形式存儲(chǔ)。在進(jìn)行 作業(yè)調(diào)度時(shí),通過(guò)讀取作業(yè)狀態(tài)表,獲得各個(gè)作業(yè)的運(yùn)行狀態(tài),進(jìn)而將運(yùn)行狀態(tài)為可以運(yùn)行 的作業(yè)調(diào)度運(yùn)行,并根據(jù)運(yùn)行結(jié)果,修改作業(yè)狀態(tài)表中所述作業(yè)的運(yùn)行狀態(tài)。
[0060] 其中,將不存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行,以及將存在前提作 業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài)的狀態(tài)推導(dǎo)過(guò)程,是按照 作業(yè)之間的依賴關(guān)系進(jìn)行推導(dǎo)。
[0061] 為了清楚表示作業(yè)之間的依賴關(guān)系,且可以方便獲取作業(yè)之間的依賴關(guān)系,作業(yè) 之間的依賴關(guān)系可以采用DAG(Directed Acyclic Graph,有向無(wú)環(huán)圖)的方式進(jìn)行表示,當(dāng) 然也可以采用其他方式表示,比如采用關(guān)系樹來(lái)表示,關(guān)系樹中根節(jié)點(diǎn)依賴葉子節(jié)點(diǎn)運(yùn)行, 任一個(gè)前提作業(yè)可以作為依賴其運(yùn)行結(jié)果的作業(yè)的葉子節(jié)點(diǎn),依賴前提作業(yè)運(yùn)行結(jié)果的作 業(yè)可以作為該前提作業(yè)的根節(jié)點(diǎn)。
[0062] 因此,步驟102中響應(yīng)所述第一更新指令,將不存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài) 更新為可以運(yùn)行可以是:
[0063] 響應(yīng)所述第一更新指令,按照DAG表示的所述數(shù)據(jù)處理流程的各個(gè)作業(yè)的依賴關(guān) 系,將不存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行;
[0064] 步驟104中響應(yīng)所述第二更新指令,將存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀 態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行可以是:
[0065] 響應(yīng)所述第二更新指令,按照DAG表示的所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依 賴關(guān)系,將存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更 新為可以運(yùn)行。
[0066] 如圖2所不,不出了一種DAG不意圖,表不一種作業(yè)依賴關(guān)系。
[0067] 由圖2可知,作業(yè)E依賴的前提作業(yè)為作業(yè)C和作業(yè)D ;作業(yè)D依賴的前提作業(yè)為 作業(yè)B ;作業(yè)B和作業(yè)C依賴的前提作業(yè)均為作業(yè)A。
[0068] 作業(yè)E需要在作業(yè)C以及作業(yè)D都運(yùn)行成功之后才能開(kāi)始運(yùn)行;作業(yè)D需要在作 業(yè)B運(yùn)行成功之后才能開(kāi)始運(yùn)行;作業(yè)B和作業(yè)C需要在作業(yè)A運(yùn)行成功之后才能開(kāi)始運(yùn) 行。
[0069] 下面以結(jié)合圖2所述的作業(yè)依賴關(guān)系,來(lái)詳細(xì)描述本發(fā)明實(shí)施例的技術(shù)方案,如 圖3所示提供的本發(fā)明數(shù)據(jù)處理作業(yè)調(diào)度方法又一個(gè)實(shí)例的流程圖中:
[0070] 301 :初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為不可運(yùn)行,生成第一更新指 令。
[0071] 此時(shí)作業(yè)A、作業(yè)B、作業(yè)C、作業(yè)D以及作業(yè)E的運(yùn)行狀態(tài)均為不可運(yùn)行。作業(yè)A、 作業(yè)B、作業(yè)C、作業(yè)D以及作業(yè)E之間的依賴關(guān)系預(yù)先配置好,可以采用DAG表示。
[0072] 302 :響應(yīng)第一更新指令,將作業(yè)A的運(yùn)行狀態(tài)更新為可以運(yùn)行。
[0073] 根據(jù)預(yù)先配置的各個(gè)作業(yè)之間的依賴關(guān)系,可知作業(yè)A即為不存在前提作業(yè)的作 業(yè)。
[0074] 303 :檢測(cè)存在可以運(yùn)行的作業(yè)A,調(diào)度作業(yè)A運(yùn)行。
[0075] 304 :根據(jù)作業(yè)A的運(yùn)行結(jié)果,更新作業(yè)A的運(yùn)行狀態(tài)為運(yùn)行成功,并生成第二更新 指令。
[0076] 本實(shí)施例中,假設(shè)作業(yè)A的運(yùn)行結(jié)果為運(yùn)行成功。
[0077] 305 :響應(yīng)第二更新指令,將作業(yè)B和作業(yè)C的運(yùn)行狀態(tài)更新為可以運(yùn)行。
[0078] 根據(jù)預(yù)先配置的各個(gè)作業(yè)之間的依賴關(guān)系,可知作業(yè)B和作業(yè)C的前提作業(yè)為作 業(yè)A,且作業(yè)A的運(yùn)行狀態(tài)為運(yùn)行成功,因此可以推導(dǎo)得到作業(yè)B以及作業(yè)C可以運(yùn)行,將其 狀態(tài)進(jìn)行更新。
[0079] 306 :檢測(cè)存在可以運(yùn)行的作業(yè)B以及作業(yè)C,調(diào)度作業(yè)B和調(diào)度C運(yùn)行。
[0080] 307 :根據(jù)作業(yè)B和作業(yè)C的運(yùn)行結(jié)果,更新作業(yè)B的運(yùn)行狀態(tài)為運(yùn)行成功,更新作 業(yè)C的運(yùn)行狀態(tài)為運(yùn)行成功,并生成第二更新指令。
[0081 ] 本實(shí)施例中,假設(shè)作業(yè)B以及作業(yè)B均運(yùn)行成功。
[0082] 308 :響應(yīng)第二更新指令,將作業(yè)D的運(yùn)行狀態(tài)更新為可以運(yùn)行。
[0083] 由于作業(yè)E依賴與作業(yè)B和作業(yè)D的運(yùn)行結(jié)果,由于作業(yè)D未運(yùn)行,因此無(wú)法推導(dǎo) 作業(yè)E的運(yùn)行狀態(tài),因此仍為不可以運(yùn)行。
[0084] 309 :檢測(cè)存在可以運(yùn)行的作業(yè)D,調(diào)度作業(yè)D運(yùn)行。
[0085] 310 :根據(jù)作業(yè)D的運(yùn)行結(jié)果,更新作業(yè)D的運(yùn)行狀態(tài)為運(yùn)行失敗,并生成第二更新 指令。
[0086] 311 :響應(yīng)所述第二更新指令,將作業(yè)E的運(yùn)行狀態(tài)更新為放棄運(yùn)行。
[0087] 根據(jù)預(yù)先配置的各個(gè)作業(yè)之間的依賴關(guān)系,可知作業(yè)E的前提作業(yè)為作業(yè)的B和 作業(yè)D,由于作業(yè)D的運(yùn)行狀態(tài)為運(yùn)行失敗,因此將作業(yè)E的運(yùn)行狀態(tài)更新為放棄運(yùn)行。
[0088] 此時(shí),各個(gè)作業(yè)的運(yùn)行狀態(tài)為運(yùn)行成功、運(yùn)行失敗或放棄運(yùn)行,因此即結(jié)束流程。
[0089] 通過(guò)本實(shí)施例,作業(yè)B和作業(yè)C無(wú)依賴關(guān)系,可以并發(fā)執(zhí)行,因此減少了作業(yè)調(diào)時(shí) 間,可以提高資源利用率。且根據(jù)本實(shí)施例的運(yùn)行狀態(tài)更新以及推導(dǎo),只有前提作業(yè)運(yùn)行成 功的作業(yè)的運(yùn)行狀態(tài)才會(huì)更新為可以運(yùn)行,否則繼續(xù)保持不可運(yùn)行或者放棄運(yùn)行的狀態(tài), 從而保證了存在依賴關(guān)系的作業(yè)的有序執(zhí)行,避免出現(xiàn)數(shù)據(jù)錯(cuò)誤。
[0090] 本發(fā)明實(shí)施例在實(shí)際應(yīng)用中,可以應(yīng)用于任一個(gè)節(jié)點(diǎn)中,由該節(jié)點(diǎn)執(zhí)行本發(fā)明實(shí) 施例的技術(shù)方案。其中,節(jié)點(diǎn)可以是指在服務(wù)器中部署的一個(gè)軟件程序。在運(yùn)行狀態(tài)為可 以運(yùn)行的作業(yè)包括多個(gè)時(shí),調(diào)度運(yùn)行狀態(tài)可以運(yùn)行的作業(yè)運(yùn)行,具體可以是以并行方式運(yùn) 行所述作業(yè)調(diào)度模塊調(diào)度的運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè),也即將運(yùn)行狀態(tài)為可以運(yùn)行的作 業(yè)同時(shí)運(yùn)行。
[0091] 而由于數(shù)據(jù)處理流程的作業(yè)可能包括多個(gè),特別是大數(shù)據(jù)領(lǐng)域,數(shù)據(jù)處理流程很 復(fù)雜,作業(yè)數(shù)目也會(huì)很多,依賴關(guān)系也會(huì)復(fù)雜,可能存在大量需要并發(fā)執(zhí)行的作業(yè)。而一個(gè) 節(jié)點(diǎn)可利用的資源是有限的,在大量作業(yè)并發(fā)運(yùn)行時(shí),可能導(dǎo)致資源不夠用。
[0092] 因此,本發(fā)明實(shí)施例可以具體應(yīng)用于分布式系統(tǒng)中,該分布式系統(tǒng)可以包括多個(gè) 計(jì)算節(jié)點(diǎn)。計(jì)算節(jié)點(diǎn)也即是指在服務(wù)器中部署的一個(gè)用于運(yùn)行作業(yè)的計(jì)算程序。
[0093] 因此,本發(fā)明實(shí)施例中,調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn)行可以是:
[0094] 將運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)提供給多個(gè)計(jì)算節(jié)點(diǎn),由至少一個(gè)計(jì)算節(jié)點(diǎn)獲取并 運(yùn)行至少一個(gè)運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)。
[0095] 多個(gè)計(jì)算節(jié)點(diǎn)可以分別部署在不同的服務(wù)器中,也可以部署在同一臺(tái)服務(wù)器中。
[0096] 在運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)包括多個(gè)時(shí),每一個(gè)可以運(yùn)行的作業(yè)可以分配到一 個(gè)計(jì)算節(jié)點(diǎn)中運(yùn)行,每一個(gè)計(jì)算節(jié)點(diǎn)可以運(yùn)行至少一個(gè)運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)從而通 過(guò)多個(gè)計(jì)算節(jié)點(diǎn),分?jǐn)偭俗鳂I(yè)運(yùn)行量,實(shí)現(xiàn)了作業(yè)的分布式執(zhí)行。使作業(yè)調(diào)度和作業(yè)執(zhí)行可 以分離開(kāi)來(lái),且可以根據(jù)不同的需求設(shè)計(jì)分布式的系統(tǒng),以實(shí)現(xiàn)大量作業(yè)的同時(shí)執(zhí)行。
[0097] 圖4本發(fā)明實(shí)施例提供的一種作業(yè)調(diào)度裝置一個(gè)實(shí)施例的結(jié)構(gòu)示意圖,該裝置可 以包括:
[0098] 作業(yè)調(diào)度模塊401,用于初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為不可運(yùn)行, 生成第一更新指令;調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn)行,根據(jù)運(yùn)行結(jié)果更新所述作業(yè)的 運(yùn)行狀態(tài)為運(yùn)行成功或運(yùn)行失敗,并生成第二更新指令;
[0099] 所述規(guī)則確定模塊402,用于獲取預(yù)先配置的數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依 賴關(guān)系;響應(yīng)所述第一更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將不 存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行;響應(yīng)所述第二更新指令,按照所述數(shù)據(jù) 處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為 運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行。
[0100] 規(guī)則確定模塊主要負(fù)責(zé)根據(jù)作業(yè)之間的依賴關(guān)系,對(duì)作業(yè)的運(yùn)行狀態(tài)進(jìn)行推導(dǎo), 以確定出可以運(yùn)行的作業(yè)。
[0101] 作業(yè)調(diào)度模塊在存在運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)時(shí),即可以對(duì)可以運(yùn)行的作業(yè)進(jìn) 行調(diào)度。
[0102] 本發(fā)明實(shí)施例從不存在前提作業(yè)的作業(yè),也即初始作業(yè)開(kāi)始調(diào)度運(yùn)行,通過(guò)規(guī)則 推導(dǎo)的方式,根據(jù)作業(yè)之間依賴關(guān)系,可以更新各個(gè)作業(yè)的運(yùn)行狀態(tài),只有前提作業(yè)運(yùn)行成 功的作業(yè)的運(yùn)行狀態(tài)才會(huì)更新為可以運(yùn)行,否則繼續(xù)保持不可運(yùn)行或者放棄運(yùn)行的狀態(tài), 從而既保證了存在依賴關(guān)系的作業(yè)的有序執(zhí)行,不會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)誤,且前提作業(yè)如果存在 多個(gè)依賴其的作業(yè)時(shí),只要其運(yùn)行狀態(tài)為運(yùn)行成功,依賴其的多個(gè)作業(yè)均可以更新可以運(yùn) 行,從而運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)即可以進(jìn)行運(yùn)行,同時(shí)保證了無(wú)依賴關(guān)系的作業(yè)可以 并發(fā)執(zhí)行,提高資源的利用率。
[0103] 作為又一個(gè)實(shí)施例,所述規(guī)則確定模塊402響應(yīng)所述第二更新指令,還用于,按照 所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將存在前提作業(yè),且任一前提作業(yè)運(yùn)行狀 態(tài)為運(yùn)行失敗或放棄運(yùn)行的作業(yè)的運(yùn)行狀態(tài),更新為放棄運(yùn)行。
[0104] 作業(yè)調(diào)度模塊生成的第一更新指令以及第二更新指令,可以發(fā)送至規(guī)則確定模 塊,以觸發(fā)規(guī)則確定模塊對(duì)作業(yè)的運(yùn)行狀態(tài)進(jìn)行更新。
[0105] 作業(yè)調(diào)度模塊如果檢測(cè)到的作業(yè)為放棄運(yùn)行,即不會(huì)運(yùn)行該作業(yè),從而可以減少 計(jì)算步驟。
[0106] 作業(yè)調(diào)度模塊還用于在各個(gè)作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功、運(yùn)行失敗或放棄運(yùn)行 時(shí),即可以停止作業(yè)調(diào)度。
[0107] 因此規(guī)則確定模塊響應(yīng)所述第二更新指令,將存在前提作業(yè),且所述前提作業(yè)的 運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行具體是,響應(yīng)第二更新指令,將 運(yùn)行狀態(tài)為不可運(yùn)行,且存在前提作業(yè),以及所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作 業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行。
[0108] 其中,將不存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行,以及將存在前提作 業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài)的狀態(tài)推導(dǎo)過(guò)程,是按照 作業(yè)之間的依賴關(guān)系進(jìn)行推導(dǎo)。
[0109] 為了清楚表示作業(yè)之間的依賴關(guān)系,且可以方便獲取作業(yè)之間的依賴關(guān)系,作業(yè) 之間的依賴關(guān)系可以采用DAG(Directed Acyclic Graph,有向無(wú)環(huán)圖)的方式進(jìn)行表示,當(dāng) 然也可以采用其他方式表示,比如采用關(guān)系樹來(lái)表示,關(guān)系樹中根節(jié)點(diǎn)依賴葉子節(jié)點(diǎn)運(yùn)行, 任一個(gè)前提作業(yè)可以作為依賴其運(yùn)行結(jié)果的作業(yè)的葉子節(jié)點(diǎn),依賴前提作業(yè)運(yùn)行結(jié)果的作 業(yè)可以作為該前提作業(yè)的根節(jié)點(diǎn)
[0110] 因此,作為又一個(gè)實(shí)施例,所述規(guī)則確定模塊402可以具體用于獲取預(yù)設(shè)配置的 表示數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系的DAG ;響應(yīng)所述第一更新指令,按照所述 DAG表示的所述數(shù)據(jù)處理流程各個(gè)作業(yè)的依賴關(guān)系,將不存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài) 更新為可以運(yùn)行;響應(yīng)所述第二更新指令,按照所述DAG表示的所述數(shù)據(jù)處理流程各個(gè)作 業(yè)的依賴關(guān)系,將存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行 狀態(tài),更新為可以運(yùn)行。
[0111] 本發(fā)明實(shí)施例的數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)可以保存在數(shù)據(jù)存儲(chǔ)模塊 中。
[0112] 因此如圖5所示,作為又一個(gè)實(shí)施例,本發(fā)明實(shí)施例提供的數(shù)據(jù)處理作業(yè)調(diào)度裝 置還包括數(shù)據(jù)存儲(chǔ)模塊403,用于存儲(chǔ)各個(gè)作業(yè)的運(yùn)行狀態(tài)。
[0113] 作業(yè)調(diào)度模塊以及規(guī)則確定模塊可以對(duì)數(shù)據(jù)存儲(chǔ)模塊中的作業(yè)的運(yùn)行狀態(tài)進(jìn)行 更新。
[0114] 作業(yè)調(diào)度模塊401具體是:
[0115] 初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為不可運(yùn)行,存儲(chǔ)在數(shù)據(jù)存儲(chǔ)模塊 403中,并生成第一更新指令;調(diào)度所述數(shù)據(jù)存儲(chǔ)模塊403中運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn) 行,根據(jù)運(yùn)行結(jié)果更新所述數(shù)據(jù)存儲(chǔ)模塊403中所述作業(yè)的運(yùn)行狀態(tài)為運(yùn)行成功或運(yùn)行失 敗,并生成第二更新指令;
[0116] 所述規(guī)則確定模塊402具體是:
[0117] 響應(yīng)所述第一更新指令,將所述數(shù)據(jù)存儲(chǔ)模塊403中不存在前提作業(yè)的作業(yè)的運(yùn) 行狀態(tài)更新為可以運(yùn)行;響應(yīng)所述第二更新指令,將所述數(shù)據(jù)存儲(chǔ)模塊403中存在前提作 業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行。
[0118] 數(shù)據(jù)存儲(chǔ)模塊可以具體將各個(gè)作業(yè)的運(yùn)行狀態(tài)保存在作業(yè)狀態(tài)表中。
[0119] 作業(yè)調(diào)度模塊以及規(guī)則確定模塊通過(guò)讀取數(shù)據(jù)存儲(chǔ)模塊中的作業(yè)狀態(tài)表,獲得各 個(gè)作業(yè)的運(yùn)行狀態(tài),進(jìn)而可以進(jìn)行作業(yè)調(diào)度或更新。
[0120] 在一種可能的實(shí)現(xiàn)方式中,如圖6所示,作為又一個(gè)實(shí)施例,該裝置還可以包括一 作業(yè)執(zhí)行模塊404,用于以并行方式運(yùn)行所述作業(yè)調(diào)度模塊401調(diào)度的運(yùn)行狀態(tài)為可以運(yùn) 行的作業(yè)。
[0121] 本發(fā)明實(shí)施例提供的數(shù)據(jù)處理作業(yè)調(diào)度裝置在實(shí)際應(yīng)用中,即可以應(yīng)用于一個(gè)節(jié) 點(diǎn),由該節(jié)點(diǎn)實(shí)現(xiàn)作業(yè)的調(diào)度運(yùn)行。
[0122] 而由于數(shù)據(jù)處理流程的作業(yè)可能包括多個(gè),特別是大數(shù)據(jù)領(lǐng)域,數(shù)據(jù)處理流程很 復(fù)雜,作業(yè)數(shù)目也會(huì)很多,依賴關(guān)系也會(huì)復(fù)雜,可能存在大量需要并發(fā)執(zhí)行的作業(yè)。而一個(gè) 計(jì)算節(jié)點(diǎn)的資源是有限的,在大量作業(yè)并發(fā)運(yùn)行時(shí),可能導(dǎo)致資源不夠用。
[0123] 因此,作為另一種可能的實(shí)現(xiàn)方式,該作業(yè)調(diào)度模塊調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的 作業(yè)運(yùn)行可以是:
[0124] 將運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)提供給多個(gè)計(jì)算節(jié)點(diǎn),由至少一個(gè)計(jì)算節(jié)點(diǎn)運(yùn)行至 少一個(gè)運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)。
[0125] 在運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)包括多個(gè)時(shí),可以由多個(gè)計(jì)算節(jié)點(diǎn)分?jǐn)傔\(yùn)行,從而 實(shí)現(xiàn)了分布式執(zhí)行,有利于作業(yè)的并發(fā)執(zhí)行。
[0126] 且可以根據(jù)不同的需求設(shè)計(jì)分布式的系統(tǒng),可以方便計(jì)算節(jié)點(diǎn)的擴(kuò)展,以實(shí)現(xiàn)大 量作業(yè)的同時(shí)執(zhí)行。
[0127] 該多個(gè)計(jì)算節(jié)點(diǎn)可以分別部署在一個(gè)或多個(gè)服務(wù)器中,一個(gè)服務(wù)器中可以至少部 署一個(gè)計(jì)算節(jié)點(diǎn)。
[0128] 結(jié)合上述描述,本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)處理作業(yè)調(diào)度系統(tǒng),如圖7所示, 為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)處理作業(yè)調(diào)度系統(tǒng)一個(gè)實(shí)施例的結(jié)構(gòu)示意圖,該系統(tǒng)可以 包括至少一個(gè)作業(yè)調(diào)度節(jié)點(diǎn)701、至少一個(gè)規(guī)則推理節(jié)點(diǎn)702以及多個(gè)計(jì)算節(jié)點(diǎn)703 ;
[0129] 任一個(gè)作業(yè)調(diào)度節(jié)點(diǎn)701,用于初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為不 可運(yùn)行,生成第一更新指令;將運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)提供給所述多個(gè)計(jì)算節(jié)點(diǎn),由至 少一個(gè)計(jì)算節(jié)點(diǎn)運(yùn)行至少一個(gè)運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè);根據(jù)運(yùn)行結(jié)果更新所述作業(yè)的 運(yùn)行狀態(tài)為運(yùn)行成功或運(yùn)行失敗,并生成第二更新指令;
[0130] 任一個(gè)規(guī)則推理節(jié)點(diǎn)702,用于響應(yīng)所述第一更新指令,將不存在前提作業(yè)的作業(yè) 的運(yùn)行狀態(tài)更新為可以運(yùn)行;響應(yīng)所述第二更新指令,將存在前提作業(yè),且所述前提作業(yè)的 運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行;
[0131] 所述計(jì)算節(jié)點(diǎn)703,用于運(yùn)行所述作業(yè)調(diào)度節(jié)點(diǎn)提供的運(yùn)行狀態(tài)為可以運(yùn)行的作 業(yè)。
[0132] 該作業(yè)調(diào)度節(jié)點(diǎn)響應(yīng)第二更新指令,還可以將存在前提作業(yè),且任一前提作業(yè)運(yùn) 行狀態(tài)為運(yùn)行失敗或放棄運(yùn)行的作業(yè)的運(yùn)行狀態(tài),更新為放棄運(yùn)行。
[0133] 本實(shí)施例中,由作業(yè)調(diào)度節(jié)點(diǎn)進(jìn)行作業(yè)運(yùn)行狀態(tài)的初始化、更新以及作業(yè)調(diào)度,可 以調(diào)度多個(gè)計(jì)算節(jié)點(diǎn)運(yùn)行,運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)。
[0134] 采用本實(shí)施例所述的系統(tǒng)架構(gòu),可以方便擴(kuò)展計(jì)算節(jié)點(diǎn),以滿足大量的并發(fā)執(zhí)行 的作業(yè)。也可以方便的擴(kuò)展作業(yè)調(diào)度節(jié)點(diǎn)和規(guī)則引擎節(jié)點(diǎn),以提升系統(tǒng)處理能力,具有高度 容錯(cuò)能力。
[0135] 此外,如圖8所示,該分布式系統(tǒng)還可以包括作業(yè)存儲(chǔ)節(jié)點(diǎn)704,各個(gè)作業(yè)的運(yùn)行 狀態(tài)可以存儲(chǔ)在作業(yè)存儲(chǔ)節(jié)點(diǎn)704。作業(yè)調(diào)度節(jié)點(diǎn)以及規(guī)則推理節(jié)點(diǎn)通過(guò)與作業(yè)存儲(chǔ)節(jié)點(diǎn) 的交互,更新作業(yè)存儲(chǔ)節(jié)點(diǎn)中作業(yè)的運(yùn)行狀態(tài)。
[0136] 其中,作業(yè)調(diào)度節(jié)點(diǎn)、規(guī)則推理節(jié)點(diǎn)、計(jì)算節(jié)點(diǎn)以及作業(yè)存儲(chǔ)節(jié)點(diǎn)等節(jié)點(diǎn)可以分別 是在服務(wù)器中部署的一個(gè)軟件程序。
[0137] -個(gè)服務(wù)器可以部署不同類型的節(jié)點(diǎn),例如作業(yè)調(diào)度節(jié)點(diǎn)、規(guī)則推理節(jié)點(diǎn)、計(jì)算節(jié) 點(diǎn)以及作業(yè)存儲(chǔ)節(jié)點(diǎn)可以同時(shí)部署在一臺(tái)服務(wù)器中,使得該服務(wù)器可以提供多種服務(wù);也 可以僅部署一種類型節(jié)點(diǎn),例如作業(yè)調(diào)度節(jié)點(diǎn)、規(guī)則推理節(jié)點(diǎn)、計(jì)算節(jié)點(diǎn)以及數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn) 分別部署在不同的服務(wù)器中,每臺(tái)服務(wù)器提供一種服務(wù)??梢愿鶕?jù)服務(wù)器資源的充足程度, 確定服務(wù)器中部署的節(jié)點(diǎn)類型。
[0138] 在本發(fā)明實(shí)施例提供的另一種數(shù)據(jù)處理作業(yè)調(diào)度系統(tǒng)中,該數(shù)據(jù)處理作業(yè)調(diào)度系 統(tǒng)可以包括至少一個(gè)控制節(jié)點(diǎn)以及多個(gè)計(jì)算節(jié)點(diǎn);
[0139] 由控制節(jié)點(diǎn)初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為不可運(yùn)行,生成第一更 新指令;響應(yīng)所述第一更新指令,將不存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行; 將運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)提供給所述多個(gè)計(jì)算節(jié)點(diǎn),由至少一個(gè)計(jì)算節(jié)點(diǎn)獲取并運(yùn)行 至少一個(gè)運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè);獲取并根據(jù)運(yùn)行結(jié)果更新所述作業(yè)的運(yùn)行狀態(tài)為運(yùn) 行成功或運(yùn)行失敗,生成第二更新指令;響應(yīng)所述第二更新指令,將存在前提作業(yè),且所述 前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行。
[0140] 其中,控制節(jié)點(diǎn)可以是服務(wù)器中部署的實(shí)現(xiàn)控制功能的一個(gè)軟件程序。
[0141] 在實(shí)際應(yīng)用中,本發(fā)明實(shí)施例的數(shù)據(jù)處理作業(yè)調(diào)度系統(tǒng)可以采用Jenkins作為計(jì) 算作業(yè)執(zhí)行的底層實(shí)現(xiàn),可以使用主/從模式方便的擴(kuò)展不同類型的節(jié)點(diǎn),以滿足不斷增 加的計(jì)算需求。檢測(cè)到運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)后,會(huì)調(diào)用Jenkins API將這些作業(yè)分 發(fā)到每個(gè)計(jì)算節(jié)點(diǎn)執(zhí)行,并可以定時(shí)讀取作業(yè)的執(zhí)行結(jié)果。
[0142] 以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可 以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單 元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其 中的部分或者全部模塊來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性 的勞動(dòng)的情況下,即可以理解并實(shí)施。
[0143] 通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實(shí)施方式可 借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件。基于這樣的理解,上 述技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該 計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如R0M/RAM、磁碟、光盤等,包括若干指 令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個(gè)實(shí)施 例或者實(shí)施例的某些部分所述的方法。
[0144] 最后應(yīng)說(shuō)明的是:以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡 管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然 可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替 換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精 神和范圍。
【主權(quán)項(xiàng)】
1. 一種數(shù)據(jù)處理作業(yè)調(diào)度方法,其特征在于,包括: 獲取預(yù)先配置的數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系; 初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為不可運(yùn)行,生成第一更新指令; 響應(yīng)所述第一更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將不存 在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行; 調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn)行,根據(jù)運(yùn)行結(jié)果更新所述作業(yè)的運(yùn)行狀態(tài)為運(yùn)行 成功或運(yùn)行失敗,并生成第二更新指令; 響應(yīng)所述第二更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將存在 前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn)行,并 根據(jù)運(yùn)行結(jié)果更新所述作業(yè)的運(yùn)行狀態(tài)為運(yùn)行成功或運(yùn)行失敗,生成第二更新指令之后, 所述方法還包括: 響應(yīng)所述第二更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將存在 前提作業(yè),且任一前提作業(yè)運(yùn)行狀態(tài)為運(yùn)行失敗或放棄運(yùn)行的作業(yè)的運(yùn)行狀態(tài),更新為放 棄運(yùn)行。3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn) 行包括: 將運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)提供給多個(gè)計(jì)算節(jié)點(diǎn),由至少一個(gè)計(jì)算節(jié)點(diǎn)運(yùn)行至少一 個(gè)運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)。4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依 賴關(guān)系通過(guò)有向無(wú)環(huán)圖表示; 獲取預(yù)先配置的數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系包括: 獲取預(yù)先配置的表示數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系有向無(wú)環(huán)圖; 所述響應(yīng)所述第一更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將 不存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行包括: 響應(yīng)所述第一更新指令,按照所述有向無(wú)環(huán)圖表示的數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的 依賴關(guān)系,將不存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行; 所述響應(yīng)所述第二更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將 存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài),更新為可以 運(yùn)行包括: 響應(yīng)所述第二更新指令,按照所述有向無(wú)環(huán)圖表示的所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之 間的依賴關(guān)系,將存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行 狀態(tài),更新為可以運(yùn)行。5. -種數(shù)據(jù)處理作業(yè)調(diào)度裝置,其特征在于,包括: 作業(yè)調(diào)度模塊,用于初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為不可運(yùn)行,生成第 一更新指令;調(diào)度運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)運(yùn)行,根據(jù)運(yùn)行結(jié)果更新所述作業(yè)的運(yùn)行狀 態(tài)為運(yùn)行成功或運(yùn)行失敗,并生成第二更新指令; 規(guī)則確定模塊,用于獲取預(yù)先配置的數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系;響應(yīng) 所述第一更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將不存在前提作 業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行;響應(yīng)所述第二更新指令,按照所述數(shù)據(jù)處理流程的 各個(gè)作業(yè)之間的依賴關(guān)系,將存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的 作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行。6. 根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述規(guī)則確定模塊還用于: 響應(yīng)所述第二更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將存在 前提作業(yè),且任一前提作業(yè)運(yùn)行狀態(tài)為運(yùn)行失敗或放棄運(yùn)行的作業(yè)的運(yùn)行狀態(tài),更新為放 棄運(yùn)行。7. 根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述作業(yè)調(diào)度模塊調(diào)度運(yùn)行狀態(tài)為可以 運(yùn)行的作業(yè)運(yùn)行具體是: 將運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)提供給至少一個(gè)計(jì)算節(jié)點(diǎn)運(yùn)行,由至少一個(gè)計(jì)算節(jié)點(diǎn)運(yùn) 行至少一個(gè)運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)。8. 根據(jù)權(quán)利要求5所述的裝置,其特征在于,還包括作業(yè)執(zhí)行模塊; 所述作業(yè)執(zhí)行模塊,用于以并行方式運(yùn)行所述作業(yè)調(diào)度模塊調(diào)度的運(yùn)行狀態(tài)為可以運(yùn) 行的作業(yè)。9. 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依 賴關(guān)系通過(guò)有向無(wú)環(huán)圖表示; 所述規(guī)則確定模塊具體用于獲取預(yù)設(shè)配置的表示數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依 賴關(guān)系的有向無(wú)環(huán)圖;響應(yīng)所述第一更新指令,按照所述有向無(wú)環(huán)圖表示的所述數(shù)據(jù)處理 流程的各個(gè)作業(yè)之間的依賴關(guān)系,將不存在前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行; 響應(yīng)所述第二更新指令,按照所述有向無(wú)環(huán)圖表示的所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的 依賴關(guān)系,將存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行成功的作業(yè)的運(yùn)行狀態(tài), 更新為可以運(yùn)行。10. -種數(shù)據(jù)處理作業(yè)調(diào)度系統(tǒng),其特征在于,包括至少一個(gè)作業(yè)調(diào)度節(jié)點(diǎn)、至少一個(gè) 規(guī)則推理節(jié)點(diǎn)以及多個(gè)計(jì)算節(jié)點(diǎn); 任一個(gè)作業(yè)調(diào)度節(jié)點(diǎn),用于初始化數(shù)據(jù)處理流程的各個(gè)作業(yè)的運(yùn)行狀態(tài)為不可運(yùn)行, 生成第一更新指令;將運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)提供給所述多個(gè)計(jì)算節(jié)點(diǎn),由至少一個(gè) 計(jì)算節(jié)點(diǎn)運(yùn)行至少一個(gè)運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè);根據(jù)運(yùn)行結(jié)果更新所述作業(yè)的運(yùn)行狀 態(tài)為運(yùn)行成功或運(yùn)行失敗,并生成第二更新指令; 任一個(gè)規(guī)則推理節(jié)點(diǎn),用于獲取預(yù)先配置的數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān) 系;響應(yīng)所述第一更新指令,按照所述數(shù)據(jù)處理流程的各個(gè)作業(yè)之間的依賴關(guān)系,將不存在 前提作業(yè)的作業(yè)的運(yùn)行狀態(tài)更新為可以運(yùn)行;響應(yīng)所述第二更新指令,按照所述數(shù)據(jù)處理 流程的各個(gè)作業(yè)之間的依賴關(guān)系,將存在前提作業(yè),且所述前提作業(yè)的運(yùn)行狀態(tài)均為運(yùn)行 成功的作業(yè)的運(yùn)行狀態(tài),更新為可以運(yùn)行; 所述計(jì)算節(jié)點(diǎn),用于運(yùn)行所述作業(yè)調(diào)度節(jié)點(diǎn)提供的運(yùn)行狀態(tài)為可以運(yùn)行的作業(yè)。
【文檔編號(hào)】G06F9/48GK105893122SQ201510526866
【公開(kāi)日】2016年8月24日
【申請(qǐng)日】2015年8月25日
【發(fā)明人】許鷺清, 陳抒
【申請(qǐng)人】樂(lè)視網(wǎng)信息技術(shù)(北京)股份有限公司