Hadoop大數(shù)據(jù)平臺(tái)中基于網(wǎng)絡(luò)I/O代價(jià)評(píng)估的ReduceTask數(shù)據(jù)本地性調(diào)度方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于云計(jì)算平臺(tái)優(yōu)化技術(shù)領(lǐng)域,涉及一種Hadoop大數(shù)據(jù)平臺(tái)中基于網(wǎng)絡(luò) I/O代價(jià)評(píng)估的ReduceTask數(shù)據(jù)本地性調(diào)度方法。
【背景技術(shù)】
[0002] 隨著信息產(chǎn)業(yè)的發(fā)展,企業(yè)和各種組織產(chǎn)生的數(shù)據(jù)量快速增長。傳統(tǒng)的數(shù)據(jù)存儲(chǔ) 能力和處理技術(shù)逐漸顯得乏力。而大數(shù)據(jù)所蘊(yùn)含的4V特征,即體量大(volume)、模式多 (variety)、速度快(velocity)、價(jià)值密度低(value),更增加了數(shù)據(jù)管理和信息提取的困 難和復(fù)雜性[3]。大數(shù)據(jù)的火熱并不意味著對(duì)于大數(shù)據(jù)的了解深入,反而表明大數(shù)據(jù)存在過 度炒作的危險(xiǎn)[6]。大數(shù)據(jù)的基本概念、關(guān)鍵技術(shù)以及對(duì)其利用上均存在很多的疑問和爭 議。在這樣的大數(shù)據(jù)時(shí)代背景下催生了"大數(shù)據(jù)技術(shù)"。
[0003]IBM公司于2007年底宣布了云計(jì)算計(jì)劃,云計(jì)算(CloudComputing)的概念出現(xiàn) 在大眾面前。但云計(jì)算的思想?yún)s不是一蹴而就的,它是網(wǎng)格計(jì)算、分布式計(jì)算、并行計(jì)算、效 用計(jì)算、網(wǎng)絡(luò)存儲(chǔ)、虛擬化、負(fù)載均衡等傳統(tǒng)計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)發(fā)展融合的產(chǎn)物。旨在 通過網(wǎng)絡(luò)把多個(gè)成本較低的計(jì)算實(shí)體整合成一個(gè)具有強(qiáng)大計(jì)算能力的完美系統(tǒng),并借助基 礎(chǔ)設(shè)施即服務(wù)(IaaS)、平臺(tái)即服務(wù)(PaaS)、軟件即服務(wù)(SaaS)和管理服務(wù)提供商(MSP)等 先進(jìn)的商業(yè)模式,把強(qiáng)大的計(jì)算能力分布到終端用戶手中。
[0004] 2003年以來,谷歌陸續(xù)公布了GFS,MapReduce等高可擴(kuò)展、高性能的分布式海量 數(shù)據(jù)處理框架,并證明了該框架在處理海量網(wǎng)頁數(shù)據(jù)時(shí)的優(yōu)越性?;谶@兩個(gè)平臺(tái),Doug Cutting將其運(yùn)用到了全網(wǎng)搜索引擎項(xiàng)目(Nutch)中。2006年年初,開發(fā)人員便將這個(gè)開源 實(shí)現(xiàn)移出了Nutch,成為Lucene的一個(gè)子項(xiàng)目,稱為Hadoop。開源的ApacheHadoop提供 了成熟的"大數(shù)據(jù)處理工具",得到了廣泛應(yīng)用和支持,是"大數(shù)據(jù)"計(jì)算的事實(shí)標(biāo)準(zhǔn)。我們 通過對(duì)Hadoop的研究,提升其性能,以改善"云"的處理能力,減少用戶終端的處理負(fù)擔(dān),最 終使用戶終端簡化成一個(gè)單純的輸入輸出設(shè)備,并能按需享受"云"的強(qiáng)大計(jì)算處理能力。
[0005] 在分布式計(jì)算領(lǐng)域中,調(diào)度策略的根本目標(biāo)是根據(jù)當(dāng)前集群中各個(gè)節(jié)點(diǎn)上的資 源(包括CPU、內(nèi)存和網(wǎng)絡(luò)資源)剩余情況與各個(gè)用戶作業(yè)的服務(wù)質(zhì)量(QoS,Qualityof Service)要求,在資源和作業(yè)/任務(wù)之間做出最優(yōu)的匹配。由于用戶對(duì)作業(yè)的服務(wù)質(zhì)量的 要求是多樣化的,因此,分布式系統(tǒng)中的任務(wù)調(diào)度是一個(gè)多目標(biāo)優(yōu)化問題,更進(jìn)一步說,它 是一個(gè)典型的NP問題。
【發(fā)明內(nèi)容】
[0006] 有鑒于此,本發(fā)明的目的在于提供一種Hadoop大數(shù)據(jù)平臺(tái)中基于網(wǎng)絡(luò)1/0代價(jià) 評(píng)估的ReduceTask數(shù)據(jù)本地性調(diào)度方法,該方法針對(duì)當(dāng)前的Hadoop版本中,在對(duì)作業(yè) (Job)進(jìn)行劃分后的子任務(wù)(MapTask和ReduceTask)的調(diào)度中,只在MapTask的調(diào)度階 段考慮了數(shù)據(jù)本地性的因素的缺陷,通過評(píng)估以每個(gè)所記錄的Host節(jié)點(diǎn)為ReduceTask執(zhí) 行節(jié)點(diǎn)時(shí),其它節(jié)點(diǎn)上的Map輸出數(shù)據(jù)拷貝到該Host節(jié)點(diǎn)的網(wǎng)絡(luò)I/O代價(jià),以此作為分配ReduceTask的優(yōu)先權(quán),來為優(yōu)先權(quán)高的節(jié)點(diǎn)分配Reduce任務(wù),從而達(dá)到降低Map輸出數(shù)據(jù) 拷貝到Reduce節(jié)點(diǎn)的網(wǎng)絡(luò)I/O代價(jià),使得所選Reduce節(jié)點(diǎn)具有最佳的數(shù)據(jù)本地性。
[0007] 為達(dá)到上述目的,本發(fā)明提供如下技術(shù)方案:
[0008] -種Hadoop大數(shù)據(jù)平臺(tái)中基于網(wǎng)絡(luò)I/O代價(jià)評(píng)估的ReduceTask數(shù)據(jù)本地性調(diào)度 方法,包括以下步驟:
[0009] 步驟一:為JobTracker初始化的每個(gè)用戶作業(yè)(Job)維護(hù)一張映射表, 它是關(guān)于JobTracker分配給某個(gè)Host節(jié)點(diǎn)的MapTask與這個(gè)Host的映射表,即 〈Hostld, MapTaskld〉,每當(dāng)JobTracker分配一個(gè)新的該作業(yè)的MapTask,便將新的映射條 目更新到這張表;
[0010] 步驟二:為每個(gè)JobTracker初始化的用戶作業(yè)(Job)維護(hù)一張映射表,即〈網(wǎng)絡(luò) 1/0代價(jià),Hostld〉,是集群中分配了該作業(yè)的MapTask的物理節(jié)點(diǎn)與其網(wǎng)絡(luò)1/0代價(jià)的映 射,這一部分的Host與步驟一中的Host-樣,但是去除了重復(fù)的Host節(jié)點(diǎn);除此之外還包 含另一些Host節(jié)點(diǎn),它們是與上一部分Host節(jié)點(diǎn)同子區(qū)域(即有相同的拓?fù)渎窂介L度) 的一個(gè)代表節(jié)點(diǎn)(儲(chǔ)備節(jié)點(diǎn))與其網(wǎng)絡(luò)1/0代價(jià)的映射;
[0011] 步驟三:由步驟一中的映射表<HostId,MapTaskId>,將相同Hostld上分配過該項(xiàng) 作業(yè)的MapTask數(shù)合并,得出每個(gè)Host對(duì)應(yīng)的MapTask數(shù);由Hadoop集群的網(wǎng)絡(luò)拓?fù)錁浞?別得出各記錄節(jié)點(diǎn)與所要計(jì)算的作為ReduceTask執(zhí)行節(jié)點(diǎn)的拓?fù)渚嚯x;由以上數(shù)據(jù)根據(jù) 網(wǎng)絡(luò)1/0代價(jià)計(jì)算模型計(jì)算出以步驟二中的任意一個(gè)物理節(jié)點(diǎn)為ReduceTask執(zhí)行節(jié)點(diǎn)的 網(wǎng)絡(luò)1/0代價(jià),并將結(jié)果更新到步驟二中的映射表中;
[0012] 步驟四:當(dāng)MapTask完成數(shù)達(dá)到配置文件mapred-default.xml中由參數(shù) mapred.reduce,slowstart.completed,maps設(shè)定的門限值,JobTracker便可以開始分 配ReduceTask,分配ReduceTask的策略就是按照步驟三中的當(dāng)前Hadoop集群中〈網(wǎng) 絡(luò)1/0代價(jià),Hostld〉映射表,節(jié)點(diǎn)的網(wǎng)絡(luò)1/0代價(jià)越小則優(yōu)先級(jí)越高的原則為節(jié)點(diǎn)分配 ReduceTask。
[0013] 進(jìn)一步,在步驟二中,這張〈網(wǎng)絡(luò)1/0代價(jià),Hostld〉映射表中Host包括所有得 到由JobTracker分配該Job的MapTask的Host,以及與這個(gè)Host相同最小子區(qū)域的一個(gè) Host作為最小子區(qū)域備選Host;最小子區(qū)域備選Host以所有分配了該Job的MapTask的 節(jié)點(diǎn)的子區(qū)域?yàn)閱挝唬總€(gè)最小子區(qū)域里只計(jì)算一個(gè)備選Host的網(wǎng)絡(luò)1/0。
[0014] 進(jìn)一步,在步驟三中,計(jì)算各個(gè)不同Host節(jié)點(diǎn)(例如j)的網(wǎng)絡(luò)1/0代價(jià)模型如 下:
[0015]
[0016] 其中,NunUVIapTaski為節(jié)點(diǎn)i上分配的該項(xiàng)作業(yè)的Map任務(wù)數(shù);distance (i,j)為 節(jié)點(diǎn)i到節(jié)點(diǎn)j的Hadoop集群網(wǎng)絡(luò)拓?fù)錁渎窂介L,由Hadoop集群的三層網(wǎng)絡(luò)拓圖得出,計(jì) 算方式如下:
[0017] 1)如果節(jié)點(diǎn)i和j是同一個(gè)Host節(jié)點(diǎn),那么拓?fù)渚嚯x為:
[0018] distance(DataCenterdl/Rackrl/Hosthl,DataCenterdl/Rackrl/Hosthl) = 0
[0019] 2)如果節(jié)點(diǎn)i和j是同一個(gè)Rack的中的不同Host節(jié)點(diǎn),那么拓?fù)渚嚯x為:
[0020] distance(DataCenterdl/Rackrl/Hosthl,DataCenterdl/Rackr2/Hosth2) = 2
[0021] 3)如果節(jié)點(diǎn)i和j是同一個(gè)數(shù)據(jù)中心的不同Rack區(qū)域的不同Host節(jié)點(diǎn),那么拓 撲距離為:
[0022] distance(DataCenterdl/Rackrl/Hosthl,DataCenterd2/Rackr2/Hosth2) = 4〇
[0023] 進(jìn)一步,在步驟四中,將各個(gè)Host節(jié)點(diǎn)的Reduce網(wǎng)絡(luò)I/O代價(jià)作為此節(jié)點(diǎn)的在分 配ReduceTask時(shí)的優(yōu)先權(quán),當(dāng)JobTracker分配ReduceTask時(shí)按照Host節(jié)點(diǎn)的優(yōu)先權(quán)為 其分配ReduceTask,如果最優(yōu)的節(jié)點(diǎn)此時(shí)由于故障或者繁忙沒有能力接收ReduceTask,貝lj 選擇次優(yōu)的節(jié)點(diǎn)為其分配ReduceTask,如此,便保證了將當(dāng)前集群中MapTask的輸出數(shù)據(jù) 拷貝到該Reduce節(jié)點(diǎn)的網(wǎng)絡(luò)1/0代價(jià)是最優(yōu)的。
[0024] 本發(fā)明的有益效果在于:本發(fā)明建立映射表來記錄MapTask的分配情況,設(shè)計(jì)了 MapTask的中間數(shù)據(jù)拷貝到Reduce節(jié)點(diǎn)(Shuffle過程)的網(wǎng)絡(luò)1/0代價(jià)計(jì)算模型,通過將 這些代價(jià)作為分配ReduceTask給節(jié)點(diǎn)的參考優(yōu)先權(quán),使得Shuffle的網(wǎng)絡(luò)1/0代價(jià)最優(yōu)化 來節(jié)省Hadoop集群中的網(wǎng)絡(luò)資源,從而提高了Hadoop集群的作業(yè)周轉(zhuǎn)時(shí)間和增大吞吐量。
【附圖說明】
[0025] 為了使本發(fā)明的目的、技術(shù)方案和有益效果更加清楚,本發(fā)明提供如下附圖進(jìn)行 說明:
[0026] 圖1為本發(fā)明所述方法的宏觀流程圖;
[0027] 圖2為一個(gè)單一數(shù)據(jù)中心的Hadoop集群拓?fù)鋱D;
[0028] 圖3為Hadoop源碼框架中分配ReduceTask的時(shí)序圖。
【具體實(shí)施方式】
[0029] 下面將結(jié)合附圖,對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行詳細(xì)的描述。
[0030] 圖1為本發(fā)明所述方法的宏觀流程圖,如圖所示,本發(fā)明所述的Hadoop大數(shù) 據(jù)平臺(tái)中基于網(wǎng)絡(luò)1/0代價(jià)評(píng)估的ReduceTask數(shù)據(jù)本地性調(diào)度策略主要包括以下 四個(gè)步驟:步驟一:為JobTracker初始化的每個(gè)用戶作業(yè)(Job)維護(hù)一張映射表,即 〈Hostld,MapTaskld〉,每當(dāng)JobTracker分配一個(gè)新的該作業(yè)的MapTask,便將新的映射條 目更新到這張表;步驟二:為每個(gè)JobTracker初始化的用戶作業(yè)(Job)維護(hù)一張映射表, 即〈網(wǎng)絡(luò)1/0代價(jià),Hostld〉;步驟三:根據(jù)網(wǎng)絡(luò)1/0代價(jià)計(jì)算模型計(jì)算出以步驟二中的任 意一個(gè)物理節(jié)點(diǎn)為ReduceTask執(zhí)行節(jié)點(diǎn)的網(wǎng)絡(luò)1/0代價(jià),并將結(jié)果更新到步驟二中的映射 表中;步驟四:按照步驟三中的當(dāng)前Hadoop集群中〈網(wǎng)絡(luò)1/0代價(jià),Hostld〉映射表,節(jié)點(diǎn) 的網(wǎng)絡(luò)1/0代價(jià)越小則優(yōu)先級(jí)越高的原則為節(jié)點(diǎn)分配ReduceTask。
[0031] 在Hadoop平臺(tái)源碼框架中分析可知,JobTracker在其內(nèi)部以"三層多叉樹"的 方式,描述和跟蹤每個(gè)作業(yè)的運(yùn)行狀態(tài),作業(yè)被抽象成三層,從上往下依次為:作業(yè)監(jiān)控層、 任務(wù)監(jiān)控層和任務(wù)執(zhí)行層。在作業(yè)監(jiān)控層中,每個(gè)作業(yè)由一個(gè)JoblnProgress(JIP)對(duì)象 描述和