亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于最小生成樹(shù)聚類改進(jìn)遺傳算法的Hadoop任務(wù)調(diào)度方法與流程

文檔序號(hào):11774229閱讀:344來(lái)源:國(guó)知局
基于最小生成樹(shù)聚類改進(jìn)遺傳算法的Hadoop任務(wù)調(diào)度方法與流程

本發(fā)明屬于hadoop平臺(tái)的任務(wù)調(diào)度問(wèn)題,實(shí)際上也是任務(wù)和tasktracker之間的組合優(yōu)化問(wèn)題。首先通過(guò)引入minjob和singlepercent兩個(gè)參數(shù)以及結(jié)合當(dāng)前集群中可用的slot數(shù)量構(gòu)建調(diào)度模型,然后將預(yù)測(cè)執(zhí)行時(shí)間、本地任務(wù)個(gè)數(shù)和機(jī)器負(fù)載作為優(yōu)化目標(biāo),最后采用基于聚類改進(jìn)的遺傳算法對(duì)其進(jìn)行優(yōu)化,是一種使用計(jì)算技術(shù)、遺傳算法、聚類分析實(shí)現(xiàn)對(duì)大數(shù)據(jù)處理平臺(tái)hadoop任務(wù)調(diào)度的方式。



背景技術(shù):

由于現(xiàn)在的衣食住行和工作等越來(lái)越依賴于互聯(lián)網(wǎng),導(dǎo)致了互聯(lián)網(wǎng)中數(shù)據(jù)的爆發(fā)式增長(zhǎng),而這些數(shù)據(jù)不僅僅是量級(jí)上的增長(zhǎng),在這些數(shù)據(jù)的背后隱藏著很多的信息,這些信息往往對(duì)某個(gè)企業(yè)乃至某個(gè)行業(yè)來(lái)說(shuō)都是至關(guān)重要的。在這樣的背景下開(kāi)源大數(shù)據(jù)平臺(tái)hadoop成為了使用最廣泛的大數(shù)據(jù)處理平臺(tái)之一。

hadoop平臺(tái)中最關(guān)鍵的的一個(gè)環(huán)節(jié)之一便是根據(jù)任務(wù)對(duì)資源的需求控制任務(wù)執(zhí)行順序和資源使用的調(diào)度環(huán)節(jié)。這個(gè)環(huán)節(jié)直接關(guān)系到hadoop平臺(tái)的整體性能和系統(tǒng)資源的利用情況。hadoop官方現(xiàn)在有三種調(diào)度算法fifo、capacity和fair,但是fifo只適合于單用戶和集群負(fù)載比較小的情況,capacity和fair雖然是多用戶的但都是根據(jù)配置文件來(lái)控制資源的資源使用,這需要配置大量的參數(shù),這無(wú)疑加大了管理的難度并且在一個(gè)有幾百臺(tái)機(jī)器的異構(gòu)集群中幾乎是不可能的。

針對(duì)hadoop現(xiàn)有調(diào)度算法的缺點(diǎn),很多研究學(xué)者都對(duì)其進(jìn)行了研究和改進(jìn)并提出了自己的調(diào)度算法。mateizaharia等人提出了延遲調(diào)度算法,在這種算法中,當(dāng)有slave節(jié)點(diǎn)請(qǐng)求分配map任務(wù)時(shí),如果無(wú)法滿足節(jié)點(diǎn)的本地性,則先讓map任務(wù)等待d1時(shí)長(zhǎng),希望在這段時(shí)間以內(nèi)有滿足map任務(wù)本地性的slave節(jié)點(diǎn)請(qǐng)求任務(wù)。但是這樣在集群負(fù)載很大的時(shí)候容易造成某個(gè)任務(wù)等待時(shí)間過(guò)長(zhǎng)。ghods等人提出了dominantresoucefairness(drf),drf算法意在將資源公平地分給不同的用戶,但這種算法不適用于異構(gòu)集群。rasooli等人提出了coshh,他針對(duì)不同類型的作業(yè)對(duì)資源的需求不同提出了這種算法,但是這種算法開(kāi)銷(xiāo)很大,當(dāng)集群的負(fù)載變輕時(shí),并不適用。jiantan等人提出了一種調(diào)度reduce任務(wù)的策略,在該算法中,根據(jù)map任務(wù)的進(jìn)度計(jì)算reduce任務(wù)的調(diào)度時(shí)機(jī)。但是該算法中沒(méi)有考慮map任務(wù)的執(zhí)行時(shí)間問(wèn)題。xiaotongzhang等人提出了改進(jìn)的srt算法,該算法根據(jù)map任務(wù)的最短食欲時(shí)間來(lái)調(diào)度任務(wù)。但該算法容易導(dǎo)致系統(tǒng)資源得不到充分的利用。國(guó)內(nèi)學(xué)者楊倩茹等人提出了一種引入內(nèi)存平衡的hadoop平臺(tái)作業(yè)調(diào)度算法fmscheduler,在調(diào)度過(guò)程中加入了內(nèi)存比較機(jī)制、調(diào)整作業(yè)公平權(quán)重計(jì)算方法以及作業(yè)預(yù)留機(jī)制。朱宗斌等人提出了一種基于自適應(yīng)調(diào)整交叉和變異操作的概率的遺傳算法的hadoop調(diào)度算法,但是他對(duì)任務(wù)本身只考慮了任務(wù)執(zhí)行時(shí)間這一個(gè)約束條件并且并沒(méi)有對(duì)遺傳算子進(jìn)行改進(jìn)。徐肖等提出了一種基于分段編碼遺傳算法的hadoop調(diào)度算法,但是他的適應(yīng)度函數(shù)也只考慮了任務(wù)執(zhí)行時(shí)間這一個(gè)約束條件。

因此,本發(fā)明通過(guò)引入了2個(gè)參數(shù):一次最少處理job個(gè)數(shù)minjob和當(dāng)一個(gè)大任務(wù)獨(dú)占資源時(shí)最多可占用的資源比例singlepercent并結(jié)合當(dāng)前集群中可用的slot數(shù)目來(lái)建立hadoop任務(wù)調(diào)度模型,并以任務(wù)預(yù)測(cè)執(zhí)行時(shí)間、本地任務(wù)個(gè)數(shù)以及機(jī)器負(fù)載作為優(yōu)化目標(biāo),使用基于最小生成樹(shù)聚類改進(jìn)的遺傳算法(cga)來(lái)求解模型。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的是通過(guò)較少的配置文件項(xiàng)以及集群中的可用slot數(shù)目建立一個(gè)更合理的使用遺傳算法進(jìn)行hadoop任務(wù)調(diào)度的模型,然后采用任務(wù)預(yù)測(cè)執(zhí)行時(shí)間、本地任務(wù)個(gè)數(shù)和機(jī)器負(fù)載作為優(yōu)化目標(biāo),并采用基于最小生成樹(shù)聚類改進(jìn)的遺傳算法求解模型以得到性能更好的調(diào)度器。

設(shè)定一個(gè)hadoop集群,hadoop集群中有p個(gè)tasktracker,m個(gè)job被提交到j(luò)obtracker,ttsl表示tasktracker的列表,且ttsl={tts1,tts2,...,ttsp},ttsl中的各個(gè)元素表示各個(gè)tasktracker的列表;jobqueue表示job的隊(duì)列,jobqueue={job1,job2,...,jobm},jobqueue中的各個(gè)元素表示各個(gè)job。

1.構(gòu)建taskqueue

用戶使用hadoop集群時(shí),被初始化后的job都以jobinprogress對(duì)象的形式都存放在jobqueue中。hadoop調(diào)度問(wèn)題最終是一個(gè)task和tasktracker的組合優(yōu)化問(wèn)題,因此使用遺傳算法解決hadoop調(diào)度問(wèn)題的第一步便是將jobqueue中的job使用策略構(gòu)造taskqueue。

通過(guò)引入兩個(gè)參數(shù)和當(dāng)前集群中可用的slot數(shù)目來(lái)自適應(yīng)地確定taskqueue的長(zhǎng)度和taskqueue中的task,該taskqueue與編碼緊密相關(guān),參數(shù)如下:

minjob:一次最少處理job個(gè)數(shù),由用戶配置文件實(shí)現(xiàn),是一個(gè)大于1的整數(shù)。

singlepercent:當(dāng)一個(gè)大任務(wù)獨(dú)占資源時(shí)最多可占用的資源比例,由用戶配置文件實(shí)現(xiàn),是一個(gè)0-1之間的浮點(diǎn)數(shù)。

numsofslot:當(dāng)前集群中可用的slot的數(shù)目,由系統(tǒng)自動(dòng)獲取。

2.適應(yīng)度函數(shù)

在遺傳算法中,適應(yīng)度函數(shù)有著至關(guān)重要的作用,因遺傳算法的思想來(lái)源于自然進(jìn)化中的“優(yōu)勝劣汰”,每個(gè)染色體的優(yōu)劣程度便是由適應(yīng)度函數(shù)決定的。

在hadoop集群中,調(diào)度器的性能直接影響著hadoop的性能,而衡量一個(gè)調(diào)度器性能的指標(biāo)有以下幾條:

(1)所有作業(yè)的平均完成時(shí)間。

(2)任務(wù)的本地性

(3)能否滿足用戶的資源需求

(4)集群中各個(gè)節(jié)點(diǎn)的負(fù)載

采用任務(wù)預(yù)測(cè)執(zhí)行時(shí)間、本地任務(wù)個(gè)數(shù)以及機(jī)器負(fù)載三項(xiàng)性能指標(biāo)的組合作為適應(yīng)度函數(shù)。而且這三個(gè)性能指標(biāo)是通過(guò)構(gòu)建3個(gè)矩陣來(lái)完成計(jì)算的,分別是任務(wù)預(yù)測(cè)執(zhí)行時(shí)間etc矩陣,本地任務(wù)ltc矩陣以及機(jī)器負(fù)載loadlist矩。

2.1構(gòu)建三個(gè)數(shù)據(jù)結(jié)構(gòu)

(1)構(gòu)建etc矩陣

構(gòu)建etc矩陣是根據(jù)taskqueue和tasktracker的列表進(jìn)行構(gòu)建的,如圖2所示為一個(gè)etc矩陣,其元素eij代表第i個(gè)任務(wù)在第j個(gè)tasktracker上的預(yù)測(cè)執(zhí)行時(shí)間。

(2)構(gòu)建ltc矩陣

構(gòu)建ltc矩陣是根據(jù)taskqueue和tasktracker的列表進(jìn)行構(gòu)建的,如圖2所示為一個(gè)etc矩陣,其元素lij代表第i個(gè)任務(wù)在第j個(gè)tasktracker上是否為本地任務(wù)。

(3)構(gòu)建loadlist

loadlist是根據(jù)tasktracker上的能夠使用的資源個(gè)數(shù)和正在執(zhí)行的任務(wù)個(gè)數(shù)來(lái)確定的。

2.2構(gòu)建適應(yīng)度函數(shù)

有了以上三個(gè)數(shù)據(jù)結(jié)構(gòu)就可以構(gòu)造適應(yīng)度函數(shù)了。

本方法對(duì)染色體的評(píng)價(jià)是對(duì)染色體解碼以后進(jìn)行計(jì)算,并且使用預(yù)測(cè)執(zhí)行時(shí)間、本地性數(shù)量、負(fù)載三個(gè)標(biāo)準(zhǔn)同時(shí)進(jìn)行衡量。

3.在表現(xiàn)型空間進(jìn)行種群劃分操作

編碼使用任務(wù)編號(hào)-tasktracker編號(hào),所以遺傳算法種群中個(gè)體之間的有以下特點(diǎn):

(1)基因型空間中個(gè)體的索引代表任務(wù)的編號(hào)

(2)基因型空間中每一個(gè)索引上的值代表的是tasktracker的編號(hào)

(3)表現(xiàn)型空間解碼后的個(gè)體有任務(wù)預(yù)測(cè)執(zhí)行時(shí)間、本地性任務(wù)個(gè)數(shù)和機(jī)器負(fù)載三個(gè)特征

以上三個(gè)特點(diǎn)導(dǎo)致按照基因型空間各個(gè)基因位上值的歐式距離表示個(gè)體間的相似性是沒(méi)有意義的。

因此在計(jì)算種群的相似度矩陣時(shí)要在表現(xiàn)型空間,計(jì)算方法:根據(jù)解碼后個(gè)體的任務(wù)預(yù)測(cè)執(zhí)行時(shí)間、本地性認(rèn)為個(gè)數(shù)和機(jī)器負(fù)載三個(gè)特種計(jì)算歐式距離確定他們之間的相似性。

4.使用基于最小生成樹(shù)改進(jìn)的遺傳算法(cga)尋找最優(yōu)解

將cga用于調(diào)度hadoop任務(wù),編碼方式采用task編號(hào)-tasktracker編號(hào),適應(yīng)度函數(shù)采用預(yù)測(cè)執(zhí)行時(shí)間、本地任務(wù)數(shù)、負(fù)載三個(gè)指標(biāo)的組合。聚類操作在表現(xiàn)型空間進(jìn)行,如下為基于cga的hadoop調(diào)度算法的步驟:

step1.根據(jù)配置文件中的參數(shù)minjob和singlepercent以及jobqueue中的job生成待調(diào)度的任務(wù)列表taskqueue。

step2.通過(guò)tasktrackermanager獲取集群中tasktracker列表ttsl。

step3.根據(jù)taskqueue和ttsl構(gòu)建etc矩陣,ltc矩陣以及l(fā)oadlist。

step4.根據(jù)taskqueue、ttsl以及popsize進(jìn)行種群初始化,設(shè)當(dāng)前代數(shù)為1。

step5.令當(dāng)前種群為pop,判斷是否滿足停止進(jìn)化條件,如果滿足執(zhí)行step10;如果不滿足到step6。

step6.對(duì)pop中的染色體進(jìn)行解碼,解碼后求出每個(gè)染色體的預(yù)測(cè)執(zhí)行時(shí)間timeexcute、totalnumlocal、load,然后根據(jù)這三個(gè)屬性求出種群中個(gè)體的相似度矩陣dis。

step7.將pop中的染色體兩兩之間形成一條邊構(gòu)建一個(gè)無(wú)向圖,并使用dis中的值作為無(wú)向圖中邊的權(quán)值形成有權(quán)無(wú)向圖g,然后使用最小生成樹(shù)聚類對(duì)種群進(jìn)行劃分。

step8.對(duì)pop進(jìn)行輪盤(pán)賭選出一個(gè)個(gè)體indiv1,然后隨機(jī)生成一個(gè)0-1之間的浮點(diǎn)數(shù),如果浮點(diǎn)數(shù)大于交叉概率pc,直接把選擇出的個(gè)體遺傳到新種群popn中,否則,獲取indiv1的類別為classid1,再隨機(jī)的在pop中選取一個(gè)個(gè)體indiv2,獲取indiv2的類別為classid2,使得classid1?。絚lassid2,然后使得indiv2與indiv1進(jìn)行交叉操作,然后把新個(gè)體放入popn中,并把這個(gè)過(guò)程循環(huán)popsize次。

step9.對(duì)popn進(jìn)行輪盤(pán)賭選擇選出一個(gè)個(gè)體indiv,隨機(jī)生成一個(gè)0-1間的浮點(diǎn)數(shù),如果這個(gè)浮點(diǎn)數(shù)大于pm,則把indiv直接遺傳至popnm中,否則,對(duì)indivi進(jìn)行變異操作,把變異后的結(jié)果放入popnm中,把這個(gè)過(guò)程循環(huán)popsize次。并使pop=popnm;

step10.選出pop中適應(yīng)度值最好的一個(gè)染色體記為bestindiv,對(duì)bestindiv進(jìn)行解碼操作生成一個(gè)map數(shù)據(jù)結(jié)構(gòu),key值為tasktracker的編號(hào),value值為要在該tasktracker上執(zhí)行的任務(wù)列表。

step11.根據(jù)請(qǐng)求調(diào)度任務(wù)的tasktracker的名稱,把任務(wù)列表返回給jobtracker。

與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):

1).本發(fā)明中的調(diào)度器配置文件中只有兩個(gè)配置參數(shù):minjob和singlepercent,再系統(tǒng)自動(dòng)獲取的當(dāng)前集群中可用的slot數(shù)目不僅可以自適應(yīng)地確定taskqueue的長(zhǎng)度,即遺傳算法編碼長(zhǎng)度,而且可以防止一個(gè)大的任務(wù)獨(dú)占資源,建立了更加合理的模型。

2).本發(fā)明中將hadoop任務(wù)調(diào)度問(wèn)題看做是任務(wù)和tasktracker之間的組合優(yōu)化問(wèn)題,使用任務(wù)預(yù)測(cè)執(zhí)行時(shí)間、本地任務(wù)個(gè)數(shù)和機(jī)器負(fù)載作為性能指標(biāo)同時(shí)也是優(yōu)化目標(biāo),采用遺傳算法進(jìn)行尋優(yōu)可以為tasktracker分配更加合適的任務(wù)列表。

2).本發(fā)明采用了基于最小生成樹(shù)聚類改進(jìn)遺傳算法對(duì)建立hadoop任務(wù)調(diào)度模型進(jìn)行優(yōu)化求解,改進(jìn)的遺傳算法通過(guò)對(duì)種群進(jìn)行最小生成樹(shù)聚類,使物種內(nèi)的個(gè)體具有很高的相似度,而物種間的相似度較低,利用物種間的交叉可以維持種群多樣性,抑制未成熟收斂現(xiàn)象。

3).將本發(fā)明使得聚類操作在表現(xiàn)型空間進(jìn)行,采用每個(gè)個(gè)體解碼后的預(yù)測(cè)執(zhí)行時(shí)間、本地任務(wù)個(gè)數(shù)以及機(jī)器負(fù)載計(jì)算個(gè)體間的間距,使得聚類更有實(shí)際意義,最終得到的調(diào)度器性能更高。

附圖說(shuō)明

圖1構(gòu)建taskqueue流程;

圖2etc矩陣圖示;

圖3ltc矩陣圖示;

圖4為本發(fā)明所涉及方法的主流程圖;

圖5染色體示意圖

圖6解碼后的染色體示意圖

具體實(shí)施方式

下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步說(shuō)明。

本方法將hadoop任務(wù)調(diào)度看做是任務(wù)和tasktracker的組合優(yōu)化問(wèn)題,采用task編號(hào)-tasktracker編號(hào),即一條染色體即為一種解決方案。使用預(yù)測(cè)執(zhí)行時(shí)間、本地任務(wù)個(gè)數(shù)和機(jī)器負(fù)載的組合作為適應(yīng)度函數(shù)。使用cga對(duì)所構(gòu)建的模型求解對(duì)中得到一種在預(yù)測(cè)執(zhí)行時(shí)間、本地任務(wù)個(gè)數(shù)和機(jī)器負(fù)載三個(gè)方面都相對(duì)較好的解決方案。

本方法所涉及的主流程如圖4所示,包括以下步驟;

步驟一,設(shè)定參數(shù),進(jìn)行個(gè)體編碼。

1.設(shè)定參數(shù)

需要用戶設(shè)定的參數(shù)只有連個(gè),minrun和singlepercent,這里令minrun=3,lengthoftaskqueue=20。

遺傳算法參數(shù):popsize=50,pc=0.6,pm=0.2,聚類系數(shù)0.9,maxgen=80。

2.計(jì)算taskqueue

3.構(gòu)建taskqueue的整個(gè)過(guò)程如圖1所示,步驟如下:

(1)設(shè)置配置文件,在配置文件中設(shè)置兩個(gè)變量,一個(gè)是默認(rèn)處理的job數(shù)量minjob,它的值是一個(gè)整數(shù)默認(rèn)值是3;一個(gè)是當(dāng)某個(gè)大job出現(xiàn)時(shí),為了避免它獨(dú)占集群中的資源,允許它占資源總量的百分比singlepercent,它的值是一個(gè)大于0小于1的浮點(diǎn)數(shù),默認(rèn)值0.5。這也是使用遺傳算法構(gòu)建hadoop調(diào)度器的一個(gè)優(yōu)點(diǎn),相比hadoop現(xiàn)有三種調(diào)度器的十幾項(xiàng)繁瑣的配置參數(shù),本方法的調(diào)度器僅需配置這兩個(gè)參數(shù)。

(2)對(duì)比配置文件中的minjob的值和jobqueue的長(zhǎng)度,如果jobqueue的長(zhǎng)度大于等于minjob則從jobqueue中取出minjob個(gè)job,否則把jobqueue中的job都取出,并令minjob=j(luò)obqueue.size()。

(3)創(chuàng)建一個(gè)taskqueue,初始長(zhǎng)度lengthoftaskqueue為此時(shí)集群中可用的slot數(shù)量。并獲取minjob個(gè)job的task總數(shù)s。

(4)如果s>lengthoftaskqueue,并且minrun>1,令minrun=minrun-1,再獲取s并與lengthoftaskqueue比較;如果s<lengthoftaskqueue跳轉(zhuǎn)到(5),s=lengthoftaskqueue,跳轉(zhuǎn)到(6)。

(5)如果s<lengthoftaskqueue,令offset=lengthoftaskqueue–s,并再?gòu)膉obqueue中取第minjob+1個(gè)job的offset個(gè)task。

(6)如果s=lengthoftaskqueue,則把minrun個(gè)job的task直接放到taskqueue中。

(7)如果s>lengthoftaskqueue并且minrun=1,taskqueue為空,則令s=int[lengthoftaskqueue*singlepercent],然后取這個(gè)job的s個(gè)task放入taskqueue中;再令lengthoftaskqueue=lengthoftaskqueue–s,minrun=配置文件中的初始值,然后取jobqueue中從第2個(gè)job開(kāi)始的minrun個(gè),s為這minrun個(gè)job的task數(shù),轉(zhuǎn)入(4)。

4.計(jì)算etc矩陣

因?yàn)椴煌脩艟帉?xiě)的mapreduce對(duì)資源是需求不相同,所以在調(diào)度的過(guò)程中要考慮job本身的資源需求和tasktracker的資源特性對(duì)任務(wù)執(zhí)行的影響。job本身的資源需求被稱為作業(yè)特征,用來(lái)表示job對(duì)資源的使用情況,比如job的cpu平均使用率、內(nèi)存的平均使用率等,作業(yè)特征用戶編寫(xiě)mapreduce程序的時(shí)候進(jìn)行設(shè)定;tasktracker的資源特性被稱為節(jié)點(diǎn)特征,用來(lái)描述單個(gè)tasktracker節(jié)點(diǎn)上計(jì)算資源的狀態(tài)和質(zhì)量,如某個(gè)tasktracker上cpu的使用率、空閑的物理內(nèi)存以及可用的slot數(shù)量等,tasktracker的節(jié)點(diǎn)特征又分為兩類,系統(tǒng)運(yùn)行過(guò)程中保持不變的節(jié)點(diǎn)屬性,如處理器的個(gè)數(shù)、物理內(nèi)存總量等,和在作業(yè)執(zhí)行過(guò)程會(huì)隨之變化的節(jié)點(diǎn)屬性,如cpu的使用率、內(nèi)存的空閑量等。tasktracker的節(jié)點(diǎn)特性會(huì)通過(guò)心跳信息匯報(bào)給jobtracker。

設(shè)有m種資源m[r1,r2,...,rm],如果任務(wù)t用戶為其配置的資源為t[x1,x2,...,xm],而某個(gè)tasktracker擁有的資源量為[y1,y2,...,ym]。

通過(guò)這兩者間資源的比值得出一個(gè)相對(duì)權(quán)值,取所有資源中權(quán)值最大的那個(gè),就是該任務(wù)在該tasktracker上執(zhí)行時(shí)tasktracker擁有的資源相對(duì)于任務(wù)對(duì)資源的需求最少滿足的那個(gè)資源。權(quán)值ω計(jì)算方式:

通過(guò)tasktracker的歷史信息計(jì)算出該tasktracker在以往的歷史任務(wù)中,執(zhí)行map任務(wù)的平均速度avemapexcutetime和執(zhí)行reduce的平均速度avereduceexcutetime;

使得權(quán)值ω和任務(wù)在該節(jié)點(diǎn)上執(zhí)行的平均速度相乘便估算出該任務(wù)在該tasktracker上執(zhí)行需要的時(shí)間。即

mapexcutetime=ω*avemapexcutetime(2)

reduceexcutetime=ω*avereduceexcutetime(3)

但是根據(jù)task的某些不同性質(zhì)計(jì)算的方式也略有差別。根據(jù)mapreduce框架任務(wù)分為map和reduce,而對(duì)于map任務(wù)來(lái)說(shuō)又有數(shù)據(jù)本地性和非本地性之分,任務(wù)是否在本地執(zhí)行對(duì)于任務(wù)執(zhí)行時(shí)間來(lái)說(shuō)是關(guān)鍵的。根據(jù)作業(yè)對(duì)資源的需求不同,將作業(yè)分為i/o密集型和cpu密集型。這兩種類型的作業(yè)正如其名,i/o密集型的任務(wù)一般會(huì)伴隨有大量數(shù)據(jù)的輸入輸出,需要較大的存儲(chǔ)空間,而cpu密集型的任務(wù)多是計(jì)算復(fù)雜型但是并沒(méi)有太大的數(shù)據(jù)輸出輸入,因此需要占用較多的cpu,這兩類任務(wù)的執(zhí)行預(yù)測(cè)時(shí)間計(jì)算方式也是不同的。

因此,在公式(2)和公式(3)的基礎(chǔ)上按照以下分類計(jì)算某個(gè)任務(wù)在某個(gè)tasktracker上的預(yù)測(cè)執(zhí)行時(shí)間。

map

在hadoop中,cpu密集型的任務(wù)多是做科學(xué)計(jì)算,因此根據(jù)一個(gè)maptask是否有輸入的block來(lái)判斷是否為cpu密集型任務(wù)。jobinprogress中有一個(gè)方法getnonlocalmaps()能夠用來(lái)判斷一個(gè)task是否有輸入數(shù)據(jù)塊。如果沒(méi)有輸入數(shù)據(jù)塊,則說(shuō)明該任務(wù)為cpu密集型,否則為i/o密集型。

acpu密集型map

在使用公式(1)計(jì)算ω時(shí),為每一項(xiàng)資源增加一個(gè)權(quán)值,并且各項(xiàng)的權(quán)值之和為1,由于cpu密集型的任務(wù),要占用較多的cpu,所以給cpu的權(quán)值較大一些,剩下的資源權(quán)值相同,以突顯cpu的比重。假設(shè)現(xiàn)有一個(gè)cpu密集型的map,其需要占用cpu百分比為x1,而tasktracker的cpu使用率為y1,a和b均為子權(quán)值,此處,a為第一項(xiàng)的子權(quán)值,b為其余項(xiàng)的子權(quán)值,且a>b,a+(m-1)*b=1,則

mapexcutetime=ω*avemapexutetime(5)

bi/o密集型map

由于i/o密集型需要讀取大量的輸入數(shù)據(jù)并伴隨大量輸出數(shù)據(jù)的寫(xiě)入,所以這類任務(wù)對(duì)內(nèi)存的需求會(huì)比較大,因此在計(jì)算ω時(shí)要把內(nèi)存的權(quán)重設(shè)置大一些,而且涉及到計(jì)算所輸入的數(shù)據(jù)是否是在tasktracker本地,如果不在本地,任務(wù)的執(zhí)行時(shí)間的估算需要加上從hdfs下載輸入數(shù)據(jù)所需的時(shí)間。

現(xiàn)假設(shè)有一個(gè)i/o密集型map任務(wù),其需要占用內(nèi)存為x2,而tasktracker的可用內(nèi)存為y2,a和b均為子權(quán)值,此處,b為第一項(xiàng)的子權(quán)值,a為其余項(xiàng)的子權(quán)值,且a>b,a+(m-1)*b=1,則

如果tasktracker為該map所需輸入數(shù)據(jù)的本地節(jié)點(diǎn),則

mapexcutetime=ω*avemapexcutetime(7)

否則,假設(shè)該節(jié)點(diǎn)從hdfs將map執(zhí)行所需輸入數(shù)據(jù)下載到本地需要的時(shí)間為tdownload,則

mapexcutetime=ω*avemapexcutetime+tdownload(8)

reduce

由于數(shù)據(jù)本地性這個(gè)概念只是針對(duì)map才有的,所以對(duì)于reduce

reduceexcutetime=ω*avereduceexcutetime(9)

為了便于適應(yīng)度函數(shù)值的計(jì)算,這里引入一個(gè)矩陣,用來(lái)表示各個(gè)任務(wù)在每個(gè)tasktracker上的預(yù)測(cè)執(zhí)行時(shí)間,稱為etc矩陣。假設(shè)現(xiàn)在集群中有p個(gè)任務(wù)等待調(diào)度,有q個(gè)tasktracker作為執(zhí)行任務(wù)的節(jié)點(diǎn),即

t=[t1,t2,...,tp]

r=[tt1,tt2,...,ttq]

則etc矩陣的大小為p*q,如圖2所示,其中i∈[1,p],j∈[1,q]

etc矩陣中的元素ei,j表示第i個(gè)任務(wù)在第j個(gè)tasktracker上面的預(yù)測(cè)執(zhí)行時(shí)間,是通過(guò)上面提到的流程計(jì)算出的。

5.計(jì)算ltc矩陣

任務(wù)的本地性也是衡量調(diào)度器性能的一個(gè)重要標(biāo)準(zhǔn),在本文中會(huì)構(gòu)建一個(gè)矩陣ltc,其元素li,j表示第i個(gè)任務(wù)在第j個(gè)tasktracker上面是否為本地任務(wù),即該任務(wù)的執(zhí)行數(shù)據(jù)是否存儲(chǔ)在該tasktracker所在的節(jié)點(diǎn)上,如果是,則li,j=1,否則li,j=0。ltc矩陣的大小為p*q,如圖3所示,其中i∈[1,p],j∈[1,q]

6.計(jì)算loadlist

在hadoop集群中,單個(gè)tasktracker的負(fù)載也是很重要的,尤其是在異構(gòu)集群中,因?yàn)椴煌墓?jié)點(diǎn)的節(jié)點(diǎn)屬性有所差別,如果在調(diào)度的過(guò)程中不考慮這個(gè)因素,便會(huì)造成一部分節(jié)點(diǎn)負(fù)載過(guò)大,一部分節(jié)點(diǎn)資源浪費(fèi),于集群來(lái)說(shuō)這樣不利于資源的充分利用,于任務(wù)來(lái)說(shuō),被分配到一個(gè)負(fù)載大的節(jié)點(diǎn)上會(huì)增加它等待的時(shí)間,因此本文中構(gòu)建了一個(gè)列表loadlist用來(lái)記錄集群中各個(gè)節(jié)點(diǎn)的負(fù)載。

設(shè)有一個(gè)tasktracker,其slot總數(shù)為numsofslot,其上正在運(yùn)行的任務(wù)數(shù)為runningnums,則

load=runningnums/numsofslot(10)

load可以代表該節(jié)點(diǎn)上的負(fù)載情況,load越大說(shuō)明這個(gè)節(jié)點(diǎn)上的正在執(zhí)行的任務(wù)數(shù)越多,空閑的資源越少,負(fù)載越大。如公式(11)所示為loadlist,其大小為q,i∈[1,q]

loadlist(i)=[load1,load2,...,loadq](11)

7.進(jìn)行個(gè)體編碼

本方法采用了task編號(hào)-tasktracker編號(hào)的編碼方式,所以首先要獲取tasktracker列表ttsl,然后根據(jù)圖1所示流程構(gòu)建taskqueue,假設(shè)ttsl={tts1,tts2,...,ttsp},taskqueue={task1,task2,...,taskn},則染色體長(zhǎng)度為n,染色體每一位的取值代表該編號(hào)的task被分配到的tasktracker的編號(hào),則基因位上的最大取值為ttsl的長(zhǎng)度p,即每一位基因的取值范圍為[1,p]。一條染色體代表一種解決方案。則一條染色體中第i個(gè)基因位的值j代表第i個(gè)任務(wù)在第j個(gè)tasktracker上面執(zhí)行。如圖5所示為染色體示意圖。

8.計(jì)算個(gè)體適應(yīng)度

本方法中的適應(yīng)度函數(shù)是使用任務(wù)預(yù)測(cè)執(zhí)行時(shí)間、本地性任務(wù)個(gè)數(shù)以及機(jī)器負(fù)載三個(gè)參數(shù)聯(lián)合組成的,過(guò)程如下:

(1)預(yù)測(cè)執(zhí)行時(shí)間

由于hadoop集群的各個(gè)tasktracker之間是并行的,所以各個(gè)tasktracker上的任務(wù)時(shí)同時(shí)進(jìn)行得,所以對(duì)于一個(gè)染色體來(lái)說(shuō),整體的預(yù)測(cè)執(zhí)行時(shí)間是各個(gè)tasktracker上任務(wù)預(yù)測(cè)執(zhí)行時(shí)間的最大值,而單個(gè)tasktracker上的任務(wù)的執(zhí)行時(shí)間是調(diào)度分配給該tasktracker的任務(wù)列表中所有任務(wù)的預(yù)測(cè)執(zhí)行時(shí)間總和。假設(shè)第j個(gè)tasktracker的任務(wù)列表為list,且list中任務(wù)的個(gè)數(shù)為n,即第j個(gè)tasktracker上任務(wù)的預(yù)測(cè)執(zhí)行時(shí)間:

設(shè)集群中一共有q個(gè)tasktracker,則該染色體所代表的解決方案的預(yù)測(cè)執(zhí)行時(shí)間為:

timeexcute=max{timeoftt(1),timeoftt(2),...,timeoftt(q)}(13)

因本文中遺傳算法設(shè)計(jì)為了尋最大值,所以令

(2)本地性數(shù)目

由于hadoop任務(wù)執(zhí)行時(shí)需要的輸入數(shù)據(jù)存儲(chǔ)在hdfs中,并且通常數(shù)據(jù)量比較大,因此如果任務(wù)被分配到它所需的輸入數(shù)據(jù)所在的節(jié)點(diǎn)執(zhí)行會(huì)比較高效,所以在評(píng)價(jià)一個(gè)分配方案時(shí),要考慮該方案中本地任務(wù)的個(gè)數(shù)。

假設(shè)第j個(gè)tasktracker的任務(wù)列表為list,且list中任務(wù)的個(gè)數(shù)為n,即第j個(gè)tasktracker上本地執(zhí)行的任務(wù)數(shù)為:

因此,設(shè)集群中一共有q個(gè)tasktracker,則一條染色體所代表的方案的本地執(zhí)行任務(wù)總數(shù)為:

因本地任務(wù)的數(shù)本身是一個(gè)最大化問(wèn)題,所以

flocal(x)=totalnumlocal(x),x∈[1,popsize](17)

(3)負(fù)載

hadoop中負(fù)載是衡量調(diào)度性能的一個(gè)重要指標(biāo),對(duì)整個(gè)集群來(lái)說(shuō),各個(gè)節(jié)點(diǎn)的負(fù)載越平衡越好,對(duì)單個(gè)tasktracker來(lái)說(shuō)負(fù)載越小越好,因此用來(lái)評(píng)價(jià)染色體的負(fù)載是在負(fù)載列表loadlist中挑選最大值,然后使得這個(gè)值最小,這樣就避免某個(gè)性能相對(duì)較優(yōu)的tasktracker上負(fù)載過(guò)重。

因此,設(shè)集群中一共有q個(gè)tasktracker,則一條染色體所代表的方案的負(fù)載為:

load=max{loadlist[1],loadlist[2],...,loadlist[q]}(18)

在尋優(yōu)的過(guò)程中是尋找最大值,所以

綜上所述,基于遺傳算法的hadoop調(diào)度器中,適應(yīng)度函數(shù)為:

f(x)=ftime(x)+flocal(x)+fload(x),x∈[1,popsize](20)

在遺傳算法的進(jìn)化過(guò)程中使用該適應(yīng)度函數(shù)評(píng)價(jià),使用輪盤(pán)賭選擇算法將適應(yīng)度值相對(duì)較大的染色體進(jìn)行遺傳操作。

步驟二,進(jìn)行種群初始化

采用隨機(jī)初始化方法隨機(jī)地生成popsize個(gè)染色體,每個(gè)染色體的長(zhǎng)度為taskqueue的長(zhǎng)度n,每一個(gè)基因位上的值為[1,p]中任意的整數(shù)值。

步驟三,對(duì)種群進(jìn)行解碼,記錄適應(yīng)度值。

采用的適應(yīng)度函數(shù)為公式(12),而預(yù)測(cè)執(zhí)行時(shí)間、本地任務(wù)個(gè)數(shù)和機(jī)器負(fù)載都是表現(xiàn)型空間中個(gè)體的特性,所以要先將初始種群中的個(gè)體解碼形成表現(xiàn)型空間,然后根據(jù)etc、ltc、loadlist計(jì)算并記錄每個(gè)個(gè)體的預(yù)測(cè)執(zhí)行時(shí)間、本地任務(wù)個(gè)數(shù)和機(jī)器負(fù)載,然后根據(jù)公式(12)計(jì)算適應(yīng)度值。

所采用的編碼方式覺(jué)得了解碼方式,只要按照基因位上tasktracker的編號(hào)獲取相應(yīng)的任務(wù)編號(hào),最終的結(jié)果是按照ttsl中tasktracker的編號(hào)獲取到相同個(gè)數(shù)的任務(wù)列表。如圖6為解碼后的染色體。

步驟四,對(duì)種群進(jìn)行最小生成樹(shù)聚類。

(1)根據(jù)解碼后得出每個(gè)染色體的預(yù)測(cè)執(zhí)行時(shí)間timeexcute、totalnumlocal、load以及公式(22)求出種群中個(gè)體的相似度矩陣dis

(2)將pop中的染色體兩兩之間形成一條邊構(gòu)建一個(gè)無(wú)向圖,并使用dis中的值作為無(wú)向圖中邊的權(quán)值形成有權(quán)無(wú)向圖g。

(3)利用prim算法求出這個(gè)無(wú)向圖的最小生成樹(shù)。

(4)確定最小生成樹(shù)的斷邊閾值δ*m,m為最小生成樹(shù)中popsize-1條邊的平均權(quán)重,δ是一個(gè)大于0小于1的調(diào)節(jié)因子,這里取0.999。

(5)通過(guò)切斷生成樹(shù)中的邊進(jìn)行分類:從最小生成樹(shù)起點(diǎn)開(kāi)始遍歷,將權(quán)重大于閾值的邊去掉,形成一個(gè)森林,屬于同一個(gè)樹(shù)的邊就屬于同一類。

(6)對(duì)森林進(jìn)行深度遍歷,對(duì)每一類進(jìn)行記錄保存。

步驟五,種群內(nèi)個(gè)體進(jìn)行交叉操作

使用輪盤(pán)賭從種群中選擇一個(gè)個(gè)體indiv1,然后隨機(jī)生成一個(gè)0-1之間的浮點(diǎn)數(shù),如果浮點(diǎn)數(shù)大于pc,直接把選擇出的個(gè)體遺傳到新種群中,否則,獲取indiv1的類別為classid1,再隨機(jī)的在pop中選取一個(gè)個(gè)體indiv2,獲取indiv2的類別為classid2,使得classid1?。絚lassid2,然后使得indiv2與indiv1進(jìn)行交叉操作,然后把新個(gè)體放入新種群中,并把這個(gè)過(guò)程循環(huán)popsize次。

步驟六,種群內(nèi)個(gè)體進(jìn)行變異操作。

從新種群中進(jìn)行輪盤(pán)賭選擇選出一個(gè)個(gè)體indiv,隨機(jī)生成一個(gè)0-1間的浮點(diǎn)數(shù),如果這個(gè)浮點(diǎn)數(shù)大于pm,則把indiv直接遺傳至新種群中,否則,對(duì)indivi進(jìn)行變異操作,把變異后的結(jié)果放入新種群中,把這個(gè)過(guò)程循環(huán)popsize次。

步驟七,重復(fù)執(zhí)行三到六步驟,得到最佳個(gè)體。

步驟八,解碼最佳個(gè)體,為各個(gè)tasktracker準(zhǔn)好待調(diào)度的任務(wù)列表。

實(shí)驗(yàn)結(jié)果

根據(jù)以上步驟本發(fā)明開(kāi)發(fā)出了基于cga的hadoop調(diào)度器cgafxnew,并將該調(diào)度器應(yīng)用到了一個(gè)由表1中所示的4臺(tái)機(jī)器組成的異構(gòu)集群中,并提交了10個(gè)處理不同大小和類別的mapreduce任務(wù),并與fifo,fair,capacity做比較。

表1集群中四臺(tái)機(jī)器的硬件條件er

軟件:四臺(tái)主機(jī)的操作系統(tǒng)為32位的centos6.8,hadoop版本為1.2.1,jdk為jdk1.7.0_80。

(1)任務(wù)執(zhí)行時(shí)間如表2所示:

表2任務(wù)執(zhí)行時(shí)間

從表2中可以看到cgafxnew的任務(wù)執(zhí)行時(shí)間比gafxnew的大部分有所減短,并且在六種算法中有很多job的任務(wù)執(zhí)行時(shí)間是最短的。

(2)本地性任務(wù)個(gè)數(shù)如表3所示

表3本地性任務(wù)個(gè)數(shù)

從表3中可以看到,使用cgafxnew對(duì)10個(gè)job的任務(wù)進(jìn)行調(diào)度后,本地性任務(wù)所占比例有所提高,本地性任務(wù)的增多也很大程度上的減短了任務(wù)執(zhí)行的時(shí)間。

(3)任務(wù)在三個(gè)slave節(jié)點(diǎn)上的分布如表4所示

表4任務(wù)在節(jié)點(diǎn)中的分布

從表4可以看到,任務(wù)在三個(gè)slave節(jié)點(diǎn)上的分布按照節(jié)點(diǎn)的資源多少、性能好壞分布合理。

綜上所述,將cga應(yīng)用到hadoop的調(diào)度后,并且任務(wù)的本地性比例有所增加,并且任務(wù)在三個(gè)節(jié)點(diǎn)上的分布更加合理,失敗率下降,而且job的執(zhí)行時(shí)間也普遍在減短,從而可以得出基于cga的hadoop調(diào)度算法能使得集群中的資源被更加合理的應(yīng)用,而且對(duì)于用戶來(lái)說(shuō)所提交的job的執(zhí)行時(shí)間也減短,因此,基于最小生成樹(shù)聚類改進(jìn)的遺傳算法的hadoop調(diào)度算法性能有所提高。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1