一種面向流式數(shù)據(jù)的作業(yè)調(diào)度方法及裝置制造方法
【專利摘要】本發(fā)明涉及一種面向流式數(shù)據(jù)的作業(yè)調(diào)度方法,包括以下步驟:調(diào)度管理器從調(diào)度隊(duì)列中實(shí)時(shí)獲取待調(diào)度作業(yè),根據(jù)待調(diào)度作業(yè)的信息利用有向無(wú)環(huán)圖生成處理單元隊(duì)列;調(diào)度管理器根據(jù)物理節(jié)點(diǎn)的非本地通信數(shù)和主導(dǎo)資源比例,為處理單元隊(duì)列中的每個(gè)處理單元分別選擇物理節(jié)點(diǎn),將所有處理單元分別分配給對(duì)應(yīng)的物理節(jié)點(diǎn);執(zhí)行器在啟動(dòng)處理單元時(shí),先在該物理節(jié)點(diǎn)上創(chuàng)建一個(gè)linux容器,然后在linux容器內(nèi)部啟動(dòng)處理單元。本發(fā)明將處理單元調(diào)度到非本地通信數(shù)較小、負(fù)載較低的物理節(jié)點(diǎn)上,可以將需要頻繁通信的處理單元集中到同一物理節(jié)點(diǎn),減少了跨物理節(jié)點(diǎn)的網(wǎng)絡(luò)通信。
【專利說(shuō)明】一種面向流式數(shù)據(jù)的作業(yè)調(diào)度方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)并行計(jì)算領(lǐng)域,特別涉及一種面向流式數(shù)據(jù)的作業(yè)調(diào)度方法及
裝置。
【背景技術(shù)】
[0002]近年來(lái),隨著實(shí)時(shí)搜索、廣告推薦、社交網(wǎng)絡(luò)、日志在線分析等應(yīng)用的不斷發(fā)展,一種新的數(shù)據(jù)形態(tài)——流式數(shù)據(jù)正在興起。流式數(shù)據(jù)是指一組大量、快速、不間斷的事件序列。在不同場(chǎng)景下,流式數(shù)據(jù)可以是實(shí)時(shí)查詢、用戶點(diǎn)擊、在線日志、流媒體等多種數(shù)據(jù)形式。流式應(yīng)用注重實(shí)時(shí)交互,過(guò)高延時(shí)的響應(yīng)會(huì)嚴(yán)重影響其功能或用戶體驗(yàn)。由于流式數(shù)據(jù)的重要性和獨(dú)特性,一批流式數(shù)據(jù)處理系統(tǒng)應(yīng)用而生,例如Yahoo !的S4系統(tǒng)。
[0003]事件是流式數(shù)據(jù)的基本組成單位,以鍵-值(key-value)形式出現(xiàn)。處理單元是處理事件的基本單位,有特定的事件類型和鍵,專門處理具有相應(yīng)類型和鍵的事件。處理單元接收流式數(shù)據(jù),對(duì)其中的事件進(jìn)行處理,然后輸出事件或者直接發(fā)布結(jié)果。
[0004]流式數(shù)據(jù)處理具有通信流量大、計(jì)算量大、響應(yīng)速度快等特點(diǎn),對(duì)系統(tǒng)性能要求較高。在流式數(shù)據(jù)處理中,處理單元被分布在物理節(jié)點(diǎn)上,使用其CPU、內(nèi)存、網(wǎng)絡(luò)帶寬等物理資源,物理節(jié)點(diǎn)過(guò)載會(huì)直接影響處理單元的性能表現(xiàn)。此外,處理單元需要相互通信、傳輸流式數(shù)據(jù),這將產(chǎn)生網(wǎng)絡(luò)延時(shí)和通信代價(jià)。如何根據(jù)流式數(shù)據(jù)的特點(diǎn),合理地調(diào)度處理單元是流式數(shù)據(jù)處理的關(guān)鍵問(wèn)題。
[0005]現(xiàn)有流式數(shù)據(jù)處理系統(tǒng)未綜合考慮處理單元通信和物理節(jié)點(diǎn)實(shí)時(shí)負(fù)載,只是保證處理單元在數(shù)據(jù)量上分布均衡,但是由于不同處理單元對(duì)各種資源的需求不同,數(shù)量上的均衡并不意味資源使用和實(shí)際負(fù)載的均衡。而且相互頻繁通信的處理單元可能被調(diào)度到遠(yuǎn)程環(huán)境,增加其通信代價(jià)和延時(shí)?,F(xiàn)有調(diào)度方法不能很好地滿足流式數(shù)據(jù)處理的需求,造成物理節(jié)點(diǎn)負(fù)載不均、通信延時(shí)較高的現(xiàn)象,影響流式數(shù)據(jù)處理的整體性能。
【發(fā)明內(nèi)容】
[0006]本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種通過(guò)計(jì)算非本地通信數(shù)和主導(dǎo)資源比例,并以此為標(biāo)準(zhǔn)對(duì)物理節(jié)點(diǎn)進(jìn)行排序,可以將處理單元調(diào)度到非本地通信較少、負(fù)載較低的物理節(jié)點(diǎn)上的面向流式數(shù)據(jù)的作業(yè)調(diào)度方法及裝置。
[0007]本發(fā)明解決上述技術(shù)問(wèn)題的技術(shù)方案如下:一種面向流式數(shù)據(jù)的作業(yè)調(diào)度方法,包括以下步驟:
[0008]步驟1:調(diào)度管理器從存儲(chǔ)待調(diào)度作業(yè)的調(diào)度隊(duì)列中實(shí)時(shí)獲取待調(diào)度作業(yè),并根據(jù)待調(diào)度作業(yè)的信息利用有向無(wú)環(huán)圖生成包括多個(gè)處理單元的處理單元隊(duì)列,所述調(diào)度管理器設(shè)置于高配置的物理節(jié)點(diǎn)上,未設(shè)置有調(diào)度管理器的其他物理節(jié)點(diǎn)上分別設(shè)置有一個(gè)執(zhí)行器;
[0009]步驟2:調(diào)度管理器根據(jù)物理節(jié)點(diǎn)的非本地通信數(shù)和主導(dǎo)資源比例,為處理單元隊(duì)列中的每個(gè)處理單元分別選擇物理節(jié)點(diǎn),將所有處理單元分別分配給對(duì)應(yīng)的物理節(jié)點(diǎn),每個(gè)物理節(jié)點(diǎn)上設(shè)置有處理單元的數(shù)量為零至多個(gè);
[0010]步驟3:執(zhí)行器在啟動(dòng)處理單元時(shí),先在該物理節(jié)點(diǎn)上創(chuàng)建一個(gè)Iinux容器,然后在Iinux容器內(nèi)部啟動(dòng)處理單元。
[0011]本發(fā)明的有益效果是:該方法將需要頻繁通信的處理單元集中到同一物理節(jié)點(diǎn),減少跨物理節(jié)點(diǎn)的網(wǎng)絡(luò)通信。同時(shí),在通信代價(jià)相同或者物理節(jié)點(diǎn)負(fù)載過(guò)高的情況下,該方法會(huì)選擇負(fù)載較低的物理節(jié)點(diǎn)進(jìn)行部署,避免過(guò)載現(xiàn)象發(fā)生。本發(fā)明減少了流式數(shù)據(jù)處理的通信代價(jià)和網(wǎng)絡(luò)延時(shí),實(shí)現(xiàn)了負(fù)載均衡,提高了流式數(shù)據(jù)處理的整體性能。
[0012]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
[0013]進(jìn)一步,所述步驟I具體包括以下步驟:
[0014]步驟1.1:調(diào)度管理器根據(jù)先入先出原則從存儲(chǔ)待調(diào)度作業(yè)的調(diào)度隊(duì)列中獲取待調(diào)度作業(yè);
[0015]步驟1.2:根據(jù)待調(diào)度作業(yè)的預(yù)定的業(yè)務(wù)需求信息和并發(fā)需求信息,將作業(yè)分解為以處理單元為頂點(diǎn)、以數(shù)據(jù)通路為邊的有向無(wú)環(huán)圖;
[0016]步驟1.3:從有向無(wú)環(huán)圖中選擇一個(gè)沒有入邊的頂點(diǎn),將該沒有入邊的頂點(diǎn)加入處理單元隊(duì)列中;
[0017]步驟1.4:從有向無(wú)環(huán)圖中刪除所述步驟1.3中選擇的沒有入邊的頂點(diǎn),并刪除從該沒有入邊的頂點(diǎn)發(fā)出的所有邊;
[0018]步驟1.5:判斷所述有向無(wú)環(huán)圖中是否還有頂點(diǎn),如果有則轉(zhuǎn)至步驟1.2 ;如果沒
有則結(jié)束。
[0019]進(jìn)一步,所述步驟2進(jìn)一步包括以下步驟:
[0020]步驟2.1:計(jì)算每個(gè)物理節(jié)點(diǎn)的非本地通信數(shù)和主導(dǎo)資源比例,所述非本地通信數(shù)指與當(dāng)前物理節(jié)點(diǎn)上的處理單元進(jìn)行網(wǎng)絡(luò)通信的、不在同一物理節(jié)點(diǎn)的待調(diào)度的處理單元的數(shù)量,所述主導(dǎo)資源比例指多種資源需求可用比中最高的資源需求可用比;
[0021]步驟2.2:根據(jù)非本地通信數(shù)和主導(dǎo)資源比例,對(duì)物理節(jié)點(diǎn)進(jìn)行排序,得到排序列表,并將列表中的物理節(jié)點(diǎn)標(biāo)記為“未讀”;
[0022]步驟2.3:從所述排序列表中選擇第一個(gè)“未讀”的物理節(jié)點(diǎn),并將其標(biāo)記為“已讀”;
[0023]步驟2.4:判斷所述選擇的第一個(gè)“未讀”的物理節(jié)點(diǎn)的加權(quán)負(fù)載值是否小于預(yù)定值,如果小于預(yù)定值,則將待調(diào)度的處理單元放置于該物理節(jié)點(diǎn)上,結(jié)束;
[0024]步驟2.5:所述排序列表中是否還有“未讀”的物理節(jié)點(diǎn),如果有則轉(zhuǎn)至步驟2.3 ;如果沒有,則選擇排序列表中的第一個(gè)物理節(jié)點(diǎn)。
[0025]進(jìn)一步,計(jì)算物理節(jié)點(diǎn)的非本地通信數(shù)時(shí)進(jìn)一步包括:
[0026]將非本地通信數(shù)初始化為O ;
[0027]假設(shè)當(dāng)前物理節(jié)點(diǎn)上的處理單元已經(jīng)調(diào)度到該物理節(jié)點(diǎn),然后遍歷所有已經(jīng)完成調(diào)度的處理單元;
[0028]如果一個(gè)處理單元與待調(diào)度的處理單元需要通信、且兩個(gè)處理單元不在同一物理節(jié)點(diǎn)上,則當(dāng)前的非本地通信數(shù)加一,最后得到非本地通信數(shù)。
[0029]進(jìn)一步,所述主導(dǎo)資源比例的計(jì)算方法具體為:
[0030]計(jì)算該物理節(jié)點(diǎn)每種資源的資源需求可用比,所述資源需求可用比是處理單元的資源需求量與物理節(jié)點(diǎn)的資源可用量的比例;
[0031]選擇多種資源需求可用比中最高的一個(gè)即為該物理節(jié)點(diǎn)的主導(dǎo)資源比例。
[0032]進(jìn)一步,所述步驟2.2中,根據(jù)非本地通信數(shù)和主導(dǎo)資源比例,對(duì)物理節(jié)點(diǎn)從小到大排序具體包括以下步驟:
[0033]兩個(gè)物理節(jié)點(diǎn)先比較非本地通信數(shù),如果不等,則非本地通信數(shù)小的物理節(jié)點(diǎn)排在前面;如果相等,再比較二者的主導(dǎo)資源比例,主導(dǎo)資源比例小的物理節(jié)點(diǎn)排在前面。
[0034]進(jìn)一步,所述加權(quán)負(fù)載值的具體計(jì)算方法為:
[0035]加權(quán)負(fù)載值=CPU利用率*0.3+內(nèi)存利用率*0.3+網(wǎng)絡(luò)帶寬利用率*0.4。
[0036]進(jìn)一步,一種面向流式數(shù)據(jù)的作業(yè)調(diào)度裝置,包括調(diào)度管理器,執(zhí)行器和調(diào)度隊(duì)列;
[0037]所述調(diào)度管理器,設(shè)置于高配置的物理節(jié)點(diǎn)上,用于從調(diào)度隊(duì)列中實(shí)時(shí)獲取待調(diào)度作業(yè),并根據(jù)待調(diào)度作業(yè)的信息利用有向無(wú)環(huán)圖生成包括多個(gè)處理單元的處理單元隊(duì)列,根據(jù)物理節(jié)點(diǎn)的非本地通信數(shù)和主導(dǎo)資源比例,為處理單元隊(duì)列中的每個(gè)處理單元分別選擇物理節(jié)點(diǎn),將所有處理單元分別分配給對(duì)應(yīng)的物理節(jié)點(diǎn),每個(gè)物理節(jié)點(diǎn)設(shè)置有至少一個(gè)處理單元;
[0038]所述執(zhí)行器,用于啟動(dòng)處理單元,將調(diào)度管理器調(diào)度給該物理節(jié)點(diǎn)的處理單元放置于Iinux容器內(nèi)部,在Iinux容器內(nèi)部啟動(dòng)處理單元;
[0039]所述調(diào)度隊(duì)列,與調(diào)度管理器部署在同一物理節(jié)點(diǎn)上,用于存儲(chǔ)待調(diào)度作業(yè)。
[0040]進(jìn)一步,所述調(diào)度管理器包括收集模塊和調(diào)度模塊;
[0041]所述收集模塊,用于收集每個(gè)執(zhí)行器所在物理節(jié)點(diǎn)的IP地址、通信端口、每種資源的總量及可用量,執(zhí)行器資源使用狀況及處理單元的資源使用狀況;
[0042]所述調(diào)度模塊,用于從調(diào)度隊(duì)列中獲取待調(diào)度作業(yè),并根據(jù)待調(diào)度作業(yè)的信息生成包括多個(gè)處理單元的處理單元隊(duì)列,為處理單元隊(duì)列中的每個(gè)處理單元分別選擇物理節(jié)點(diǎn),將所有處理單元分別調(diào)度給對(duì)應(yīng)的物理節(jié)點(diǎn)。
[0043]進(jìn)一步,每個(gè)所述處理單元均設(shè)置有唯一的處理單元標(biāo)識(shí)。
【專利附圖】
【附圖說(shuō)明】
[0044]圖1為本發(fā)明方法步驟流程圖;
[0045]圖2為本發(fā)明生成處理單元隊(duì)列的流程圖;
[0046]圖3為本發(fā)明處理單元有向無(wú)環(huán)圖的示意圖;
[0047]圖4為本發(fā)明處理單元有向無(wú)環(huán)圖變化的示意圖;
[0048]圖5為本發(fā)明處理單元調(diào)度方法的流程圖;
[0049]圖6為部署處理單元的流程圖;
[0050]圖7為本發(fā)明裝置結(jié)構(gòu)圖。
[0051]附圖中,各標(biāo)號(hào)所代表的部件列表如下:
[0052]1、調(diào)度管理器,2、執(zhí)行器,3、調(diào)度隊(duì)列。
【具體實(shí)施方式】
[0053]以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
[0054]如圖1所示,為本發(fā)明方法步驟流程圖;圖2為本發(fā)明生成處理單元隊(duì)列的流程圖;圖3為本發(fā)明處理單元有向無(wú)環(huán)圖的示意圖;圖4為本發(fā)明處理單元有向無(wú)環(huán)圖變化的示意圖;圖5為本發(fā)明處理單元調(diào)度方法的流程圖;圖6為部署處理單元的流程圖;圖7為本發(fā)明裝置結(jié)構(gòu)圖。
[0055]實(shí)施例1
[0056]本發(fā)明實(shí)施例實(shí)現(xiàn)了一個(gè)流式數(shù)據(jù)處理系統(tǒng),該系統(tǒng)包括多個(gè)執(zhí)行器和一個(gè)調(diào)度管理器。其中執(zhí)行器是運(yùn)行于物理節(jié)點(diǎn)上的守護(hù)進(jìn)程,除調(diào)度管理器所在的物理節(jié)點(diǎn)以外,系統(tǒng)管理的每個(gè)物理節(jié)點(diǎn)上都運(yùn)行著一個(gè)執(zhí)行器。
[0057]執(zhí)行器可以在該物理節(jié)點(diǎn)上啟動(dòng)和關(guān)閉處理單元。啟動(dòng)處理單元時(shí),執(zhí)行器將先在物理節(jié)點(diǎn)上創(chuàng)建一個(gè)指定資源容量的Linux容器,然后在Linux容器內(nèi)部啟動(dòng)處理單元需要執(zhí)行的任務(wù)。處理單元與Linux容器一一對(duì)應(yīng),每個(gè)處理單元都放置在一個(gè)Linux容器之中。Linux容器可以為其中的進(jìn)程分配指定資源,由于流式數(shù)據(jù)處理模型通常伴以高流量通信,所以本系統(tǒng)分配的資源類型比較全面,包括CPU、內(nèi)存、網(wǎng)絡(luò)帶寬等。這樣,每個(gè)處理單元都在Linux容器內(nèi)部,使用系統(tǒng)分配的指定資源,相互獨(dú)立運(yùn)行,實(shí)現(xiàn)了資源隔離,避免了資源競(jìng)爭(zhēng),提升了處理單元的整體性能和運(yùn)行穩(wěn)定性。
[0058]同時(shí),執(zhí)行器還用于監(jiān)控處理單元的運(yùn)行狀態(tài)和資源使用狀況,由于每個(gè)Linux容器內(nèi)部只有一個(gè)處理單元,因此監(jiān)控處理單元可以轉(zhuǎn)化為監(jiān)控Linux容器的資源使用狀況。執(zhí)行器定時(shí)向調(diào)度管理器的收集模塊發(fā)送心跳。每次需要發(fā)送心跳時(shí),執(zhí)行器會(huì)匯總其管理的處理單元的資源使用狀況和執(zhí)行器總體的資源使用狀況,將其組織為心跳,發(fā)送給收集模塊。心跳間隔可以通過(guò)配置文件進(jìn)行設(shè)置和管理。
[0059]在流式數(shù)據(jù)處理系統(tǒng)中,處理單元間會(huì)傳遞事件序列,因此本發(fā)明需要支持處理單元相互間進(jìn)行通信,系統(tǒng)為此提供了名字空間機(jī)制。系統(tǒng)為每個(gè)處理單元分配一個(gè)全局唯一的標(biāo)識(shí)(ID),處理單元在初始化時(shí)只需記錄與之通信的處理單元ID以及相應(yīng)的業(yè)務(wù)邏輯關(guān)系。系統(tǒng)的名字空間會(huì)維護(hù)處理單元標(biāo)識(shí)(ID)到其通信地址(IP地址與端口)的映射關(guān)系。處理單元首次與其他處理單元通信時(shí),需要先訪問(wèn)名字空間,獲取其通信地址,再與之通信。
[0060]調(diào)度管理器是系統(tǒng)的核心管理者,包括收集模塊、調(diào)度模塊兩個(gè)部分。為避免程序內(nèi)部進(jìn)程過(guò)多,影響程序性能和穩(wěn)定性,系統(tǒng)以進(jìn)程的形式實(shí)現(xiàn)兩個(gè)模塊,模塊之前通過(guò)遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Call)進(jìn)行通信。兩個(gè)模塊理論上可以部署在不同物理節(jié)點(diǎn),但為減少通信開銷,實(shí)際運(yùn)行中應(yīng)部署在同一物理節(jié)點(diǎn)上。
[0061]收集模塊維護(hù)全局執(zhí)行器資源信息,包括每個(gè)執(zhí)行器所在物理節(jié)點(diǎn)的IP地址、通信端口以及每種資源的總量、可用量等,調(diào)度模塊以上述資源信息為基礎(chǔ)進(jìn)行調(diào)度。在調(diào)度模塊啟動(dòng)、關(guān)閉相應(yīng)的處理單元之后,收集模塊根據(jù)該處理模塊的資源需求和部署節(jié)點(diǎn),會(huì)更新全局資源信息。此外,收集模塊接收各個(gè)執(zhí)行器定時(shí)發(fā)送的心跳,其中包括執(zhí)行器的資源使用狀況及處理單元的資源使用狀況,主要包括執(zhí)行器和處理單元的狀態(tài)和各種資源的資源利用率。
[0062]調(diào)度模塊定時(shí)從調(diào)度隊(duì)列中獲取待調(diào)度任務(wù),根據(jù)任務(wù)信息生成處理單元,在獲取收集模塊全局資源信息的基礎(chǔ)上,使用處理單元調(diào)度方法,調(diào)度、啟動(dòng)處理單元;此外根據(jù)系統(tǒng)的運(yùn)行需求或系統(tǒng)管理員的指令,調(diào)度模塊可以控制、動(dòng)態(tài)遷移處理單元。系統(tǒng)管理員或者外部程序通過(guò)客戶端與整個(gè)系統(tǒng)進(jìn)行交互,具體方式是通過(guò)客戶端與調(diào)度模塊交互,交互內(nèi)容包括提交任務(wù)或指定指令。
[0063]本發(fā)明實(shí)施例中具有兩類配置文件,分別供調(diào)度管理器和執(zhí)行器使用。其中調(diào)度管理器的配置文件包括調(diào)度模塊、收集模塊的通信地址、資源分配策略選項(xiàng)、Linux容器配置信息等,三個(gè)模塊啟動(dòng)時(shí)需要獲取配置文件內(nèi)容進(jìn)行初始化。執(zhí)行器配置文件包括執(zhí)行器通信端口、資源管理中收集模塊的通信地址、本物理節(jié)點(diǎn)綁定網(wǎng)卡等信息,執(zhí)行器在啟動(dòng)時(shí)也需要通過(guò)獲取配置文件內(nèi)容進(jìn)行初始化,并向收集模塊發(fā)送心跳,進(jìn)行注冊(cè)。
[0064]圖1為本發(fā)明方法步驟流程圖。該方法按照以下步驟對(duì)進(jìn)行調(diào)度部署,具體包括:
[0065]步驟1:調(diào)度管理器從存儲(chǔ)待調(diào)度作業(yè)的調(diào)度隊(duì)列中實(shí)時(shí)獲取待調(diào)度作業(yè),并根據(jù)待調(diào)度作業(yè)的信息利用有向無(wú)環(huán)圖生成包括多個(gè)處理單元的處理單元隊(duì)列,所述調(diào)度管理器設(shè)置于高配置的物理節(jié)點(diǎn)上,未設(shè)置有調(diào)度管理器的其他物理節(jié)點(diǎn)上分別設(shè)置有一個(gè)執(zhí)行器;
[0066]步驟2:調(diào)度管理器根據(jù)物理節(jié)點(diǎn)的非本地通信數(shù)和主導(dǎo)資源比例,為處理單元隊(duì)列中的每個(gè)處理單元分別選擇物理節(jié)點(diǎn),將所有處理單元分別分配給對(duì)應(yīng)的物理節(jié)點(diǎn),每個(gè)物理節(jié)點(diǎn)上設(shè)置有處理單元的數(shù)量為零至多個(gè);
[0067]步驟3:執(zhí)行器在啟動(dòng)處理單元時(shí),先在該物理節(jié)點(diǎn)上創(chuàng)建一個(gè)Iinux容器,然后在Iinux容器內(nèi)部啟動(dòng)處理單元。
[0068]在本發(fā)明實(shí)施例中,步驟I根據(jù)下述方法獲得待調(diào)度作業(yè):根據(jù)“先入先出原則”,從作業(yè)隊(duì)列中獲得待調(diào)度作業(yè)。系統(tǒng)的作業(yè)調(diào)度隊(duì)列供所有用戶共同使用,用戶使用客戶端管理工具提交作業(yè),先提交的作業(yè)將率先被調(diào)度。
[0069]圖2為本發(fā)明實(shí)施例的生成處理單元隊(duì)列的流程圖,用于根據(jù)調(diào)度作業(yè)信息,生成待調(diào)度的處理單元隊(duì)列,其步驟如下:
[0070]所述步驟I具體包括以下步驟:
[0071]步驟1.1:調(diào)度管理器根據(jù)先入先出原則從存儲(chǔ)待調(diào)度作業(yè)的調(diào)度隊(duì)列中獲取待調(diào)度作業(yè);
[0072]步驟1.2:根據(jù)待調(diào)度作業(yè)的預(yù)定的業(yè)務(wù)需求信息和并發(fā)需求信息,將作業(yè)分解為以處理單元為頂點(diǎn)、以數(shù)據(jù)通路為邊的有向無(wú)環(huán)圖(Directed Acyclic Graph);
[0073]步驟1.3:從有向無(wú)環(huán)圖中選擇一個(gè)沒有入邊的頂點(diǎn),將該沒有入邊的頂點(diǎn)加入處理單元隊(duì)列中;
[0074]步驟1.4:從有向無(wú)環(huán)圖中刪除所述步驟1.3中選擇的沒有入邊的頂點(diǎn),并刪除從該沒有入邊的頂點(diǎn)發(fā)出的所有邊;
[0075]步驟1.5:判斷所述有向無(wú)環(huán)圖中是否還有頂點(diǎn),如果有則轉(zhuǎn)至步驟1.2 ;如果沒
有則結(jié)束。
[0076]在本發(fā)明實(shí)施例中,步驟1.2所述的有向無(wú)環(huán)圖由頂點(diǎn)和邊組成,其中頂點(diǎn)為處理單元,邊為數(shù)據(jù)通路。處理單元隊(duì)列是對(duì)處理單元進(jìn)行“拓?fù)渑判颉钡玫降慕Y(jié)果。拓?fù)渑判蚴侵笇?duì)有向無(wú)環(huán)圖的頂點(diǎn)的一種排序,它使得如果存在一條從頂點(diǎn)A到頂點(diǎn)B的路徑,那么在排序中B出現(xiàn)在A的后面。
[0077]圖3為本發(fā)明實(shí)施例的處理單元有向無(wú)環(huán)圖的示意圖。圖3所示例子中,系統(tǒng)根據(jù)作業(yè)信息,生成了 A、B、C、E、D、F、G、H供7個(gè)處理單元。外部流式數(shù)據(jù)從A、B、C三個(gè)處理單元流入系統(tǒng),經(jīng)過(guò)一系列的處理后,最終在處理單元H匯聚,并輸出結(jié)果。從單個(gè)處理單元的角度來(lái)看,以D為例,它接收A、B、C發(fā)送的事件序列,經(jīng)過(guò)處理后生成新的事件,并將生成的事件發(fā)送給F。
[0078]圖4為本發(fā)明實(shí)施例的處理單兀有向無(wú)環(huán)圖變化的不意圖。拓?fù)渑判蚴菍?duì)有向無(wú)環(huán)圖進(jìn)行不斷變換得到的排序,具體變換方式是每次從圖中選擇一個(gè)沒有入邊的頂點(diǎn),然后將該頂點(diǎn)以及從該頂點(diǎn)發(fā)出的邊刪除。圖3就是圖3進(jìn)行這種變換的中間形態(tài)。在圖3中,我們選擇沒有入邊的頂點(diǎn)A,并刪除從A發(fā)出的兩條邊,于是就得到了圖4所示的有向無(wú)環(huán)圖。對(duì)圖3所示的有向無(wú)環(huán)圖進(jìn)行完整的拓?fù)渑判?,可以得到A、B、C、D、E、F、G、H的序列。
[0079]圖5為本發(fā)明實(shí)施例的處理單元調(diào)度方法的流程圖,用于調(diào)度處理單元,為處理單元選擇合適的物理節(jié)點(diǎn),其步驟如下:
[0080]步驟2.1:計(jì)算每個(gè)物理節(jié)點(diǎn)的非本地通信數(shù)和主導(dǎo)資源比例,所述非本地通信數(shù)指與當(dāng)前物理節(jié)點(diǎn)上的處理單元進(jìn)行網(wǎng)絡(luò)通信的、不在同一物理節(jié)點(diǎn)的待調(diào)度的處理單元的數(shù)量,所述主導(dǎo)資源比例指多種資源需求可用比中最高的資源需求可用比;
[0081]步驟2.2:根據(jù)非本地通信數(shù)和主導(dǎo)資源比例,對(duì)物理節(jié)點(diǎn)進(jìn)行排序,得到排序列表L,并將列表中的物理節(jié)點(diǎn)標(biāo)記為“未讀”;
[0082]步驟2.3:從所述排序列表L中選擇第一個(gè)“未讀”的物理節(jié)點(diǎn)N,并將其標(biāo)記為“已讀”;
[0083]步驟2.4:判斷所述選擇的第一個(gè)“未讀”的物理節(jié)點(diǎn)的加權(quán)負(fù)載值是否小于80%,如果小于80%,則將待調(diào)度的處理單元放置于該物理節(jié)點(diǎn)上,結(jié)束;
[0084]步驟2.5:所述排序列表L中是否還有“未讀”的物理節(jié)點(diǎn),如果有則轉(zhuǎn)至步驟2.3 ;如果沒有,則選擇排序列表L中的第一個(gè)物理節(jié)點(diǎn)。
[0085]在本發(fā)明實(shí)施例中,上述步驟2.1提到的“非本地通信數(shù)”指需要與待調(diào)度處理單元進(jìn)行網(wǎng)絡(luò)通信的、且不在同一物理節(jié)點(diǎn)的處理單元的數(shù)量。物理節(jié)點(diǎn)的非本地通信數(shù)根據(jù)下面方法計(jì)算:將非本地通信數(shù)初始化為0,并假設(shè)待調(diào)度處理單元已經(jīng)部署到該物理節(jié)點(diǎn),然后遍歷所有已經(jīng)完成調(diào)度的處理單元,如果一個(gè)處理單元與待調(diào)度處理單元需要通信、且兩個(gè)處理單元不在同一物理節(jié)點(diǎn)上,則“非本地通信數(shù)”加一。最后得到的“非本地通信數(shù)”即為所求。以圖3所示的處理單元為例,假設(shè)系統(tǒng)已經(jīng)對(duì)處理單元A、B、C完成了調(diào)度,3個(gè)處理單元被調(diào)度到不同的物理節(jié)點(diǎn)a、b、c上,系統(tǒng)現(xiàn)在需要調(diào)度處理單元D。由于處理單元D需要與A、B、C通信,那么對(duì)于D來(lái)說(shuō),物理節(jié)點(diǎn)a、b、c的“非本地通信數(shù)都是
2。假如系統(tǒng)中還包括另一個(gè)物理節(jié)點(diǎn)d,那么d的“非本地通信數(shù)”是3。
[0086]在本發(fā)明實(shí)施例中,步驟2.1采用下面方法計(jì)算物理節(jié)點(diǎn)的主導(dǎo)資源比例:計(jì)算該物理節(jié)點(diǎn)每種資源的資源需求可用比,所述資源需求可用比是處理單元的資源需求量與物理節(jié)點(diǎn)的資源可用量的比例,多種資源需求可用比中最高的一個(gè)即為該物理節(jié)點(diǎn)的主導(dǎo)資源比例。舉例來(lái)說(shuō),本系統(tǒng)維護(hù)CPU、內(nèi)存、網(wǎng)絡(luò)帶寬三種資源,一個(gè)處理單元的資源需求為〈1CPU,2G內(nèi)存,lMbits/s>,此時(shí)物理節(jié)點(diǎn)的可用資源為3個(gè)CPU、IOG內(nèi)存、4Mbits/s,那么CPU、內(nèi)存、網(wǎng)絡(luò)帶寬的資源需求可用比分別為1/3、1/5、1/4。由于1/3最大,所以該物理節(jié)點(diǎn)的主導(dǎo)資源比例是1/3,主導(dǎo)資源是CPU。[0087]值得注意的是,如果一個(gè)物理節(jié)點(diǎn)某種資源的的資源可用量小于處理單元的資源需求,則認(rèn)為該物理節(jié)點(diǎn)沒有足夠的資源,將其主導(dǎo)資源比標(biāo)記為無(wú)窮大,不參與排序。舉例來(lái)說(shuō),一個(gè)處理單元的資源需求為〈1CPU,2G內(nèi)存,lMbits/s>,而此時(shí)物理節(jié)點(diǎn)的可用資源為3個(gè)CPU、IG內(nèi)存、4Mbits/s,該物理節(jié)點(diǎn)沒有足夠可用資源,就將其主導(dǎo)資源比例標(biāo)記為無(wú)窮大。如果所有的物理節(jié)點(diǎn)都沒有足夠資源,則本次調(diào)度失敗,則將處理單元重新放回調(diào)度隊(duì)列,一段時(shí)間后重新進(jìn)行調(diào)度。
[0088]在發(fā)明實(shí)施例中,步驟2.2根據(jù)非本地通信數(shù)和主導(dǎo)資源比例,對(duì)物理節(jié)點(diǎn)從小到大排序。兩個(gè)物理節(jié)點(diǎn)先比較非本地通信數(shù),如果不等,則非本地通信數(shù)小的物理節(jié)點(diǎn)排在前面;如果相等,再比較二者的主導(dǎo)資源比例,主導(dǎo)資源比例小的物理節(jié)點(diǎn)排在前面。
[0089]在發(fā)明實(shí)施例中,步驟2.4所述的加權(quán)負(fù)載值是根據(jù)CPU、內(nèi)存、網(wǎng)絡(luò)帶寬三種資源計(jì)算出的加權(quán)負(fù)載,加權(quán)負(fù)載值等于“CPU利用率*0.3+內(nèi)存利用率*0.3+網(wǎng)絡(luò)帶寬利用率 *0.4”。
[0090]圖6為本發(fā)明實(shí)施例的部署處理單元的流程圖,所述步驟3用于在選擇物理節(jié)點(diǎn)之后部署處理單元,具體包括:
[0091]步驟3.1,在全局資源信息中,減去處理單元的資源配額;
[0092]步驟3.2,將處理單元的信息下發(fā)給所述選擇的物理節(jié)點(diǎn);
[0093]步驟3.3,在該物理節(jié)點(diǎn)上創(chuàng)建Linux容器(Linux Container),并根據(jù)處理單元的資源需求為L(zhǎng)inux容器設(shè)置資源配額;
[0094]步驟3.4,在所述步驟3.3中創(chuàng)建的Linux容器內(nèi),啟動(dòng)處理單元。
[0095]在本發(fā)明實(shí)施例中,步驟701所指全局資源信息,是指調(diào)度管理器的收集模塊維護(hù)的所有物理節(jié)點(diǎn)的各種資源總量及資源可用量。一個(gè)物理節(jié)點(diǎn)的各種資源總量可以表示為〈32CPU,64G內(nèi)存,100Mb/s>,此時(shí)的資源可用量可以表示為〈8CPU,15G內(nèi)存,30Mb/s>。我們假設(shè)所選的物理節(jié)點(diǎn)a的資源可用量為〈8CPU,15G內(nèi)存,30Mb/s>,待部署處理單元的資源需求為〈2CPU,4G內(nèi)存,10Mb/S>,那么就需要在a的資源可用量中減去處理單元的資源需求,更新后a的資源可用量為〈6CPU,IlG內(nèi)存,20Mb/s>。
[0096]本系統(tǒng)選擇使用Linux容器(Linux Container)為處理單元提供資源隔離環(huán)境,Linux容器是輕量級(jí)的虛擬化技術(shù),性能開銷非常小,通??梢院雎圆挥?jì),非常適合流式數(shù)據(jù)處理注重性能的特性。此外,Linux容器可以動(dòng)態(tài)調(diào)整資源容量,為本系統(tǒng)的資源配額自動(dòng)伸縮方法提供可行性。在Linux容器內(nèi)部啟動(dòng)處理單元,根據(jù)Linux容器的性質(zhì),其內(nèi)部的處理單元只能使用分配給它的資源配額,在資源緊張時(shí),不會(huì)搶占其他處理單元的資源。
[0097]—種面向流式數(shù)據(jù)的作業(yè)調(diào)度裝置,包括調(diào)度管理器1,執(zhí)行器2和調(diào)度隊(duì)列3 ;
[0098]所述調(diào)度管理器1,設(shè)置于高配置的物理節(jié)點(diǎn)上,用于從調(diào)度隊(duì)列3中實(shí)時(shí)獲取待調(diào)度作業(yè),并根據(jù)待調(diào)度作業(yè)的信息利用有向無(wú)環(huán)圖生成包括多個(gè)處理單元的處理單元隊(duì)列,根據(jù)物理節(jié)點(diǎn)的非本地通信數(shù)和主導(dǎo)資源比例,為處理單元隊(duì)列中的每個(gè)處理單元分別選擇物理節(jié)點(diǎn),將所有處理單元分別分配給對(duì)應(yīng)的物理節(jié)點(diǎn),每個(gè)物理節(jié)點(diǎn)設(shè)置有至少一個(gè)處理單元;
[0099]所述執(zhí)行器2,用于啟動(dòng)處理單元,將調(diào)度管理器I調(diào)度給該物理節(jié)點(diǎn)的處理單元放置于Iinux容器內(nèi)部,在Iinux容器內(nèi)部啟動(dòng)處理單元;
[0100]所述調(diào)度隊(duì)列3,與調(diào)度管理器部署在同一物理節(jié)點(diǎn)上,用于存儲(chǔ)待調(diào)度作業(yè)。[0101]所述調(diào)度管理器I包括收集模塊和調(diào)度模塊;
[0102]所述收集模塊,用于收集每個(gè)執(zhí)行器所在物理節(jié)點(diǎn)的IP地址、通信端口、每種資源的總量及可用量,執(zhí)行器資源使用狀況及處理單元的資源使用狀況;
[0103]所述調(diào)度模塊,用于從調(diào)度隊(duì)列中獲取待調(diào)度作業(yè),并根據(jù)待調(diào)度作業(yè)的信息生成包括多個(gè)處理單元的處理單元隊(duì)列,為處理單元隊(duì)列中的每個(gè)處理單元分別選擇物理節(jié)點(diǎn),將所有處理單元分別調(diào)度給對(duì)應(yīng)的物理節(jié)點(diǎn)。
[0104]每個(gè)所述處理單元均設(shè)置有唯一的處理單元標(biāo)識(shí)。
[0105]以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種面向流式數(shù)據(jù)的作業(yè)調(diào)度方法,其特征在于,包括以下步驟: 步驟1:調(diào)度管理器從存儲(chǔ)待調(diào)度作業(yè)的調(diào)度隊(duì)列中實(shí)時(shí)獲取待調(diào)度作業(yè),并根據(jù)待調(diào)度作業(yè)的信息利用有向無(wú)環(huán)圖生成包括多個(gè)處理單元的處理單元隊(duì)列,所述調(diào)度管理器設(shè)置于高配置的物理節(jié)點(diǎn)上,未設(shè)置有調(diào)度管理器的其他物理節(jié)點(diǎn)上分別設(shè)置有一個(gè)執(zhí)行器; 步驟2:調(diào)度管理器根據(jù)物理節(jié)點(diǎn)的非本地通信數(shù)和主導(dǎo)資源比例,為處理單元隊(duì)列中的每個(gè)處理單元分別選擇物理節(jié)點(diǎn),將所有處理單元分別分配給對(duì)應(yīng)的物理節(jié)點(diǎn),每個(gè)物理節(jié)點(diǎn)上設(shè)置有處理單元的數(shù)量為零至多個(gè); 步驟3:執(zhí)行器在啟動(dòng)處理單元時(shí),先在該物理節(jié)點(diǎn)上創(chuàng)建一個(gè)Iinux容器,然后在Iinux容器內(nèi)部啟動(dòng)處理單元。
2.根據(jù)權(quán)利要求1所述的面向流式數(shù)據(jù)的作業(yè)調(diào)度方法,其特征在于:所述步驟I具體包括以下步驟 : 步驟1.1:調(diào)度管理器根據(jù)先入先出原則從存儲(chǔ)待調(diào)度作業(yè)的調(diào)度隊(duì)列中獲取待調(diào)度作業(yè); 步驟1.2:根據(jù)待調(diào)度作業(yè)的預(yù)定的業(yè)務(wù)需求信息和并發(fā)需求信息,將作業(yè)分解為以處理單元為頂點(diǎn)、以數(shù)據(jù)通路為邊的有向無(wú)環(huán)圖; 步驟1.3:從有向無(wú)環(huán)圖中選擇一個(gè)沒有入邊的頂點(diǎn),將該沒有入邊的頂點(diǎn)加入處理單元隊(duì)列中; 步驟1.4:從有向無(wú)環(huán)圖中刪除所述步驟1.3中選擇的沒有入邊的頂點(diǎn),并刪除從該沒有入邊的頂點(diǎn)發(fā)出的所有邊; 步驟1.5:判斷所述有向無(wú)環(huán)圖中是否還有頂點(diǎn),如果有則轉(zhuǎn)至步驟1.2 ;如果沒有則結(jié)束。
3.根據(jù)權(quán)利要求1所述的面向流式數(shù)據(jù)的作業(yè)調(diào)度方法,其特征在于:所述步驟2進(jìn)一步包括以下步驟: 步驟2.1:計(jì)算每個(gè)物理節(jié)點(diǎn)的非本地通信數(shù)和主導(dǎo)資源比例,所述非本地通信數(shù)指與當(dāng)前物理節(jié)點(diǎn)上的處理單元進(jìn)行網(wǎng)絡(luò)通信的、不在同一物理節(jié)點(diǎn)的待調(diào)度的處理單元的數(shù)量,所述主導(dǎo)資源比例指多種資源需求可用比中最高的資源需求可用比; 步驟2.2:根據(jù)非本地通信數(shù)和主導(dǎo)資源比例,對(duì)物理節(jié)點(diǎn)進(jìn)行排序,得到排序列表,并將列表中的物理節(jié)點(diǎn)標(biāo)記為“未讀”; 步驟2.3:從所述排序列表中選擇第一個(gè)“未讀”的物理節(jié)點(diǎn),并將其標(biāo)記為“已讀”;步驟2.4:判斷所述選擇的第一個(gè)“未讀”的物理節(jié)點(diǎn)的加權(quán)負(fù)載值是否小于預(yù)定值,如果小于預(yù)定值,則將待調(diào)度的處理單元放置于該物理節(jié)點(diǎn)上,結(jié)束; 步驟2.5:所述排序列表中是否還有“未讀”的物理節(jié)點(diǎn),如果有則轉(zhuǎn)至步驟2.3 ;如果沒有,則選擇排序列表中的第一個(gè)物理節(jié)點(diǎn)。
4.根據(jù)權(quán)利要求3所述的面向流式數(shù)據(jù)的作業(yè)調(diào)度方法,其特征在于:計(jì)算物理節(jié)點(diǎn)的非本地通信數(shù)時(shí)進(jìn)一步包括: 將非本地通信數(shù)初始化為O ; 假設(shè)當(dāng)前物理節(jié)點(diǎn)上的處理單元已經(jīng)調(diào)度到該物理節(jié)點(diǎn),然后遍歷所有已經(jīng)完成調(diào)度的處理單元;如果一個(gè)處理單元與待調(diào)度的處理單元需要通信、且兩個(gè)處理單元不在同一物理節(jié)點(diǎn)上,則當(dāng)前的非本地通信數(shù)加一,最后得到非本地通信數(shù)。
5.根據(jù)權(quán)利要求3所述的面向流式數(shù)據(jù)的作業(yè)調(diào)度方法,其特征在于:所述主導(dǎo)資源比例的計(jì)算方法具體為: 計(jì)算該物理節(jié)點(diǎn)每種資源的資源需求可用比,所述資源需求可用比是處理單元的資源需求量與物理節(jié)點(diǎn)的資源可用量的比例; 選擇多種資源需求可用比中最高的一個(gè)即為該物理節(jié)點(diǎn)的主導(dǎo)資源比例。
6.根據(jù)權(quán)利要求3所述的面向流式數(shù)據(jù)的作業(yè)調(diào)度方法,其特征在于: 所述步驟2.2中,根據(jù)非本地通信數(shù)和主導(dǎo)資源比例,對(duì)物理節(jié)點(diǎn)從小到大排序具體包括以下步驟: 兩個(gè)物理節(jié)點(diǎn)先比較非本地通信數(shù),如果不等,則非本地通信數(shù)小的物理節(jié)點(diǎn)排在前面;如果相等,再比較二者的主導(dǎo)資源比例,主導(dǎo)資源比例小的物理節(jié)點(diǎn)排在前面。
7.根據(jù)權(quán)利要求3所述的面向流式數(shù)據(jù)的作業(yè)調(diào)度方法,其特征在于:所述加權(quán)負(fù)載值的具體計(jì)算方法為: 加權(quán)負(fù)載值=CPU利用率*0.3+內(nèi)存利用率*0.3+網(wǎng)絡(luò)帶寬利用率*0.4。
8.一種面向流式數(shù)據(jù)的作業(yè)調(diào)度裝置,其特征在于:包括調(diào)度管理器(1),執(zhí)行器(2)和調(diào)度隊(duì)列(3);` 所述調(diào)度管理器(1),設(shè)置于高配置的物理節(jié)點(diǎn)上,用于從調(diào)度隊(duì)列(3)中實(shí)時(shí)獲取待調(diào)度作業(yè),并根據(jù)待調(diào)度作業(yè)的信息利用有向無(wú)環(huán)圖生成包括多個(gè)處理單元的處理單元隊(duì)列,根據(jù)物理節(jié)點(diǎn)的非本地通信數(shù)和主導(dǎo)資源比例,為處理單元隊(duì)列中的每個(gè)處理單元分別選擇物理節(jié)點(diǎn),將所有處理單元分別分配給對(duì)應(yīng)的物理節(jié)點(diǎn),每個(gè)物理節(jié)點(diǎn)設(shè)置有至少一個(gè)處理單元; 所述執(zhí)行器(2),用于啟動(dòng)處理單元,將調(diào)度管理器(I)調(diào)度給該物理節(jié)點(diǎn)的處理單元放置于Iinux容器內(nèi)部,在Iinux容器內(nèi)部啟動(dòng)處理單元; 所述調(diào)度隊(duì)列(3),與調(diào)度管理器部署在同一物理節(jié)點(diǎn)上,用于存儲(chǔ)待調(diào)度作業(yè)。
9.根據(jù)權(quán)利要求8所述的面向流式數(shù)據(jù)的作業(yè)調(diào)度裝置,其特征在于:所述調(diào)度管理器(I)包括收集模塊和調(diào)度模塊; 所述收集模塊,用于收集每個(gè)執(zhí)行器所在物理節(jié)點(diǎn)的IP地址、通信端口、每種資源的總量及可用量,執(zhí)行器資源使用狀況及處理單元的資源使用狀況; 所述調(diào)度模塊,用于從調(diào)度隊(duì)列中獲取待調(diào)度作業(yè),并根據(jù)待調(diào)度作業(yè)的信息生成包括多個(gè)處理單元的處理單元隊(duì)列,為處理單元隊(duì)列中的每個(gè)處理單元分別選擇物理節(jié)點(diǎn),將所有處理單元分別調(diào)度給對(duì)應(yīng)的物理節(jié)點(diǎn)。
10.根據(jù)權(quán)利要求8所述的面向流式數(shù)據(jù)的作業(yè)調(diào)度裝置,其特征在于:每個(gè)所述處理單元均設(shè)置有唯一的處理單元標(biāo)識(shí)。
【文檔編號(hào)】H04L12/863GK103491024SQ201310451552
【公開日】2014年1月1日 申請(qǐng)日期:2013年9月27日 優(yōu)先權(quán)日:2013年9月27日
【發(fā)明者】王旻, 韓冀中, 李勇, 張章, 孟丹 申請(qǐng)人:中國(guó)科學(xué)院信息工程研究所