基于流水線多線程的MapReduce任務(wù)并行化方法
【專利摘要】本發(fā)明提出了一種基于流水線多線程的MapReduce任務(wù)并行化方法,將MapReduce任務(wù)的計(jì)算過(guò)程劃分為具有一定依賴關(guān)系的子任務(wù),以此能夠?qū)⒐?jié)點(diǎn)內(nèi)串行的MapReduce任務(wù)并行化為流水線多線程MapReduce任務(wù),從而充分利用多核節(jié)點(diǎn)豐富的硬件資源提高大數(shù)據(jù)處理性能。
【專利說(shuō)明】
基于流水線多線程的MapReduce任務(wù)并行化方法
技術(shù)領(lǐng)域
[0001 ]本發(fā)明專利涉及一種基于流水線多線程的MapReduce任務(wù)并行化方法。首先,將MapReduce任務(wù)的計(jì)算過(guò)程劃分為具有一定依賴關(guān)系的子任務(wù),建立包括控制依賴與數(shù)據(jù)依賴的子任務(wù)依賴圖;其次,將子任務(wù)依賴圖轉(zhuǎn)換為子任務(wù)有向無(wú)環(huán)圖;再次,將子任務(wù)有向無(wú)環(huán)圖轉(zhuǎn)換為基于流水線多線程的MapReduce任務(wù);最后,構(gòu)建面向多核機(jī)群的MapReduce多粒度混合并行處理模型,該方法的優(yōu)勢(shì)是能夠充分利用多核機(jī)群節(jié)點(diǎn)內(nèi)節(jié)點(diǎn)間的豐富硬件資源提高大數(shù)據(jù)處理性能。
【背景技術(shù)】
[0002]MapReduce是2004年由Google公司提出的一種基于普通機(jī)群的并行編程模型,能夠?qū)崿F(xiàn)對(duì)大規(guī)模數(shù)據(jù)集進(jìn)行并行處理,由于其豐富的表達(dá)能力、高擴(kuò)展性等特性在過(guò)去的十年中得到了迅速的發(fā)展和廣泛應(yīng)用,被廣泛應(yīng)用于數(shù)據(jù)挖掘,科學(xué)計(jì)算等。
[0003]MapReduce的基本思想是將原始輸入數(shù)據(jù)分成大小相同的數(shù)據(jù)塊,并均勻分配到機(jī)群中不同的節(jié)點(diǎn)上,每個(gè)節(jié)點(diǎn)啟動(dòng)相應(yīng)的進(jìn)程對(duì)這些數(shù)據(jù)塊進(jìn)行并行處理,分布式存儲(chǔ)在機(jī)群各個(gè)節(jié)點(diǎn)的數(shù)據(jù)塊。MapReduce模型主要提供了兩個(gè)功能函數(shù)Map和Reduce,在計(jì)算過(guò)程中以鍵值對(duì)作為函數(shù)的輸入和輸出,Map函數(shù)負(fù)責(zé)把原始數(shù)據(jù)轉(zhuǎn)化為鍵值對(duì),并生成一系列的中間鍵值對(duì),然后通過(guò)合并中間鍵值對(duì)并發(fā)給Reduce函數(shù)進(jìn)行處理。
[0004]MapReduce主要是面向普通機(jī)群的,機(jī)群節(jié)點(diǎn)是單CPU處理器,通過(guò)在機(jī)群節(jié)點(diǎn)啟動(dòng)獨(dú)立的進(jìn)程完成計(jì)算任務(wù),稱為“進(jìn)程級(jí)并行機(jī)制”。然而,近年來(lái)隨著多核處理器技術(shù)的成熟,越來(lái)越多的機(jī)群采用多核處理器,構(gòu)建性能更高的多核機(jī)群。硬件層面的變化必然會(huì)影響到軟件層面,多核機(jī)群這一新的計(jì)算平臺(tái)為傳統(tǒng)MapReduce并行編程模型帶來(lái)巨大挑占戈:
[0005]首先,傳統(tǒng)MapReduce利用多核機(jī)群硬件資源的效率不高。一般地,節(jié)點(diǎn)對(duì)數(shù)據(jù)塊的處理過(guò)程包括一系列子過(guò)程,如數(shù)據(jù)讀取、數(shù)據(jù)序列化、數(shù)據(jù)計(jì)算、數(shù)據(jù)合并、數(shù)據(jù)寫入等,傳統(tǒng)MapReduce對(duì)這些子過(guò)程是串行執(zhí)行的,使得I/O資源與CPU資源等的利用率不高。
[0006]其次,傳統(tǒng)MapRedu c e無(wú)法充分利用線程級(jí)并行機(jī)制。傳統(tǒng)MapRe du c e主要采用進(jìn)程級(jí)并行機(jī)制,而多核處理器的優(yōu)勢(shì)在于能夠采用線程級(jí)并行機(jī)制加速程序的性能,傳統(tǒng)MapReduce的這一局限性制約了在多核處理器上進(jìn)一步提高大數(shù)據(jù)處理的性能。
[0007]另外,傳統(tǒng)MapReduce在多核機(jī)群環(huán)境下將產(chǎn)生過(guò)多的進(jìn)程管理開銷。傳統(tǒng)MapReduce為每個(gè)任務(wù)啟動(dòng)一個(gè)進(jìn)程,當(dāng)多個(gè)進(jìn)程同時(shí)處理被分割后的數(shù)據(jù)塊時(shí),將會(huì)反復(fù)啟動(dòng)和銷毀較多的進(jìn)程,在處理超大規(guī)模(TB級(jí))數(shù)據(jù)集時(shí)將導(dǎo)致大量的進(jìn)程管理開銷
[21]。
[0008]因此,僅僅采用進(jìn)程級(jí)并行機(jī)制的傳統(tǒng)MapReduce在多核機(jī)群環(huán)境下表現(xiàn)出較大的局限性,難以充分利用多核機(jī)群豐富的硬件資源進(jìn)一步提高大數(shù)據(jù)處理性能。為此,本發(fā)明專利提出一種基于流水線多線程的Map/Reduce任務(wù)并行化方法,一方面能夠充分利用多核節(jié)點(diǎn)硬件資源,另一方面也能夠提高單個(gè)任務(wù)的計(jì)算性能。
[0009]MapReduce研究涉及并行化算法、任務(wù)調(diào)度、資源分配、I/O優(yōu)化等多方面的內(nèi)容。下面只對(duì)面向不同硬件環(huán)境的MapReduce相關(guān)研究進(jìn)行簡(jiǎn)要的分析:
[0010]( I )面向共享內(nèi)存處理器:Range r ( Pr ο c e e d i ng s of the IEEE 13 thInternat1nal Symposium on High Performance Computer Architecture,2007)和Talbot等(Proceedings of the 2th Internat1nal Workshop on MapReduce and ItsApplicat1ns, 2011)借鑒MapReduce并行編程思想提出并實(shí)現(xiàn)了并行編程語(yǔ)言Phoenix(C版本)和PhoeniX++(C++版本),這些語(yǔ)言提供了線程管理、動(dòng)態(tài)任務(wù)調(diào)度、數(shù)據(jù)分片和線程容錯(cuò)的方法,用于編寫MapReduce并行化程序,實(shí)驗(yàn)結(jié)果表明在多核、多處理器環(huán)境下能夠獲得較高的數(shù)據(jù)處理速度。Chen等(ACM Transact1ns on Archi tecture&CodeOptimizat1n ,2013)提出了Tiled-MapReduce,它在Phoenix基礎(chǔ)上通過(guò)把一個(gè)較大的任務(wù)劃分為比較小的子任務(wù)進(jìn)行迭代處理,進(jìn)一步提高了 Phoenix的數(shù)據(jù)處理性能,此外還通過(guò)對(duì)顯存、緩存等的優(yōu)化提高了數(shù)據(jù)傳輸性能。
[0011 ] (2)面向在Cell處理器:Rafique等(Proceedings of the Internat1nal IEEEParallel and Distributed Processing Symposium,2009)米用一種Stream機(jī)制實(shí)現(xiàn)了MapReduce模型,并增加了自適應(yīng)資源調(diào)度機(jī)制,此外CelIRM還通過(guò)雙緩存技術(shù)、異步1/0技術(shù)等提升了 1/0性能。
[0012](3)面向GPU處理器:Fang等(IEEE Transact1ns on Parallel and DistributedSystems ,2011)提出了Mars方法,利用GPU處理器上的豐富處理單元加速數(shù)據(jù)處理性能,設(shè)計(jì)了適用于GPU處理器的API庫(kù),能夠在GPU環(huán)境下編寫MapReduce程序。
[0013](5)面向多核機(jī)群:肖之慰等(復(fù)旦大學(xué)碩士論文,2012)開發(fā)了Azwraith原型系統(tǒng),它融合了一個(gè)面向多核處理器的Ostrich系統(tǒng)和一個(gè)面向普通機(jī)群環(huán)境的Hadoop系統(tǒng),可以將數(shù)據(jù)加載和數(shù)據(jù)處理并行處理,并基于共享內(nèi)存的高速緩存模型,避免相同數(shù)據(jù)的重復(fù)加載。
[0014]以上面向共享內(nèi)存處理器、Cell處理器、GPU處理器的研究屬于在單個(gè)超級(jí)節(jié)點(diǎn)環(huán)境下研究,這些方法能夠獲得的性能受限于單個(gè)節(jié)點(diǎn)的計(jì)算能力,不適合處理較大的數(shù)據(jù)集(如TB級(jí));而關(guān)于面向多核機(jī)群的研究主要側(cè)重于數(shù)據(jù)局部性及其緩存方面的研究,尚未從較深層次的并行機(jī)制角度給出系統(tǒng)的并行處理方法。
[0015]為了充分利用多核機(jī)群中豐富的硬件資源提高M(jìn)apReduce的處理大數(shù)據(jù)的性能,本發(fā)明專利提出了一種基于流水線多線程的并行化方法,將MapReduce任務(wù)并行化為多線程任務(wù),以充分利用單個(gè)節(jié)點(diǎn)內(nèi)部的硬件資源提高大數(shù)據(jù)處理性能。
【發(fā)明內(nèi)容】
[0016]本發(fā)明要克服現(xiàn)有技術(shù)的上述缺點(diǎn),為了在多核機(jī)群環(huán)境下進(jìn)一步提高M(jìn)apReduce的處理性能,提出了一種基于流水線多線程的MapReduce任務(wù)并行化方法,該方法能夠?qū)⒐?jié)點(diǎn)內(nèi)串行的MapReduce任務(wù)并行化為流水線多線程MapReduce任務(wù),從而充分利用多核節(jié)點(diǎn)豐富的硬件資源提高大數(shù)據(jù)處理性能。
[0017]本發(fā)明所述的一種基于流水線多線程的MapReduce任務(wù)并行化方法,包括以下步驟:
[0018](I)將節(jié)點(diǎn)內(nèi)數(shù)據(jù)塊細(xì)分為粒度更小的數(shù)據(jù)塊;
[0019]根據(jù)MapReduce處理機(jī)制,數(shù)據(jù)塊(Chunk)是機(jī)群節(jié)點(diǎn)處理的基本單位,處理的數(shù)據(jù)集體量越大,被劃分的數(shù)據(jù)塊一般也會(huì)越大,如數(shù)據(jù)塊大小一般為128M或256M。為了實(shí)現(xiàn)節(jié)點(diǎn)內(nèi)對(duì)數(shù)據(jù)塊的流水處理,需將數(shù)據(jù)塊進(jìn)一步細(xì)分為粒度更細(xì)的數(shù)據(jù)塊,這樣被細(xì)分的數(shù)據(jù)塊能夠在節(jié)點(diǎn)內(nèi)以流水線方式并行處理;
[0020]細(xì)分?jǐn)?shù)據(jù)塊的數(shù)量可以根據(jù)細(xì)分前數(shù)據(jù)塊(chunk)大小和細(xì)分?jǐn)?shù)據(jù)的粒度計(jì)算得至IJ,其計(jì)算公式如下:
[0021]N=S/G (I)
[0022]其中,S為細(xì)分前數(shù)據(jù)塊的大小,G為細(xì)分?jǐn)?shù)據(jù)塊粒度,N為細(xì)分后數(shù)據(jù)塊數(shù)量。根據(jù)公式(I)計(jì)算得到的細(xì)分?jǐn)?shù)據(jù)塊是節(jié)點(diǎn)內(nèi)流水先處理的基本單位;
[0023](2)將節(jié)點(diǎn)內(nèi)串行的MapReduce任務(wù)劃分為若干子任務(wù);
[0024](2.1)將節(jié)點(diǎn)內(nèi)串行的MapReduce任務(wù)劃分為若干個(gè)子任務(wù),如將節(jié)點(diǎn)的Map任務(wù)或Reduce任務(wù)劃分為數(shù)據(jù)讀取、數(shù)據(jù)序列化、數(shù)據(jù)計(jì)算、數(shù)據(jù)合并、數(shù)據(jù)寫入等子任務(wù);
[0025](2.2)根據(jù)子任務(wù)之間的數(shù)據(jù)依賴和控制依賴,建立子任務(wù)之間的依賴關(guān)系,構(gòu)建子任務(wù)依賴圖;
[0026](3)將子任務(wù)依賴圖轉(zhuǎn)換為子任務(wù)有向無(wú)環(huán)圖;
[0027]并行化后的子任務(wù)有向無(wú)環(huán)圖的節(jié)點(diǎn)表示子任務(wù),節(jié)點(diǎn)之間的有向邊表示子任務(wù)的數(shù)據(jù)依賴和控制依賴關(guān)系。將子任務(wù)依賴圖轉(zhuǎn)換為子任務(wù)有向無(wú)環(huán)圖的算法如下:
[0028]輸入:V[]、E[]分別表示節(jié)點(diǎn)以及有向邊的集合
[0029]輸出:子任務(wù)有向無(wú)環(huán)圖
[0030]步驟:
[0031 ] 31.訪問(wèn)頂點(diǎn)v//V表示節(jié)點(diǎn)集合V中的頂點(diǎn)
[0032]32.trace.add(v)//trace 保存遍歷路徑
[0033]33.visited[v] =_l//visited表示節(jié)點(diǎn)訪問(wèn)標(biāo)記,初始值為O。其值為O表示該節(jié)點(diǎn)未被訪問(wèn)過(guò),其值為-1表示該節(jié)點(diǎn)已經(jīng)被訪問(wèn)過(guò)一次,其值為I表示該節(jié)點(diǎn)所有后繼節(jié)點(diǎn)都已經(jīng)被訪問(wèn)
[0034]34.W = V的第一個(gè)鄰接節(jié)點(diǎn)
[0035]35.while(w 存在)
[0036]if (visited [w] =-1)
[0037]讀出trace中從w節(jié)點(diǎn)(包括)至trace中最后一個(gè)節(jié)點(diǎn)(包括)間的所有節(jié)點(diǎn),這些節(jié)點(diǎn)組成了一個(gè)環(huán),在原有向圖中將該環(huán)合并為新節(jié)點(diǎn)
[0038]if (visited[w] =0)
[0039]從頂點(diǎn)w開始遞歸執(zhí)行該算法
[0040]w = v的下一個(gè)鄰接節(jié)點(diǎn)
[0041]visited[v] = 1
[0042]trace.remove(v)
[0043](4)根據(jù)子任務(wù)有向無(wú)環(huán)圖,將串行的MapReduce任務(wù)并行化為流水線多線程MapReduce 任務(wù);
[0044](4.1)將子任務(wù)有向無(wú)環(huán)圖的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)轉(zhuǎn)換為一個(gè)獨(dú)立的線程;
[0045](4.2)將子任務(wù)有向無(wú)環(huán)圖的每個(gè)有向邊轉(zhuǎn)換為一對(duì)讀寫操作,有向邊的出邊為讀操作,有向邊的入邊為寫操作;
[0046](4.3)將讀寫操作實(shí)現(xiàn)為基于共享內(nèi)存的隊(duì)列函數(shù),當(dāng)隊(duì)列為空或滿時(shí)線程等待,否則線程執(zhí)行讀寫操作;
[0047](4.4)基于得到的線程及與其相關(guān)的讀寫操作集合構(gòu)建一個(gè)流水線線程,這些線程在通信隊(duì)列的支持下以流水線的方式并行執(zhí)行;
[0048](5)構(gòu)建多核機(jī)群環(huán)境下MapReduce多粒度混合并行處理機(jī)制;
[0049](5.1)每個(gè)流水線多線程MapReduce任務(wù)通過(guò)利用多核節(jié)點(diǎn)內(nèi)的硬件資源并行執(zhí)行,加速節(jié)點(diǎn)內(nèi)的數(shù)據(jù)塊并行處理性能;
[0050](5.2)多個(gè)流水線多線程MapReduce任務(wù)通過(guò)利用多核機(jī)群節(jié)點(diǎn)間的硬件資源并行執(zhí)行,加速節(jié)點(diǎn)間的數(shù)據(jù)塊分布式處理能力;
[0051]本發(fā)明的優(yōu)點(diǎn)是:本發(fā)明提出了一種基于流水線多線程的MapReduce并行化方法,其有點(diǎn)在于能夠充分利用多核機(jī)群內(nèi)節(jié)點(diǎn)內(nèi)和節(jié)點(diǎn)間豐富的硬件資源,基于進(jìn)程級(jí)和線程級(jí)兩種并行機(jī)制加速大數(shù)據(jù)的處理性能,在多核機(jī)群已經(jīng)是當(dāng)前及今后主要的高性能計(jì)算平臺(tái)的背景下具有重要的意義。
【附圖說(shuō)明】
[0052 ]圖1本發(fā)明的應(yīng)用例的wordcount程序子任務(wù)依賴圖[0053 ]圖2本發(fā)明的應(yīng)用例的wordcount程序子任務(wù)有向無(wú)環(huán)圖[°°54]圖3本發(fā)明的應(yīng)用例的wordcount程序子任務(wù)線程分配圖
[0055]圖4本發(fā)明的應(yīng)用例的流水線多線程MapReduce任務(wù)并行處理時(shí)空?qǐng)D
[0056]圖5本發(fā)明的應(yīng)用例的多核機(jī)群環(huán)境下MapReduce多粒度混合并行處理模型
【具體實(shí)施方式】
[0057]下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步說(shuō)明。
[0058]WordCount單詞計(jì)數(shù)程序是大數(shù)據(jù)處理的經(jīng)典例子,結(jié)合該程序?qū)Ρ景l(fā)明專利的實(shí)施方式進(jìn)行說(shuō)明,步驟如下:
[0059](I)將節(jié)點(diǎn)內(nèi)數(shù)據(jù)塊細(xì)分為粒度更小的數(shù)據(jù)塊;
[0060]設(shè)數(shù)據(jù)塊大小為128M,細(xì)分后數(shù)據(jù)塊的大小為SM,根據(jù)計(jì)算公式N= S/G,可以計(jì)算得到細(xì)分后數(shù)據(jù)塊的數(shù)量為16,這是節(jié)點(diǎn)內(nèi)流水線處理的任務(wù)數(shù)量;
[0061](2)將節(jié)點(diǎn)內(nèi)串行的MapReduce任務(wù)劃分為若干子任務(wù);
[0062](2.1)將節(jié)點(diǎn)內(nèi)串行的MapReduce任務(wù)劃分為若干個(gè)子任務(wù)。將Map階段劃分為反序列化、數(shù)據(jù)讀取、獲取Tokens、寫入context、數(shù)據(jù)收集、序列化、緩存溢寫、溢寫合并8個(gè)子任務(wù);將Shuf fie階段劃分為數(shù)據(jù)傳輸、shuffle文件合并2個(gè)子任務(wù);將Reduce階段劃分為中間數(shù)據(jù)合并、反序列化、獲取數(shù)值、次數(shù)累加、數(shù)據(jù)寫出5個(gè)子任務(wù);
[0063](2.2)根據(jù)子任務(wù)之間的數(shù)據(jù)依賴和控制依賴,建立子任務(wù)之間的依賴關(guān)系,構(gòu)建子任務(wù)依賴圖,如圖1所不;
[0064](3)將子任務(wù)依賴圖轉(zhuǎn)換為子任務(wù)有向無(wú)環(huán)圖;
[0065]根據(jù)算法將圖1所示的子任務(wù)依賴圖轉(zhuǎn)換為子任務(wù)有向無(wú)環(huán)圖,如圖2所示。
[0066](4)根據(jù)子任務(wù)有向無(wú)環(huán)圖,將串行的MapReduce任務(wù)并行化為流水線多線程MapReduce 任務(wù);
[0067](4.1)將子任務(wù)有向無(wú)環(huán)圖的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)轉(zhuǎn)換為一個(gè)獨(dú)立的線程,根據(jù)圖2的子任務(wù)有向無(wú)環(huán)圖,將其中的每個(gè)節(jié)點(diǎn)分別轉(zhuǎn)換為一個(gè)線程,即Map階段包括7個(gè)線程,分別執(zhí)行反序列化、數(shù)據(jù)讀取、單詞分離、數(shù)據(jù)收集、序列化、緩存溢寫、溢寫合并,Shuffle階段包括2個(gè)線程,分別執(zhí)行中間數(shù)據(jù)傳輸、shuf fie文件合并,Reduce階段包括4個(gè)線程,分別執(zhí)行中間數(shù)據(jù)合并、反序列化、詞頻統(tǒng)計(jì)、數(shù)據(jù)寫出的功能,如圖3所示;
[0068](4.2)子任務(wù)的每個(gè)有向邊轉(zhuǎn)換為一對(duì)數(shù)據(jù)讀寫操作,有向邊的出邊為讀操作,有向邊的入邊為寫操作,使數(shù)據(jù)在有向圖中流動(dòng)?;诘玫降木€程及與其相關(guān)的讀寫操作集合構(gòu)建一個(gè)流水線線程,這些線程在通信隊(duì)列的支持下以流水的方式并行執(zhí)行;
[0069](4.3)將讀寫操作實(shí)現(xiàn)為基于共享內(nèi)存的隊(duì)列函數(shù),當(dāng)隊(duì)列為空或滿時(shí)線程等待,否則線程執(zhí)行讀寫操作;
[0070](4.4)基于得到的線程及與其相關(guān)的讀寫操作集合構(gòu)建一個(gè)流水線線程,,這些線程在通信隊(duì)列的支持下以流水的方式并行執(zhí)行,其執(zhí)行的時(shí)空?qǐng)D如圖4所示;
[0071 ] (5)構(gòu)建多核機(jī)群環(huán)境下MapReduce多粒度混合并行處理機(jī)制;
[0072](5.1)每個(gè)流水線多線程MapReduce任務(wù)通過(guò)利用多核節(jié)點(diǎn)內(nèi)豐富的硬件資源并行執(zhí)行,加速節(jié)點(diǎn)內(nèi)的數(shù)據(jù)塊并行處理性能。如圖5所示,節(jié)點(diǎn)內(nèi)Map階段、Shuf fie、Reduce階段分別在節(jié)點(diǎn)內(nèi)以流水線多線程方式并行執(zhí)行。
[0073](5.2)多個(gè)流水線多線程MapReduce任務(wù)通過(guò)利用多核機(jī)群節(jié)點(diǎn)間的硬件資源并行執(zhí)行,加速節(jié)點(diǎn)間的數(shù)據(jù)塊分布式處理能力,如圖5所示,節(jié)點(diǎn)間的Map階段、Shuffle、Reduce階段分別在節(jié)點(diǎn)間以進(jìn)程級(jí)并行方式并行執(zhí)行。
[0074]本說(shuō)明書實(shí)施例所述的內(nèi)容僅僅是對(duì)發(fā)明構(gòu)思的實(shí)現(xiàn)形式的列舉,本發(fā)明的保護(hù)范圍不應(yīng)當(dāng)被視為僅限于實(shí)施例所陳述的具體形式,本發(fā)明的保護(hù)范圍也及于本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明構(gòu)思所能夠想到的等同技術(shù)手段。
【主權(quán)項(xiàng)】
1.一種基于流水線多線程的MapReduce任務(wù)并行化方法,包括以下步驟: (1)將節(jié)點(diǎn)內(nèi)數(shù)據(jù)塊細(xì)分為粒度更小的數(shù)據(jù)塊; 根據(jù)MapReduce處理機(jī)制,數(shù)據(jù)塊(Chunk)是機(jī)群節(jié)點(diǎn)處理的基本單位;為了實(shí)現(xiàn)節(jié)點(diǎn)內(nèi)對(duì)數(shù)據(jù)塊的流水處理,需將數(shù)據(jù)塊進(jìn)一步細(xì)分為粒度更細(xì)的數(shù)據(jù)塊,這樣被細(xì)分的數(shù)據(jù)塊能夠在節(jié)點(diǎn)內(nèi)以流水線方式并行處理; 細(xì)分?jǐn)?shù)據(jù)塊的數(shù)量可以根據(jù)細(xì)分前數(shù)據(jù)塊(chunk)大小和細(xì)分?jǐn)?shù)據(jù)的粒度計(jì)算得到,其計(jì)算公式如下: N=S/G(I) 其中,S為細(xì)分前數(shù)據(jù)塊的大小,G為細(xì)分?jǐn)?shù)據(jù)塊粒度,N為細(xì)分后數(shù)據(jù)塊數(shù)量;根據(jù)公式(I)計(jì)算得到的細(xì)分?jǐn)?shù)據(jù)塊是節(jié)點(diǎn)內(nèi)流水先處理的基本單位; (2)將節(jié)點(diǎn)內(nèi)串行的MapReduce任務(wù)劃分為若干子任務(wù); (2.1)將節(jié)點(diǎn)內(nèi)串行的MapReduce任務(wù)劃分為若干個(gè)子任務(wù),如將節(jié)點(diǎn)的Map任務(wù)或Reduce任務(wù)劃分為數(shù)據(jù)讀取、數(shù)據(jù)序列化、數(shù)據(jù)計(jì)算、數(shù)據(jù)合并、數(shù)據(jù)寫入的子任務(wù); (2.2)根據(jù)子任務(wù)之間的數(shù)據(jù)依賴和控制依賴,建立子任務(wù)之間的依賴關(guān)系,構(gòu)建子任務(wù)依賴圖; (3)將子任務(wù)依賴圖轉(zhuǎn)換為子任務(wù)有向無(wú)環(huán)圖; 并行化后的子任務(wù)有向無(wú)環(huán)圖的節(jié)點(diǎn)表示子任務(wù),節(jié)點(diǎn)之間的有向邊表示子任務(wù)的數(shù)據(jù)依賴和控制依賴關(guān)系;將子任務(wù)依賴圖轉(zhuǎn)換為子任務(wù)有向無(wú)環(huán)圖的算法如下: 輸入:V[]、E[]分別表示節(jié)點(diǎn)以及有向邊的集合 輸出:子任務(wù)有向無(wú)環(huán)圖 步驟: . 31.訪問(wèn)頂點(diǎn)v//V表示節(jié)點(diǎn)集合V中的頂點(diǎn) .32.trace.add(v)//trace 保存遍歷路徑 .33.visited[v]=_l//visited表示節(jié)點(diǎn)訪問(wèn)標(biāo)記,初始值為O;其值為O表示該節(jié)點(diǎn)未被訪問(wèn)過(guò),其值為-1表示該節(jié)點(diǎn)已經(jīng)被訪問(wèn)過(guò)一次, 其值為I表示該節(jié)點(diǎn)所有后繼節(jié)點(diǎn)都已經(jīng)被訪問(wèn) .34.w = v的第一個(gè)鄰接節(jié)點(diǎn) .35.while(w 存在)if (visited[w] =-1) 讀出trace中從w節(jié)點(diǎn)(包括)至trace中最后一個(gè)節(jié)點(diǎn)(包括)間的所有節(jié)點(diǎn),這些節(jié)點(diǎn)組成了一個(gè)環(huán),在原有向圖中將該環(huán)合并為新節(jié)點(diǎn)if(visited[w]=0) 從頂點(diǎn)w開始遞歸執(zhí)行該算法 w = V的下一個(gè)鄰接節(jié)點(diǎn) visited[v]=I trace.remove(v) (4)根據(jù)子任務(wù)有向無(wú)環(huán)圖,將串行的MapReduce任務(wù)并行化為流水線多線程MapReduce 任務(wù); (4.1)將子任務(wù)有向無(wú)環(huán)圖的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)轉(zhuǎn)換為一個(gè)獨(dú)立的線程; (4.2)將子任務(wù)有向無(wú)環(huán)圖的每個(gè)有向邊轉(zhuǎn)換為一對(duì)讀寫操作,有向邊的出邊為讀操作,有向邊的入邊為寫操作; (4.3)將讀寫操作實(shí)現(xiàn)為基于共享內(nèi)存的隊(duì)列函數(shù),當(dāng)隊(duì)列為空或滿時(shí)線程等待,否則線程執(zhí)行讀寫操作; (4.4)基于得到的線程及與其相關(guān)的讀寫操作集合構(gòu)建一個(gè)流水線線程,這些線程在通信隊(duì)列的支持下以流水線的方式并行執(zhí)行; (5)構(gòu)建多核機(jī)群環(huán)境下MapReduce多粒度混合并行處理機(jī)制; (5.1)每個(gè)流水線多線程MapReduce任務(wù)通過(guò)利用多核節(jié)點(diǎn)內(nèi)的硬件資源并行執(zhí)行,加速節(jié)點(diǎn)內(nèi)的數(shù)據(jù)塊并行處理性能; (5.2)多個(gè)流水線多線程MapReduce任務(wù)通過(guò)利用多核機(jī)群節(jié)點(diǎn)間的硬件資源并行執(zhí)行,加速節(jié)點(diǎn)間的數(shù)據(jù)塊分布式處理能力。
【文檔編號(hào)】G06F9/38GK106055311SQ201610357853
【公開日】2016年10月26日
【申請(qǐng)日】2016年5月26日
【發(fā)明人】張?jiān)Q, 沈志鵬, 肖剛, 高飛, 陸佳煒, 徐俊
【申請(qǐng)人】浙江工業(yè)大學(xué)