基于動態(tài)標記優(yōu)先值的MapReduce數(shù)據(jù)本地化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機大規(guī)模數(shù)據(jù)運算,尤其是MapReduce運算領(lǐng)域,特別涉及一種基于動態(tài)標記優(yōu)先值的MapReduce數(shù)據(jù)本地化方法。
【背景技術(shù)】
[0002]MapReduce計算框架作為Hadoop平臺的核心組件,Hadoop平臺所有計算任務都是在MapReduce上完成的,所以Hadoop平臺的計算效率和吞吐量與MapReduce的作業(yè)執(zhí)行效率和吞吐量息息相關(guān)。
[0003]在Hadoop平臺,MapReduce分布式計算框架是搭建在以冗余形式存儲數(shù)據(jù)塊的分布式文件系統(tǒng)HDFS上,HDFS以數(shù)據(jù)塊的形式存儲用戶數(shù)據(jù)并且數(shù)據(jù)塊默認冗余數(shù)為3,也就是說一個作業(yè)對應的文件大小為100個數(shù)據(jù)塊(在HDFS中,數(shù)據(jù)塊默認大小為64MB)時,在HDFS中存儲關(guān)于該作業(yè)的數(shù)據(jù)塊數(shù)目為300。
[0004]數(shù)據(jù)本地化是一種在本地獲取計算數(shù)據(jù)的過程,數(shù)據(jù)本地化程度高,能減少計算節(jié)點的計算等待時間,同時也能減少數(shù)據(jù)拷貝量,從而達到高效利用集群網(wǎng)絡帶寬的目的。由于存儲數(shù)據(jù)的節(jié)點和參加計算的節(jié)點是重合的,所以MapReduce可以利用這種冗余形式的數(shù)據(jù)塊來提升分布式計算任務的數(shù)據(jù)本地化程度。原始的MapReduce任務調(diào)度方法在接受計算節(jié)點的任務請求時,為了提升計算任務的數(shù)據(jù)本地化程度,優(yōu)先選擇該計算節(jié)點的本地任務,次之是本機架的任務,最后是本數(shù)據(jù)中心的任務。
[0005]然而,這種數(shù)據(jù)本地化方法并不能實現(xiàn)高程度的數(shù)據(jù)本地化,主要原因有:1) 一個作業(yè)的數(shù)據(jù)塊在各計算節(jié)點上分布相對不均勻;2)各計算節(jié)點的計算性能有差異,并不完全是同構(gòu)的機器。在原始的調(diào)度方法中,MapReduce認為集群中的機器是同構(gòu)的,且沒有考慮數(shù)據(jù)塊分布的不均衡性;3)每個計算節(jié)點在選取本地數(shù)據(jù)塊時沒有一個優(yōu)先順序。數(shù)據(jù)塊有冗余備份,可能導致本地化任務的惡性搶占。
【發(fā)明內(nèi)容】
[0006]本發(fā)明所要解決的技術(shù)問題是提供一種基于動態(tài)標記優(yōu)先值的MapReduce數(shù)據(jù)本地化方法,該方法綜合考慮數(shù)據(jù)塊的分布狀況和計算節(jié)點的異構(gòu)差異性,在調(diào)度本地化任務的時候給出一個優(yōu)先級,解除本地化任務分配中的惡性搶占問題。
[0007]為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案是:
[0008]—種基于動態(tài)標記優(yōu)先值的MapReduce數(shù)據(jù)本地化方法,包括以下步驟;
[0009]設一個集群中擁有η個計算節(jié)點,各計算節(jié)點的名稱為T1, T2,…,T1,…,Tn,某個在集群上運行的作業(yè)擁有m個數(shù)據(jù)塊且各數(shù)據(jù)塊的名稱為B1, B2,…,Bx,…,Bni,數(shù)據(jù)塊默認冗余數(shù)為3,則Bx有三個存儲的數(shù)據(jù)塊B xl、Bx2, Bx3;
[0010]將各計算節(jié)點上的本地化數(shù)據(jù)塊初始化標記值為2n,計算各計算節(jié)點本地化數(shù)據(jù)塊的數(shù)量,不妨設T1上有本地化數(shù)據(jù)塊CL ?個;
[0011]按照各計算節(jié)點的數(shù)據(jù)塊數(shù)量進行升序排序,不妨設一種升序序列為INC1,INC2,…,INCP,…,INCj,…,INCk,…,INCn,其中,位置1從^對應CL ?個數(shù)據(jù)塊,且對應計算節(jié)點Ti;
[0012]依次從INC1對應的計算節(jié)點開始,直到INCJt應的計算節(jié)點,將每個計算節(jié)點上的數(shù)據(jù)塊的后續(xù)備份數(shù)據(jù)塊的標記值減去一個確定的數(shù)DecS,DecS的值由位置INC,確定,位置11^對應DecS的值η-j+l ;
[0013]在任務調(diào)度過程中,若調(diào)度本地化的數(shù)據(jù)塊,則優(yōu)先選擇標記值最大的數(shù)據(jù)塊,若本地沒有數(shù)據(jù)塊,則優(yōu)先選擇本機架位置INC數(shù)值高的計算節(jié)點上標記值高的數(shù)據(jù)塊進行拷貝;
[0014]每個數(shù)據(jù)塊得到調(diào)度后,再次調(diào)整每個計算節(jié)點的數(shù)據(jù)塊數(shù)量,當某個數(shù)據(jù)塊Bxl被調(diào)度后,該數(shù)據(jù)塊及其備份數(shù)據(jù)塊Bx2、Bx3所在的三個計算節(jié)點上的數(shù)據(jù)塊數(shù)量都減去1,之后進行升序排序,排序后再進行標記值調(diào)整。設數(shù)據(jù)塊Bx2對應的計算節(jié)點為T s,在數(shù)據(jù)塊Bx2調(diào)度之前,計算節(jié)點T s上的數(shù)據(jù)塊數(shù)量為CL Ts,對應的位置為INCk,調(diào)度之后,Ts對應位置為INCP,4種調(diào)整分別為:第一、計算節(jié)點TsI的本地數(shù)據(jù)塊在位置INC p到INCk:對應的計算節(jié)點的備份數(shù)據(jù)塊的標記值都減去n-p+1 ;第二、從位置INCp到INCk i對應的計算節(jié)點上的數(shù)據(jù)塊在計算節(jié)點TsI的標記值都加n-r+l (r e [p,k-1]),計算節(jié)點T 1^是與計算節(jié)點TJ的數(shù)據(jù)塊有相同數(shù)據(jù)塊的計算節(jié)點;第三、位置INC p到INCk i對應的計算節(jié)點上的數(shù)據(jù)塊的后續(xù)備份數(shù)據(jù)塊的標記值都加I ;第四、計算節(jié)點Ts本地其他數(shù)據(jù)塊對應的在位置INCk之后的計算節(jié)點上的數(shù)據(jù)塊的標記值需要再次加p-k,p-k = (n-k+1)-(n-p+1);
[0015]標記值調(diào)整后繼續(xù)下一次任務調(diào)度,任務調(diào)度后繼續(xù)下一次標記值調(diào)整,直到所有計算任務全部完成。
[0016]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:通過標記數(shù)據(jù)塊并設置不同優(yōu)先值,從而提升作業(yè)的數(shù)據(jù)本地化程度,進而提升MapReduce的作業(yè)執(zhí)行效率和減少作業(yè)的帶寬占用率,最終提升Hadoop集群的整體吞吐率。
【具體實施方式】
[0017]本發(fā)明的目的在于通過提升數(shù)據(jù)本地化程度來進一步提升Hadoop平臺的吞吐率以及MapReduce作業(yè)的執(zhí)行效率。通過動態(tài)設定標記值來改變本地化任務的調(diào)度優(yōu)先級從而提升數(shù)據(jù)本地化程度。提升數(shù)據(jù)本地化程度,減少需要遠程傳輸?shù)臄?shù)據(jù)塊數(shù)量,就可減少了計算節(jié)點的計算等待時間。另外,由于減少了非本地化任務,一個作業(yè)網(wǎng)絡帶寬的使用量也減少了,從而使得MapReduce集群的并發(fā)度可以提升,進而提升Hadoop平臺的整體吞吐率。本發(fā)明提出的基于動態(tài)標記優(yōu)先值的數(shù)據(jù)本地化調(diào)度方法在同構(gòu)或異構(gòu)集群上均可工作。
[0018]基于動態(tài)標記優(yōu)先值的MapReduce數(shù)據(jù)本地化方法的整體思路是,通過對各計算節(jié)點的本地化數(shù)據(jù)塊進行動態(tài)升序排序,在初始階段,排在前面的計算節(jié)點擁有相對少的本地化數(shù)據(jù)塊,一段時間后,排在前面的將會是計算速度和本地化數(shù)據(jù)塊不成正相關(guān)的計算節(jié)點。本發(fā)明方法盡最大可能不破壞排在相對靠前的計算節(jié)點的本地化數(shù)據(jù)塊,通過動態(tài)地給各節(jié)點的數(shù)據(jù)塊打標記值的方式來決定各計算節(jié)點的本地化任務調(diào)度優(yōu)先權(quán),最終實現(xiàn)提升數(shù)據(jù)本地化的目的。
[0019]—種基于動態(tài)標記優(yōu)先值的MapReduce數(shù)據(jù)本地化方法,包括以下步驟;
[0020]步驟一、設一個集群中擁有η個計算節(jié)點,各計算節(jié)點的名稱為TpT2,…,Ti,…,Tn,某個在集群上運行的作業(yè)擁有m個數(shù)據(jù)塊且各數(shù)據(jù)塊的名稱為B1,B2,…,Bx,…,Bni,數(shù)據(jù)塊默認冗余數(shù)為3,則Bx有三個存儲的數(shù)據(jù)塊B xl、Bx2, Bx3;
[0021]步驟二、將各計算節(jié)點上的本地化數(shù)據(jù)塊初始化標記值為2n,計算各計算節(jié)點本地化數(shù)據(jù)塊的數(shù)量,不妨設T1上有本地化數(shù)據(jù)塊CL ?個;
[0022]步驟三、按照各計算節(jié)點的數(shù)據(jù)塊數(shù)量進行升序排序,不妨設一種升序序列為INC1, INC2,…,INCP,…,INCj,…,INCk,…,INCn,其中,位置1從^對應CL ?個數(shù)據(jù)塊,且對應計算節(jié)點Ti;
[0023]步驟四、依次從INC1對應的計算節(jié)點開始,直到INC?對應的計算節(jié)點,將每個計算節(jié)點上的數(shù)據(jù)塊的后續(xù)備份數(shù)據(jù)塊的標記值減去一個確定的數(shù)DeCS,DeCS的值由位置INC,確定,位置1從^對應DecS的值η-j+l ;
[0024]在集群各計算節(jié)點都是同構(gòu)的情況下,爪匕對應的計算節(jié)點是最不可能存在非本地化任務的計算節(jié)點,因為該計算節(jié)點上的數(shù)據(jù)塊最多,反之,INC1對應的計算節(jié)點上的本地化數(shù)據(jù)塊最少。在原始的調(diào)度方法中,如果INC1對應的計算節(jié)點不能每次都先得到調(diào)度,取得本地數(shù)據(jù)塊進行處理,其本地數(shù)據(jù)塊可能被其他計算節(jié)點所搶占(惡性搶占)。從數(shù)據(jù)塊的升序序列可以看出,越往后的INC對應的計算節(jié)點在本地化出現(xiàn)的概率遞增,非本地化出現(xiàn)的概率遞減。為了保護數(shù)據(jù)塊數(shù)量少的計算節(jié)點的數(shù)據(jù)塊不被搶占,依次從INCJi應的節(jié)點開始,將該節(jié)點上的數(shù)據(jù)塊的后續(xù)備份數(shù)據(jù)塊的標記值減去一個確定的數(shù)DecS (Decrease the pr1ritx of Select1n),其目的是其他后續(xù)計算節(jié)點在選擇本地化的任務時不會優(yōu)先選擇這類數(shù)據(jù)塊。DecS的值由位置INCj唯一確定,例如,位置INC $勺DecS數(shù)值為η-j+l,位置INC1上數(shù)據(jù)