本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別是涉及一種基于hadoop系統(tǒng)的任務(wù)調(diào)度方法和裝置。
背景技術(shù):
hadoop系統(tǒng)是一個(gè)由apache基金會(huì)所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu),用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序,充分利用集群的威力進(jìn)行高速運(yùn)算和存儲(chǔ)。hadoop系統(tǒng)實(shí)現(xiàn)了一種分布式文件系統(tǒng)(hadoopdistributedfilesystem),簡稱hdfs。hdfs有高容錯(cuò)性的特點(diǎn),可用來部署在低廉的硬件上;而且hdfs提供高吞吐量的應(yīng)用程序數(shù)據(jù)訪問,適合具有超大數(shù)據(jù)集的應(yīng)用程序。
利用hadoop系統(tǒng)目前可以處理一些周期性任務(wù),比如每天執(zhí)行一批設(shè)置好的hadoop任務(wù),以將etl傳入的前一天的所有日志信息存入數(shù)據(jù)倉庫,其中etl是英文extract-transform-load的縮寫,用來描述將數(shù)據(jù)從來源端經(jīng)過抽取(extract)、轉(zhuǎn)換(transform)及加載(load)至目的端的過程。hadoop系統(tǒng)處理任務(wù)時(shí),由于hadoop系統(tǒng)所在集群的總資源量(虛擬內(nèi)核總數(shù)和內(nèi)存總量)是固定的,總內(nèi)存一般是充足的,而虛擬內(nèi)核則是競爭性資源,因此需要對(duì)任務(wù)進(jìn)行調(diào)度來保障hadoop系統(tǒng)能夠有序地完成任務(wù)處理。
目前,對(duì)hadoop系統(tǒng)的任務(wù)進(jìn)行調(diào)度是通過約束任務(wù)數(shù)量來實(shí)現(xiàn)的,具體是循環(huán)檢測(cè)正在處理的任務(wù)數(shù)量,如果檢測(cè)到的任務(wù)數(shù)量沒有達(dá)到任務(wù)數(shù)量閾值,就會(huì)啟動(dòng)新的任務(wù);如果檢測(cè)到的任務(wù)數(shù)量達(dá)到任務(wù)數(shù)量閾值,就不會(huì)啟動(dòng)新的任務(wù)。
然而,在實(shí)際使用過程中,hadoop系統(tǒng)處理每個(gè)任務(wù)消耗的資源量是有差異的,當(dāng)正在處理的多個(gè)任務(wù)均消耗大量資源時(shí),就會(huì)因資源競爭導(dǎo)致資源池卡死以及任務(wù)超時(shí),因而目前的hadoop系統(tǒng)任務(wù)調(diào)度方法會(huì)導(dǎo)致負(fù)載不均衡。
技術(shù)實(shí)現(xiàn)要素:
基于此,有必要針對(duì)目前的hadoop系統(tǒng)任務(wù)調(diào)度方法會(huì)導(dǎo)致負(fù)載不均衡的問題,提供一種基于hadoop系統(tǒng)的任務(wù)調(diào)度方法和裝置。
一種基于hadoop系統(tǒng)的任務(wù)調(diào)度方法,所述方法包括:
統(tǒng)計(jì)已提交任務(wù)未運(yùn)行的映射歸約的總數(shù)目;
從歷史記錄中讀取待處理任務(wù)集中任務(wù)的映射歸約數(shù)目;
按照預(yù)設(shè)周期從待處理任務(wù)集中篩選出待啟動(dòng)任務(wù),所述待啟動(dòng)任務(wù)的映射歸約數(shù)目與所述總數(shù)目的和小于等于預(yù)設(shè)數(shù)目;所述預(yù)設(shè)數(shù)目為hadoop系統(tǒng)在預(yù)設(shè)周期內(nèi)可運(yùn)行的映射歸約數(shù)目;
提交所述待啟動(dòng)任務(wù)。
在其中一個(gè)實(shí)施例中,所述統(tǒng)計(jì)已提交任務(wù)未運(yùn)行的映射歸約的總數(shù)目,包括:
獲取已提交任務(wù)集;
從歷史記錄讀取所述已提交任務(wù)集中各任務(wù)所對(duì)應(yīng)的子工作任務(wù)的映射歸約數(shù)目;
獲取已提交任務(wù)集中各任務(wù)的各子工作任務(wù)的子工作任務(wù)運(yùn)行進(jìn)度;
根據(jù)讀取的映射歸約數(shù)目以及所述子工作任務(wù)運(yùn)行進(jìn)度,計(jì)算已提交任務(wù)集的未運(yùn)行的映射歸約的總數(shù)目。
在其中一個(gè)實(shí)施例中,所述子工作任務(wù)運(yùn)行進(jìn)度為相應(yīng)子工作任務(wù)對(duì)應(yīng)的映射歸約總量中已完成的映射歸約的比例;
所述根據(jù)讀取的映射歸約數(shù)目以及所述子工作任務(wù)運(yùn)行進(jìn)度,計(jì)算已提交任務(wù)集的未運(yùn)行的映射歸約的總數(shù)目,包括:
根據(jù)所述子工作任務(wù)運(yùn)行進(jìn)度計(jì)算相應(yīng)子工作任務(wù)未完成的映射歸約的比例;
將讀取的映射歸約數(shù)目以相應(yīng)子工作任務(wù)未完成的映射歸約的比例為權(quán)重計(jì)算加權(quán)和,獲得已提交任務(wù)集的未運(yùn)行的映射歸約的總數(shù)目。
在其中一個(gè)實(shí)施例中,所述按照預(yù)設(shè)周期從待處理任務(wù)集中篩選出待啟動(dòng)任務(wù),包括:
逐個(gè)從待處理任務(wù)集中取出任務(wù);
從歷史記錄讀取取出的任務(wù)的映射歸約數(shù)目;
判斷取出的任務(wù)的映射歸約數(shù)目與所述總數(shù)目的和是否小于等于預(yù)設(shè)數(shù)目;
若是,則將取出的任務(wù)加入待啟動(dòng)任務(wù)集,并更新所述總數(shù)目,繼續(xù)執(zhí)行所述逐個(gè)從待處理任務(wù)集中取出任務(wù)的步驟;
若否,則提交所述待啟動(dòng)任務(wù)集。
在其中一個(gè)實(shí)施例中,所述若否,則提交所述待啟動(dòng)任務(wù)集,包括:
若否,判斷是否滿足:所述總數(shù)目小于所述預(yù)設(shè)數(shù)目的第一條件和/或所述待處理任務(wù)集中還有任務(wù)的第二條件;
若所述第一條件和所述第二條件均滿足,則執(zhí)行所述逐個(gè)從待處理任務(wù)集中取出任務(wù)的步驟;
若所述第一條件和所述第二條件中至少一者不滿足,則提交所述待啟動(dòng)任務(wù)集。
上述基于hadoop系統(tǒng)的任務(wù)調(diào)度方法,雖然單個(gè)任務(wù)消耗的資源量是不同的,但是hadoop系統(tǒng)在處理任務(wù)時(shí)會(huì)將任務(wù)拆分成若干子工作任務(wù)(稱為job),而子工作任務(wù)在處理時(shí)又會(huì)拆分成映射(稱為map)和歸約(稱為reduce),每個(gè)映射或者歸約消耗的資源量是固定的。因此依據(jù)hadoop系統(tǒng)在預(yù)設(shè)周期內(nèi)可運(yùn)行的映射歸約數(shù)目來定期約束任務(wù)的提交,可以精確控制hadoop系統(tǒng)處理任務(wù)所消耗的資源量,實(shí)現(xiàn)負(fù)載均衡。而且利用任務(wù)的歷史記錄,可通過任務(wù)歷史的映射歸約數(shù)目來預(yù)測(cè)待處理任務(wù)的映射歸約數(shù)目,保證了可以快速確定待處理任務(wù)的映射歸約數(shù)目,從而保障任務(wù)調(diào)度的效率。
一種基于hadoop系統(tǒng)的任務(wù)調(diào)度裝置,所述裝置包括:
統(tǒng)計(jì)模塊,用于統(tǒng)計(jì)已提交任務(wù)未運(yùn)行的映射歸約的總數(shù)目;
第一讀取模塊,用于從歷史記錄中讀取待處理任務(wù)集中任務(wù)的映射歸約數(shù)目;
篩選模塊,用于按照預(yù)設(shè)周期從待處理任務(wù)集中篩選出待啟動(dòng)任務(wù),所述 待啟動(dòng)任務(wù)的映射歸約數(shù)目與所述總數(shù)目的和小于等于預(yù)設(shè)數(shù)目;所述預(yù)設(shè)數(shù)目為hadoop系統(tǒng)在預(yù)設(shè)周期內(nèi)可運(yùn)行的映射歸約數(shù)目;
提交模塊,用于提交所述待啟動(dòng)任務(wù)。
在其中一個(gè)實(shí)施例中,所述統(tǒng)計(jì)模塊包括:
獲取模塊,用于獲取已提交任務(wù)集;
第二讀取模塊,用于從歷史記錄讀取所述已提交任務(wù)集中各任務(wù)所對(duì)應(yīng)的子工作任務(wù)的映射歸約數(shù)目;
子工作任務(wù)運(yùn)行進(jìn)度獲取模塊,用于獲取已提交任務(wù)集中各任務(wù)的各子工作任務(wù)的子工作任務(wù)運(yùn)行進(jìn)度;
計(jì)算模塊,用于根據(jù)讀取的映射歸約數(shù)目以及所述子工作任務(wù)運(yùn)行進(jìn)度,計(jì)算已提交任務(wù)集的未運(yùn)行的映射歸約的總數(shù)目。
在其中一個(gè)實(shí)施例中,所述子工作任務(wù)運(yùn)行進(jìn)度為相應(yīng)子工作任務(wù)對(duì)應(yīng)的映射歸約總量中已完成的映射歸約的比例;
所述計(jì)算模塊還用于根據(jù)所述子工作任務(wù)運(yùn)行進(jìn)度計(jì)算相應(yīng)子工作任務(wù)未完成的映射歸約的比例;將讀取的映射歸約數(shù)目以相應(yīng)子工作任務(wù)未完成的映射歸約的比例為權(quán)重計(jì)算加權(quán)和,獲得已提交任務(wù)集的未運(yùn)行的映射歸約的總數(shù)目。
在其中一個(gè)實(shí)施例中,所述篩選模塊包括:
任務(wù)提取模塊,用于逐個(gè)從待處理任務(wù)集中取出任務(wù);
第三讀取模塊,用于從歷史記錄讀取取出的任務(wù)的映射歸約數(shù)目;
第一判斷模塊,用于判斷取出的任務(wù)的映射歸約數(shù)目與所述總數(shù)目的和是否小于等于預(yù)設(shè)數(shù)目;
待啟動(dòng)任務(wù)集更新模塊,用于若所述第一判斷模塊判斷為是,則將取出的任務(wù)加入待啟動(dòng)任務(wù)集,更新所述總數(shù)目,并通知所述任務(wù)提取模塊;
所述提交模塊還用于若所述第一判斷模塊判斷為否,則提交所述待啟動(dòng)任務(wù)集。
在其中一個(gè)實(shí)施例中,所述篩選模塊還包括:
第二判斷模塊,用于若所述第一判斷模塊判斷為否,則繼續(xù)判斷是否滿足: 所述總數(shù)目小于所述預(yù)設(shè)數(shù)目的第一條件和/或所述待處理任務(wù)集中還有任務(wù)的第二條件;
所述任務(wù)提取模塊還用于若所述第一條件和所述第二條件均滿足,則繼續(xù)逐個(gè)從待處理任務(wù)集中取出任務(wù);
所述提交模塊還用于若所述第一條件和所述第二條件中至少一者不滿足,則提交所述待啟動(dòng)任務(wù)集。
上述基于hadoop系統(tǒng)的任務(wù)調(diào)度裝置,雖然單個(gè)任務(wù)消耗的資源量是不同的,但是hadoop系統(tǒng)在處理任務(wù)時(shí)會(huì)將任務(wù)拆分成若干子工作任務(wù)(稱為job),而子工作任務(wù)在處理時(shí)又會(huì)拆分成映射(稱為map)和歸約(稱為reduce),每個(gè)映射或者歸約消耗的資源量是固定的。因此依據(jù)hadoop系統(tǒng)在預(yù)設(shè)周期內(nèi)可運(yùn)行的映射歸約數(shù)目來定期約束任務(wù)的提交,可以精確控制hadoop系統(tǒng)處理任務(wù)所消耗的資源量,實(shí)現(xiàn)負(fù)載均衡。而且利用任務(wù)的歷史記錄,可通過任務(wù)歷史的映射歸約數(shù)目來預(yù)測(cè)待處理任務(wù)的映射歸約數(shù)目,保證了可以快速確定待處理任務(wù)的映射歸約數(shù)目,從而保障任務(wù)調(diào)度的效率。
附圖說明
圖1為一個(gè)實(shí)施例中基于hadoop系統(tǒng)的任務(wù)調(diào)度方法的流程示意圖;
圖2為另一個(gè)實(shí)施例中基于hadoop系統(tǒng)的任務(wù)調(diào)度方法的流程示意圖;
圖3為一個(gè)實(shí)施例中基于hadoop系統(tǒng)的任務(wù)調(diào)度裝置的結(jié)構(gòu)框圖;
圖4為一個(gè)實(shí)施例中統(tǒng)計(jì)模塊的結(jié)構(gòu)框圖;
圖5為另一個(gè)實(shí)施例中基于hadoop系統(tǒng)的任務(wù)調(diào)度裝置的結(jié)構(gòu)框圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
hadoop系統(tǒng)包括任務(wù)調(diào)度系統(tǒng)、任務(wù)拆分系統(tǒng)(稱為hive)、映射歸約系 統(tǒng)(稱為hadoopmapreduce)和資源池(稱為hadoopyarn)。其中任務(wù)調(diào)度系統(tǒng)用于實(shí)現(xiàn)本發(fā)明實(shí)施例的基于hadoop系統(tǒng)的任務(wù)調(diào)度方法,按照預(yù)設(shè)的策略提交待啟動(dòng)任務(wù)。任務(wù)拆分系統(tǒng)用于將提交的待啟動(dòng)任務(wù)所包括的查詢語句(hivesql)轉(zhuǎn)換成一個(gè)個(gè)子工作任務(wù)(job),并將子工作任務(wù)提交到映射歸約系統(tǒng)。映射歸約系統(tǒng)用于將子工作任務(wù)拆分成映射(map)和歸約(reduce),從資源池申請(qǐng)資源以處理映射和歸約。資源池則用于對(duì)資源進(jìn)行管理,接收到資源申請(qǐng)后,判斷是否有足夠的資源,如果沒有則等待資源釋放;如果有,則按照資源申請(qǐng)?zhí)峁┵Y源,資源包括虛擬內(nèi)核和內(nèi)存。映射歸約系統(tǒng)執(zhí)行子工作任務(wù)完畢后,發(fā)送結(jié)束信息到任務(wù)拆分系統(tǒng)。任務(wù)拆分系統(tǒng)接收到結(jié)束信息,根據(jù)接收到的結(jié)束信息,如果任務(wù)池中的相應(yīng)任務(wù)處理完畢,則發(fā)送消息到任務(wù)調(diào)度系統(tǒng),并從相應(yīng)任務(wù)集中移除已完成的任務(wù)。映射可用來把一組鍵值對(duì)映射成一組新的鍵值對(duì),歸約可用來保證所有映射的鍵值對(duì)中的每一個(gè)共享相同的鍵組。
如圖1所示,在一個(gè)實(shí)施例中,提供了一種基于hadoop系統(tǒng)的任務(wù)調(diào)度方法,本實(shí)施例以該方法應(yīng)用于hadoop系統(tǒng)中的任務(wù)調(diào)度系統(tǒng)來舉例說明。該方法具體包括如下步驟:
步驟102,統(tǒng)計(jì)已提交任務(wù)未運(yùn)行的映射歸約的總數(shù)目。
具體地,任務(wù)調(diào)度系統(tǒng)可根據(jù)任務(wù)拆分系統(tǒng)反饋的消息統(tǒng)計(jì)已提交任務(wù)未運(yùn)行的映射歸約的總數(shù)目,任務(wù)調(diào)度系統(tǒng)也可以通過主動(dòng)查詢統(tǒng)計(jì)已提交任務(wù)未運(yùn)行的映射歸約的總數(shù)目。已提交任務(wù)未運(yùn)行的映射歸約的總數(shù)目,是指任務(wù)調(diào)度系統(tǒng)提交的任務(wù)被拆分成映射和歸約后,還未被映射歸約系統(tǒng)運(yùn)行完畢的映射歸約的總數(shù)目。任務(wù)被提交到任務(wù)拆分系統(tǒng)后,會(huì)被拆分成多個(gè)子工作任務(wù),子工作任務(wù)需要從有限的資源池中申請(qǐng)到資源才能運(yùn)行,子工作任務(wù)開始運(yùn)行的時(shí)間是不確定的。其中任務(wù)是周期性執(zhí)行的離線任務(wù)。
映射歸約用來統(tǒng)稱映射和歸約,由于一個(gè)映射占用一個(gè)虛擬內(nèi)核,一個(gè)歸約也占用一個(gè)虛擬內(nèi)核,所以統(tǒng)計(jì)映射和歸約的數(shù)目時(shí)映射的數(shù)目和歸約的數(shù)目會(huì)累加,比如一個(gè)映射和一個(gè)歸約統(tǒng)計(jì)的映射歸約數(shù)目為2,2個(gè)映射或者2個(gè)歸約統(tǒng)計(jì)的映射歸約數(shù)目也是2。
步驟104,從歷史記錄中讀取待處理任務(wù)集中任務(wù)的映射歸約數(shù)目。
具體地,待處理任務(wù)集是指需要hadoop系統(tǒng)處理的任務(wù)的集合,可從任務(wù)總集合中按照任務(wù)優(yōu)先級(jí)挑選任務(wù)構(gòu)成待處理任務(wù)集。hadoop系統(tǒng)可在運(yùn)行每個(gè)任務(wù)時(shí)獲取該任務(wù)的映射歸約數(shù)目并記錄到歷史記錄中,任務(wù)調(diào)度系統(tǒng)便可以在需要時(shí)從歷史記錄中讀取待處理任務(wù)集中各個(gè)任務(wù)的映射歸約數(shù)目。歷史記錄可保存在數(shù)據(jù)庫中。
步驟106,按照預(yù)設(shè)周期從待處理任務(wù)集中篩選出待啟動(dòng)任務(wù),待啟動(dòng)任務(wù)的映射歸約數(shù)目與總數(shù)目的和小于等于預(yù)設(shè)數(shù)目;預(yù)設(shè)數(shù)目為hadoop系統(tǒng)在預(yù)設(shè)周期內(nèi)可運(yùn)行的映射歸約數(shù)目。
其中,預(yù)設(shè)周期可根據(jù)需要設(shè)定,比如可取1到10分鐘,還比如可取90秒鐘。預(yù)設(shè)周期是巡檢周期,周期性地篩選出待啟動(dòng)任務(wù)并提交,預(yù)設(shè)周期可小于預(yù)設(shè)數(shù)目的映射歸約運(yùn)行所消耗的總時(shí)間,也可以大于運(yùn)行一個(gè)映射或者歸約所消耗的時(shí)間。預(yù)設(shè)數(shù)目是hadoop系統(tǒng)在預(yù)設(shè)周期內(nèi)可運(yùn)行的映射歸約數(shù)目,為了充分利用資源,預(yù)設(shè)數(shù)目可設(shè)置為hadoop系統(tǒng)在預(yù)設(shè)周期內(nèi)可運(yùn)行的映射歸約數(shù)目最大值。任務(wù)調(diào)度系統(tǒng)篩選出的待啟動(dòng)任務(wù)的映射歸約數(shù)目與總數(shù)目的和最好接近預(yù)設(shè)數(shù)目,以最大化地利用資源。
步驟108,提交待啟動(dòng)任務(wù)。
具體地,任務(wù)調(diào)度系統(tǒng)在篩選出待啟動(dòng)任務(wù)后,向任務(wù)拆分系統(tǒng)提交篩選出的待啟動(dòng)任務(wù)。待啟動(dòng)任務(wù)可構(gòu)成待啟動(dòng)任務(wù)集,由任務(wù)調(diào)度系統(tǒng)提交該待啟動(dòng)任務(wù)集。
上述基于hadoop系統(tǒng)的任務(wù)調(diào)度方法,雖然單個(gè)任務(wù)消耗的資源量是不同的,但是hadoop系統(tǒng)在處理任務(wù)時(shí)會(huì)將任務(wù)拆分成若干子工作任務(wù),而子工作任務(wù)在處理時(shí)又會(huì)拆分成映射和歸約,每個(gè)映射或者歸約消耗的資源量是固定的。因此依據(jù)hadoop系統(tǒng)在預(yù)設(shè)周期內(nèi)可運(yùn)行的映射歸約數(shù)目來定期約束任務(wù)的提交,可以精確控制hadoop系統(tǒng)處理任務(wù)所消耗的資源量,實(shí)現(xiàn)負(fù)載均衡。而且利用任務(wù)的歷史記錄,可通過任務(wù)歷史的映射歸約數(shù)目來預(yù)測(cè)待處理任務(wù)的映射歸約數(shù)目,保證了可以快速確定待處理任務(wù)的映射歸約數(shù)目,從而保障任務(wù)調(diào)度的效率。
如圖2所示,在一個(gè)實(shí)施例中,一種基于hadoop系統(tǒng)的任務(wù)調(diào)度方法,本實(shí)施例以該方法應(yīng)用于hadoop系統(tǒng)中的任務(wù)調(diào)度系統(tǒng)來舉例說明。該方法具體包括如下步驟:
步驟202,獲取已提交任務(wù)集。
其中,已提交任務(wù)集是指當(dāng)前任務(wù)調(diào)度系統(tǒng)提交到任務(wù)拆分系統(tǒng)的任務(wù)構(gòu)成的集合,任務(wù)調(diào)度系統(tǒng)可從任務(wù)拆分系統(tǒng)查詢獲得已提交任務(wù)集。
步驟204,從歷史記錄讀取已提交任務(wù)集中各任務(wù)所對(duì)應(yīng)的子工作任務(wù)的映射歸約數(shù)目。
具體地,每個(gè)任務(wù)在被處理時(shí),每個(gè)任務(wù)對(duì)應(yīng)的子工作任務(wù)數(shù)目以及每個(gè)子工作任務(wù)對(duì)應(yīng)的映射歸約數(shù)目會(huì)記錄在歷史記錄中。任務(wù)調(diào)度系統(tǒng)可在需要時(shí)從歷史記錄中讀取任務(wù)對(duì)應(yīng)的各個(gè)子工作任務(wù)的映射歸約數(shù)目。
步驟206,獲取已提交任務(wù)集中各任務(wù)的各子工作任務(wù)的子工作任務(wù)運(yùn)行進(jìn)度。
具體地,任務(wù)調(diào)度系統(tǒng)可主動(dòng)向映射歸約系統(tǒng)查詢已提交任務(wù)集中各任務(wù)的各子工作任務(wù)的子工作任務(wù)運(yùn)行進(jìn)度,映射歸約系統(tǒng)也可以在已提交任務(wù)集中各任務(wù)的各子工作任務(wù)的子工作任務(wù)運(yùn)行進(jìn)度發(fā)生變化時(shí)通知任務(wù)調(diào)度系統(tǒng)。
子工作任務(wù)運(yùn)行進(jìn)度是指將子工作任務(wù)拆分成相應(yīng)的映射和歸約后運(yùn)行的進(jìn)展情況的量化表示,可以用相應(yīng)子工作任務(wù)對(duì)應(yīng)的映射歸約總量中已完成的映射歸約的比例來表示,也可以用相應(yīng)子工作任務(wù)對(duì)應(yīng)的映射歸約總量中未完成的映射歸約的比例來表示。
步驟208,根據(jù)讀取的映射歸約數(shù)目以及子工作任務(wù)運(yùn)行進(jìn)度,計(jì)算已提交任務(wù)集的未運(yùn)行的映射歸約的總數(shù)目。
具體地,任務(wù)調(diào)度系統(tǒng)讀取到子工作任務(wù)對(duì)應(yīng)的映射歸約數(shù)目,而且獲取到能夠反映映射歸約運(yùn)行的進(jìn)展情況的子工作任務(wù)運(yùn)行進(jìn)度,便可以推測(cè)出已提交任務(wù)集中的任務(wù)被拆分出子工作任務(wù)再拆分成映射和歸約后未運(yùn)行的映射歸約的總數(shù)目。未運(yùn)行的映射歸約的總數(shù)目反映的是已提交任務(wù)集中的任務(wù)處理時(shí)還需要的資源量。
在一個(gè)實(shí)施例中,子工作任務(wù)運(yùn)行進(jìn)度為相應(yīng)子工作任務(wù)對(duì)應(yīng)的映射歸約總量中已完成的映射歸約的比例;步驟208具體包括:根據(jù)子工作任務(wù)運(yùn)行進(jìn)度計(jì)算相應(yīng)子工作任務(wù)未完成的映射歸約的比例;將讀取的映射歸約數(shù)目以相應(yīng)子工作任務(wù)未完成的映射歸約的比例為權(quán)重計(jì)算加權(quán)和,獲得已提交任務(wù)集的未運(yùn)行的映射歸約的總數(shù)目。
舉例說明,假設(shè)已提交任務(wù)集的一個(gè)任務(wù)拆分成的子工作任務(wù)數(shù)量為n,從歷史記錄查詢到這n個(gè)子工作任務(wù)各自的映射歸約數(shù)目為c1、c2……cn,再從hadoop獲取到這n個(gè)子工作任務(wù)各自的子工作任務(wù)運(yùn)行進(jìn)度為p1、p2……pn,子工作任務(wù)運(yùn)行進(jìn)度以百分比形式表示。那么已提交任務(wù)集的未運(yùn)行的映射歸約的總數(shù)目為:c1*(1-p1)+c2*(1-p2)+……+cn*(1-pn)。其中,(1-p1)、(1-p2)……(1-pn)分別是根據(jù)子工作任務(wù)運(yùn)行進(jìn)度計(jì)算出的相應(yīng)子工作任務(wù)未完成的映射歸約的比例。
上述步驟202至步驟208通過歷史記錄和子工作任務(wù)運(yùn)行進(jìn)度,可以推測(cè)出正在執(zhí)行的任務(wù)還未運(yùn)行的映射歸約數(shù)目,從而可以推測(cè)出正在執(zhí)行的任務(wù)還需要的資源量,從而可以實(shí)現(xiàn)對(duì)已提交任務(wù)集的未運(yùn)行的映射歸約的總數(shù)目的快速計(jì)算,提高任務(wù)調(diào)度效率。
步驟210,逐個(gè)從待處理任務(wù)集中取出任務(wù)。
任務(wù)調(diào)度系統(tǒng)可按次序或者隨機(jī),逐個(gè)地從待處理任務(wù)集中取出任務(wù)進(jìn)行處理。按次序比如按照待處理任務(wù)集中任務(wù)的序號(hào)升序或降序的順序,還可以采用其它約定好的順序。
步驟212,從歷史記錄讀取取出的任務(wù)的映射歸約數(shù)目。
具體地,任務(wù)調(diào)度系統(tǒng)每取出一個(gè)任務(wù),從歷史記錄中讀取該取出的任務(wù)的映射歸約數(shù)目,以預(yù)測(cè)提交該任務(wù)時(shí)將拆分出的映射歸約數(shù)目,從而預(yù)測(cè)提交該任務(wù)進(jìn)行處理所需的資源量。
步驟214,判斷取出的任務(wù)的映射歸約數(shù)目與總數(shù)目的和是否小于等于預(yù)設(shè)數(shù)目;若是,則執(zhí)行步驟216之后執(zhí)行步驟210;若否,則執(zhí)行步驟218。
具體地,任務(wù)調(diào)度系統(tǒng)計(jì)算讀取到的取出的任務(wù)的映射歸約數(shù)目與總數(shù)目的和,從而判斷該計(jì)算出的和是否小于等于預(yù)設(shè)數(shù)目。如果判斷為是,即計(jì)算 出的和未超過預(yù)設(shè)數(shù)目,則執(zhí)行步驟216之后再執(zhí)行步驟210。如果判斷為否,即計(jì)算出的和超過預(yù)設(shè)數(shù)目,則執(zhí)行步驟218。
步驟216,將取出的任務(wù)加入待啟動(dòng)任務(wù)集,并更新總數(shù)目。
具體地,如果計(jì)算出的和未超出預(yù)設(shè)數(shù)目,說明將取出的任務(wù)提交后產(chǎn)生的映射歸約數(shù)目,加上當(dāng)前已提交任務(wù)集的未運(yùn)行映射歸約總數(shù)目,未超過hadoop系統(tǒng)的處理能力,取出的任務(wù)是可以提交的,加入到待啟動(dòng)任務(wù)集中。更新總數(shù)目時(shí),可在原本的總數(shù)目基礎(chǔ)上加上讀取到的取出的任務(wù)的映射歸約數(shù)目,獲得新的總數(shù)目。如果計(jì)算出的和小于預(yù)設(shè)數(shù)目,則可繼續(xù)執(zhí)行步驟210以取出下一個(gè)任務(wù)進(jìn)行處理,如果計(jì)算出的和等于預(yù)設(shè)數(shù)目,則可以直接提交待啟動(dòng)任務(wù)集。
步驟218,提交待啟動(dòng)任務(wù)集。
具體地,任務(wù)調(diào)度系統(tǒng)將待啟動(dòng)任務(wù)集提交到任務(wù)拆分系統(tǒng)進(jìn)行處理。
在一個(gè)實(shí)施例中,步驟218具體包括:判斷是否滿足:總數(shù)目小于預(yù)設(shè)數(shù)目的第一條件和/或待處理任務(wù)集中還有任務(wù)的第二條件;若第一條件和第二條件均滿足,則執(zhí)行逐個(gè)從待處理任務(wù)集中取出任務(wù)的步驟;若第一條件和第二條件中至少一者不滿足,則提交待啟動(dòng)任務(wù)集。
具體地,預(yù)先設(shè)置第一條件和第二條件,任務(wù)調(diào)度系統(tǒng)可先判斷是否滿足第一條件和第二條件中的一個(gè),若不滿足則再判斷是否滿足另一個(gè)。當(dāng)?shù)谝粭l件和第二條件均滿足時(shí),說明hadoop系統(tǒng)還可以承接新任務(wù)且待處理任務(wù)集中也確實(shí)有需要提交的任務(wù),則可以繼續(xù)執(zhí)行步驟210來精確控制需提交的任務(wù)。當(dāng)?shù)谝粭l件和第二條件中至少一個(gè)不滿足時(shí),或者h(yuǎn)adoop系統(tǒng)無法承接新任務(wù),或者待處理任務(wù)集已經(jīng)處理完畢,則可以提交待啟動(dòng)任務(wù)集。
本實(shí)施例中,利用歷史記錄來預(yù)測(cè)hadoop系統(tǒng)精確到映射歸約維度的任務(wù)承接能力,從而逐個(gè)地從待處理任務(wù)集中篩選符合hadoop系統(tǒng)的任務(wù)承接能力的待啟動(dòng)任務(wù),且篩選出的待啟動(dòng)任務(wù)將盡可能接近預(yù)設(shè)數(shù)目,以保證hadoop系統(tǒng)資源的有效利用,避免資源浪費(fèi)。
如圖3所示,在一個(gè)實(shí)施例中,提供了一種基于hadoop系統(tǒng)的任務(wù)調(diào)度裝 置300,包括:統(tǒng)計(jì)模塊310、第一讀取模塊320、篩選模塊330和提交模塊340。
統(tǒng)計(jì)模塊310,用于統(tǒng)計(jì)已提交任務(wù)未運(yùn)行的映射歸約的總數(shù)目。
第一讀取模塊320,用于從歷史記錄中讀取待處理任務(wù)集中任務(wù)的映射歸約數(shù)目。
篩選模塊330,用于按照預(yù)設(shè)周期從待處理任務(wù)集中篩選出待啟動(dòng)任務(wù),待啟動(dòng)任務(wù)的映射歸約數(shù)目與總數(shù)目的和小于等于預(yù)設(shè)數(shù)目。預(yù)設(shè)數(shù)目為hadoop系統(tǒng)在預(yù)設(shè)周期內(nèi)可運(yùn)行的映射歸約數(shù)目。
提交模塊340,用于提交待啟動(dòng)任務(wù)。
上述基于hadoop系統(tǒng)的任務(wù)調(diào)度裝置300,雖然單個(gè)任務(wù)消耗的資源量是不同的,但是hadoop系統(tǒng)在處理任務(wù)時(shí)會(huì)將任務(wù)拆分成若干子工作任務(wù)(稱為job),而子工作任務(wù)在處理時(shí)又會(huì)拆分成映射(稱為map)和歸約(稱為reduce),每個(gè)映射或者歸約消耗的資源量是固定的。因此依據(jù)hadoop系統(tǒng)在預(yù)設(shè)周期內(nèi)可運(yùn)行的映射歸約數(shù)目來定期約束任務(wù)的提交,可以精確控制hadoop系統(tǒng)處理任務(wù)所消耗的資源量,實(shí)現(xiàn)負(fù)載均衡。而且利用任務(wù)的歷史記錄,可通過任務(wù)歷史的映射歸約數(shù)目來預(yù)測(cè)待處理任務(wù)的映射歸約數(shù)目,保證了可以快速確定待處理任務(wù)的映射歸約數(shù)目,從而保障任務(wù)調(diào)度的效率。
如圖4所示,在一個(gè)實(shí)施例中,統(tǒng)計(jì)模塊310包括:獲取模塊311、第二讀取模塊312、子工作任務(wù)運(yùn)行進(jìn)度獲取模塊313和計(jì)算模塊314。
獲取模塊311,用于獲取已提交任務(wù)集;
第二讀取模塊312,用于從歷史記錄讀取已提交任務(wù)集中各任務(wù)所對(duì)應(yīng)的子工作任務(wù)的映射歸約數(shù)目;
子工作任務(wù)運(yùn)行進(jìn)度獲取模塊313,用于獲取已提交任務(wù)集中各任務(wù)的各子工作任務(wù)的子工作任務(wù)運(yùn)行進(jìn)度;
計(jì)算模塊314,用于根據(jù)讀取的映射歸約數(shù)目以及子工作任務(wù)運(yùn)行進(jìn)度,計(jì)算已提交任務(wù)集的未運(yùn)行的映射歸約的總數(shù)目。
本實(shí)施例中,通過歷史記錄和子工作任務(wù)運(yùn)行進(jìn)度,可以推測(cè)出正在執(zhí)行的任務(wù)還未運(yùn)行的映射歸約數(shù)目,從而可以推測(cè)出正在執(zhí)行的任務(wù)還需要的資源量,從而可以實(shí)現(xiàn)對(duì)已提交任務(wù)集的未運(yùn)行的映射歸約的總數(shù)目的快速計(jì)算, 提高任務(wù)調(diào)度效率。
在一個(gè)實(shí)施例中,子工作任務(wù)運(yùn)行進(jìn)度為相應(yīng)子工作任務(wù)對(duì)應(yīng)的映射歸約總量中已完成的映射歸約的比例。計(jì)算模塊314還用于根據(jù)子工作任務(wù)運(yùn)行進(jìn)度計(jì)算相應(yīng)子工作任務(wù)未完成的映射歸約的比例;將讀取的映射歸約數(shù)目以相應(yīng)子工作任務(wù)未完成的映射歸約的比例為權(quán)重計(jì)算加權(quán)和,獲得已提交任務(wù)集的未運(yùn)行的映射歸約的總數(shù)目。
如圖5所示,在一個(gè)實(shí)施例中,篩選模塊330包括:任務(wù)提取模塊331、第三讀取模塊332、第一判斷模塊333和待啟動(dòng)任務(wù)集更新模塊334。
任務(wù)提取模塊331,用于逐個(gè)從待處理任務(wù)集中取出任務(wù)。
第三讀取模塊332,用于從歷史記錄讀取取出的任務(wù)的映射歸約數(shù)目。
第一判斷模塊333,用于判斷取出的任務(wù)的映射歸約數(shù)目與總數(shù)目的和是否小于等于預(yù)設(shè)數(shù)目。
待啟動(dòng)任務(wù)集更新模塊334,用于若第一判斷模塊判斷為是,則將取出的任務(wù)加入待啟動(dòng)任務(wù)集,更新總數(shù)目,并通知任務(wù)提取模塊331。
提交模塊340還用于若第一判斷模塊333判斷為否,則提交待啟動(dòng)任務(wù)集。
在一個(gè)實(shí)施例中,篩選模塊330還包括第二判斷模塊335。
第二判斷模塊335,用于若第一判斷模塊333判斷為否,則繼續(xù)判斷是否滿足:總數(shù)目小于預(yù)設(shè)數(shù)目的第一條件和/或待處理任務(wù)集中還有任務(wù)的第二條件。
任務(wù)提取模塊331還用于若第一條件和第二條件均滿足,則繼續(xù)逐個(gè)從待處理任務(wù)集中取出任務(wù)。
提交模塊340還用于若第一條件和第二條件中至少一者不滿足,則提交待啟動(dòng)任務(wù)集。
本實(shí)施例中,利用歷史記錄來預(yù)測(cè)hadoop系統(tǒng)精確到映射歸約維度的任務(wù)承接能力,從而逐個(gè)地從待處理任務(wù)集中篩選符合hadoop系統(tǒng)的任務(wù)承接能力的待啟動(dòng)任務(wù),且篩選出的待啟動(dòng)任務(wù)將盡可能接近預(yù)設(shè)數(shù)目,以保證hadoop系統(tǒng)資源的有效利用,避免資源浪費(fèi)。
以上所述實(shí)施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡潔,未對(duì) 上述實(shí)施例中的各個(gè)技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說明書記載的范圍。
以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。