本發(fā)明涉及MapReduce技術,尤其涉及一種MapReduce的優(yōu)化處理方法。
背景技術:
MapReduce是一種分布式編程框架,在云計算和大數(shù)據(jù)處理中應用非常廣泛。MapReduce流程如圖1所示,分為Map、Shuffle和Reduce三個階段,Map和Reduce階段分別執(zhí)行用戶編寫的Map()和Reduce()程序,而Shuffle階段介于Map階段和Reduce階段中間,用于對Map階段產(chǎn)生的中間結果進行處理,為Reduce階段準備數(shù)據(jù)。具體而言,Map階段包括如下幾個步驟:
數(shù)據(jù)讀入(Read):從分布式文件系統(tǒng)中讀入數(shù)據(jù);
Map執(zhí)行(Map):執(zhí)行用戶編寫的Map()函數(shù);
數(shù)據(jù)收集(Collect):將Map產(chǎn)生的結果存入緩沖區(qū);
緩存溢寫(Spill):當緩存中數(shù)據(jù)量超過閾值時,將緩存中的數(shù)據(jù)寫入本地硬盤;
溢寫合并(Merge):多次緩存溢寫會產(chǎn)生多個溢寫文件,需要將所有的溢寫文件合并成一個輸出文件。
Shuffle階段的詳細操作如下:
中間數(shù)據(jù)傳輸(Copy):將Map端的中間結果通過網(wǎng)絡傳輸?shù)絉educe端的緩沖區(qū);
緩存溢寫(Spill):Reduce端的緩沖區(qū)數(shù)據(jù)量超過閾值時,將緩沖區(qū)數(shù)據(jù)寫入本地硬盤,每次寫入形成一個shuffle文件;
Reduce階段的具體流程如下:
Shuffle文件合并(Merge):在Reduce端將大量的shuffle文件合并形成少量的大文件,并將大文件合并形成一個有序的大文件;
Reduce執(zhí)行(Reduce):執(zhí)行用戶編寫的Reduce()函數(shù);
數(shù)據(jù)輸出(Output):將Reduce產(chǎn)生的結果輸出到分布式文件系統(tǒng)。
從以上分析可以看出MapReduce框架對中間結果的處理非常復雜,需要花費大量的處理時間,尤其是其中包含的四次排序操作:①Map階段的Spill過程中,每次溢寫時需要將溢寫文件進行排序,一般采用快速排序方法;②Map階段的Merge過程中,溢寫文件合并步驟采用歸并排序的方法;③Reduce階段的Merge過程中,采用歸并排序方法將大量的shuffle文件合并成少量的大文件;④Reduce階段的Merge過程中,采用堆排序方法將多個大文件合并成為一個有序的大文件。由于常用的基于CPU的排序算法的時間復雜度通常為O(N·logN),其中N為待排序數(shù)據(jù)個數(shù)或記錄條數(shù),當數(shù)據(jù)量很大時排序操作消耗的時間很長,而MapReduce通常用于大數(shù)據(jù)處理。
GPU因其強大的計算能力以及相對較低的性能價格比,通常用GPU替代CPU用以提高任務處理性能。使用GPU對MapReduce進行優(yōu)化的方法主要有兩類,一是與用戶程序相關的優(yōu)化方法,即對MapReduce框架進行擴展,使MapReduce程序執(zhí)行過程中可以使用GPU設備替代CPU,提高程序執(zhí)行效率;二是與用戶程序無關的優(yōu)化方法,即修改MapReduce框架或者組件,使MapReduce框架更好的發(fā)揮GPU性能,從而提高效率。用戶程序相關的優(yōu)化方法需要用戶參與進行任務分配,需要用戶對程序的處理流程和GPU的編程規(guī)范非常熟悉,并且不同的用戶程序之間優(yōu)化方法不可重用。而現(xiàn)有的基于GPU排序的MapReduce優(yōu)化方法只針對第一次排序過程的優(yōu)化,即將基于CPU的快速排序算法替換成基于GPU的快速排序算法或者基于GPU的雙調排序算法,而對于其他三次排序操作并不關注,對MapReduce性能的提升有限。
技術實現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有技術的不足,提出一種基于GPU排序的MapReduce優(yōu)化方法,將MapReduce執(zhí)行流程中的四次排序操作全部使用GPU執(zhí)行,并分別使用基于GPU的快速排序和歸并排序算法替代傳統(tǒng)的基于CPU的快速排序、歸并排序和堆排序算法,提高中間數(shù)據(jù)處理速度,進而提升MapReduce的性能。為實現(xiàn)本發(fā)明的目的,本發(fā)明的基于GPU排序的MapReduce優(yōu)化方法中,MapReduce包含:Map階段、Shuffle階段、以及Reduce階段,Map階段包含Spill過程和Merge過程,Reduce階段包含Merge過程,其中,在Map階段的Spill過程中采用基于GPU的快速排序流程,在Map階段的Merge過程中和Reduce階段的Merge過程中采用基于GPU的歸并排序流程,其中:
基于GPU的快速排序流程包含步驟:
(1.1)將數(shù)據(jù)存入GPU的全局存儲空間,并劃分成m個互不重疊的數(shù)據(jù)塊,每個數(shù)據(jù)塊由一個線程塊處理;
(1.2)m個線程塊并行地遍歷對應的數(shù)據(jù)塊,每個線程塊內(nèi)部n個線程并行地遍歷相應數(shù)據(jù)塊的一部分,并記錄大于和小于分界值的元素的個數(shù);
(1.3)依次統(tǒng)計每個線程塊內(nèi)部的每個線程的相對計數(shù)值;
(1.4)依次統(tǒng)計每個線程塊的計數(shù)值和相對計數(shù)值;
(1.5)所有線程進行數(shù)據(jù)交換,序列分成大于分界值和小于分界值的兩個子序列:子序列1,、子序列2;
(1.6)對步驟(1.5)中產(chǎn)生的子序列1、子序列2分別再采用步驟(1.1)-(1.5)進行排序,直到最終排序完成,即可實現(xiàn)對原始序列的排序,
基于GPU的歸并排序流程包含步驟:
(2.1)將待歸并的序列兩兩分組,分成h組,每組序列包含Ai和Bi兩個序列,每次對一組序列Ai和Bi進行歸并,其中1≤i≤h,Ai和Bi表示第i個分組包含的兩個序列;
(2.2)分別將Ai和Bi劃分成m個子序列,每個線程塊對Ai的一個子序列和Bi的一個子序列進行歸并,共需進行l(wèi)og2 m+1輪子序列的歸并即可將序列Ai和Bi歸并為一個有序序列Ci;
(2.3)重復步驟(2.2),直到所有分組的序列Ai和Bi歸并完成,分別產(chǎn)生每個分組的歸并結果C1、C2、……、Ch;其中1≤i≤h,Ai和Bi表示第i個分組包含的兩個序列,Ci為Ai和Bi歸并完成后產(chǎn)生的有序序列;
(2.4)對h個分組的歸并結果C1、C2、……、Ch,重復步驟(2.1)-(2.3)進行歸并,直到產(chǎn)生最終歸并結果。
進一步地,在步驟(1.3)中,線程塊Bk(1≤k≤m)中的每個線程的計數(shù)值分別為Lk,1,...,Lk,n和Rk,1,...,Rk,n,則第i(1≤i≤n)個線程的相對計數(shù)值分別為:
和
其中Lk,1和Rk,1分別表示線程塊Bk中第1個線程遍歷的數(shù)據(jù)中比分界值小的數(shù)據(jù)個數(shù)和比分界值大的數(shù)據(jù)個數(shù),Lk,n和Rk,n分別表示線程塊Bk中第n個線程遍歷的數(shù)據(jù)中比分界值小的數(shù)據(jù)個數(shù)和比分界值大的數(shù)據(jù)個數(shù),Lk,j和Rk,j分別表示線程塊Bk中第j個線程遍歷的數(shù)據(jù)中比分界值小的數(shù)據(jù)個數(shù)和比分界值大的數(shù)據(jù)個數(shù),BLk,i和BRk,i分別表示線程塊Bk中第i個線程的相對計數(shù)值,即該線程塊中前i-1個線程遍歷的數(shù)據(jù)中比分界值小的數(shù)據(jù)總量和比分界值大的數(shù)據(jù)總量。
進一步地,在步驟(1.4)中,線程塊Bk(1≤k≤m)的計數(shù)值分別為和線程塊Bk的相對計數(shù)值分別為和其中Lk、Lj和Rk、Rj分別表示線程塊Bk和Bj遍歷的數(shù)據(jù)塊內(nèi)小于分界值的數(shù)據(jù)總量和大于分界值的數(shù)據(jù)總量,SLk和SRk分別表示線程塊Bk之前的k-1個線程塊遍歷的數(shù)據(jù)塊中小于分界值的數(shù)據(jù)總量和大于分界值的數(shù)據(jù)總量。
進一步地,在步驟(1.5)中,每個線程塊中每個線程將其遍歷的小于分界值的數(shù)據(jù)依次交換到分界值左側,大于分界值的數(shù)據(jù)依次交換到分界值右側,然后每個線程塊將對應位置的數(shù)據(jù)塊寫入輔助單元,加入分界值并根據(jù)分界值將序列分成比分界值小和比分界值大的兩個子序列:子序列1和子序列2。
進一步地,在步驟(2.2)中,包含以下子步驟:
(2.21)對于Ai和Bi的第k輪歸并(0≤k≤log2 m),產(chǎn)生m/2k個歸并結果R1,R2,……,Rkr,并將每個歸并結果Rp(1≤p≤kr)劃分為2k個子序列Rp,1,Rp,2,……,Rp,km;其中kr(kr=m/2k)表示序列Ai和Bi的第k輪歸并產(chǎn)生的歸并結果數(shù)量,R1、R2和Rkr分別表示第1個、第2個以及第kr個歸并結果,km(其中km=2k)表示序列Ai和Bi的第k輪歸并產(chǎn)生的每個歸并結果劃分的子序列個數(shù),Rp,1、Rp,2和Rp,km分別表示第p(1≤p≤kr)個歸并結果劃分后的第1個、第2個和第km個子序列;
(2.22)對于Ai和Bi的第k+1輪歸并(0≤k<log2 m),將第k輪產(chǎn)生的m/2k個歸并結果依次兩兩分組(R1,R2),...,(Rkr-1,Rkr),每一組歸并結果(Ri-1,Ri)(1≤i≤m/2k)相同位置的子序列由同一線程塊進行歸并,即子序列Ri-1,1和Ri,1、Ri-1,2和Ri,2、...、Ri-1,km和Ri,km分別由一個線程塊進行歸并,本輪參與歸并操作的線程塊數(shù)量為m;
(2.23)重復子步驟(2.21)-(2.22),直到序列Ai和Bi歸并完成,輸出該分組的歸并結果Ci。
在本發(fā)明中,通過在Map階段的Spill過程中將基于CPU的快速排序替換為基于GPU的快速排序;在Map階段的Merge過程中將基于CPU的歸并排序替換為基于GPU的歸并排序;在Reduce階段的Merge過程中,將基于CPU的歸并排序和堆排序均替換為基于GPU的歸并排序。由GPU實現(xiàn)的歸并排序的性能比堆排序的性能更優(yōu),且Merge過程中的堆排序本質上是將有序的大文件合并為一個大文件。因此本發(fā)明的基于GPU排序的MapReduce優(yōu)化方法充分利用了GPU設備強大的計算能力替代CPU完成MapReduce對中間結果的排序,將MapReduce中四次基于CPU的排序操作(包括一次快速排序、兩次歸并排序和一次堆排序)替換為基于GPU的快速排序和歸并排序操作,加快排序的速度,進而很大程度地提高了MapReduce的性能。
相比傳統(tǒng)的入侵檢測系統(tǒng)中網(wǎng)絡日志采集和存儲方法,本發(fā)明具有如下優(yōu)點:
①用基于GPU的排序算法替代基于CPU的排序算法,充分利用GPU的強大計算能力,提高中間數(shù)據(jù)處理速度,進而提升MapReduce性能;
②不需要對MapReduce框架進行修改,只替換對中間結果的排序算法,實現(xiàn)難度較?。?/p>
③可以與其他基于用戶程序的優(yōu)化方法以及基于MapReduce框架的優(yōu)化方法同時使用,適用范圍廣泛;
④由于GPU設備的應用越來越多,很多服務器和個人計算機均已配置GPU設備,因此本發(fā)明可以充分發(fā)揮現(xiàn)有GPU設備的計算能力,即便新購買GPU設備的硬件成本也不高。
附圖說明
下面結合附圖對本發(fā)明作進一步描寫和闡述。
圖1是現(xiàn)有技術中MapReduce的流程圖。
圖2是本發(fā)明首選實施方式的優(yōu)化方法中基于GPU的快速排序流程。
圖3是本發(fā)明首選實施方式的優(yōu)化方法中基于GPU的歸并排序流程的一個流程示例。
具體實施方式
如現(xiàn)有技術中所述,MapReduce包含:Map階段、Shuffle階段、以及Reduce階段,Map階段包含Spill過程和Merge過程,Reduce階段包含Merge過程。
本發(fā)明的基于GPU排序的MapReduce優(yōu)化方法中,采用GPU快速排序替代Map階段的Spill過程中基于CPU的快速排序;采用基于GPU的歸并排序替代Map階段的Merge過程中基于CPU的歸并排序;采用基于GPU的歸并排序替代Reduce階段的Merge過程中基于CPU的歸并排序。
基于GPU的快速排序流程包含:
(1.1)將數(shù)據(jù)存入GPU的全局存儲空間,并劃分成m個互不重疊的數(shù)據(jù)塊,每個數(shù)據(jù)塊由一個線程塊處理;如圖2中a序列劃分和b線程遍歷所示;
(1.2)m個線程塊并行地遍歷對應的數(shù)據(jù)塊,每個線程塊內(nèi)部n個線程并行地遍歷相應數(shù)據(jù)塊的一部分,并記錄大于和小于分界值的元素的個數(shù);如圖2中c遍歷計數(shù)所示;
(1.3)依次統(tǒng)計每個線程塊內(nèi)部的每個線程的相對計數(shù)值;在圖2中d技術累加中進行;其中線程塊Bk(1≤k≤m)中的每個線程的計數(shù)值分別為Lk,1,...,Lk,n和Rk,1,...,Rk,n,則第i(1≤i≤n)個線程的相對計數(shù)值分別為:
和
其中Lk,1和Rk,1分別表示線程塊Bk中第1個線程遍歷的數(shù)據(jù)中比分界值小的數(shù)據(jù)個數(shù)和比分界值大的數(shù)據(jù)個數(shù),Lk,n和Rk,n分別表示線程塊Bk中第n個線程遍歷的數(shù)據(jù)中比分界值小的數(shù)據(jù)個數(shù)和比分界值大的數(shù)據(jù)個數(shù),Lk,j和Rk,j分別表示線程塊Bk中第j個線程遍歷的數(shù)據(jù)中比分界值小的數(shù)據(jù)個數(shù)和比分界值大的數(shù)據(jù)個數(shù),BLk,i和BRk,i分別表示線程塊Bk中第i個線程的相對計數(shù)值,即該線程塊中前i-1個線程遍歷的數(shù)據(jù)中比分界值小的數(shù)據(jù)總量和比分界值大的數(shù)據(jù)總量。
(1.4)依次統(tǒng)計每個線程塊的計數(shù)值和相對計數(shù)值;在圖2中d技術累加中進行;線程塊Bk(1≤k≤m)的計數(shù)值分別為和線程塊Bk的相對計數(shù)值分別為和
其中Lk、Lj和Rk、Rj分別表示線程塊Bk和Bj遍歷的數(shù)據(jù)塊內(nèi)小于分界值的數(shù)據(jù)總量和大于分界值的數(shù)據(jù)總量,SLk和SRk分別表示線程塊Bk之前的k-1個線程塊遍歷的數(shù)據(jù)塊中小于分界值的數(shù)據(jù)總量和大于分界值的數(shù)據(jù)總量。
(1.5)所有線程進行數(shù)據(jù)交換,序列分成大于分界值和小于分界值的兩個子序列:子序列1,、子序列2;如圖2中所示e數(shù)據(jù)交換、f數(shù)據(jù)回寫、g劃分子序列,其中e數(shù)據(jù)交換后進行f數(shù)據(jù)回寫,數(shù)據(jù)回寫完畢形成兩子序列,即g劃分子序列;更具體一點,首先每個線程塊中每個線程將其遍歷的小于分界值的數(shù)據(jù)依次交換到分界值左側,大于分界值的數(shù)據(jù)依次交換到分界值右側,如第k個線程塊的第i個線程中小于分界值的數(shù)據(jù)從序列的SLk+BLk,i位置依次存放至SLk+BLk,i+Lk,i位置,然后每個線程塊將對應位置的數(shù)據(jù)塊寫入輔助單元,加入分界值并根據(jù)分界值將序列分成比分界值小和比分界值大的兩個子序列:子序列1和子序列2。
(1.6)對步驟(1.5)中產(chǎn)生的子序列1、子序列2分別再采用步驟(1.1)-(1.5)進行排序,直到最終排序完成,即可實現(xiàn)對原始序列的排序。
為了提高GPU的利用率,基于GPU的歸并排序方法的具體操作步驟如下:
(2.1)將待歸并的序列兩兩分組,分成h組,每組序列包含Ai和Bi兩個序列,每次對一組序列Ai和Bi進行歸并,其中1≤i≤h,Ai和Bi表示第i個分組包含的兩個序列;
(2.2)分別將Ai和Bi劃分成m個子序列,每個線程塊對Ai的一個子序列和Bi的一個子序列進行歸并,共需進行l(wèi)og2 m+1輪子序列的歸并即可將序列Ai和Bi歸并為一個有序序列Ci;更具體地,步驟(2.2)細化為下面子步驟:
(2.21)對于Ai和Bi的第k輪歸并(0≤k≤log2 m),產(chǎn)生m/2k個歸并結果R1,R2,……,Rkr,并將每個歸并結果Rp(1≤p≤kr)劃分為2k個子序列Rp,1,Rp,2,……,Rp,km;其中kr(kr=m/2k)表示序列Ai和Bi的第k輪歸并產(chǎn)生的歸并結果數(shù)量,R1、R2和Rkr分別表示第1個、第2個以及第kr個歸并結果,km(其中km=2k)表示序列Ai和Bi的第k輪歸并產(chǎn)生的每個歸并結果劃分的子序列個數(shù),Rp,1、Rp,2和Rp,km分別表示第p(1≤p≤kr)個歸并結果劃分后的第1個、第2個和第km個子序列;
(2.22)對于Ai和Bi的第k+1輪歸并(0≤k<log2 m),將第k輪產(chǎn)生的m/2k個歸并結果依次兩兩分組(R1,R2),...,(Rkr-1,Rkr),每一組歸并結果(Ri-1,Ri)(1≤i≤m/2k)相同位置的子序列由同一線程塊進行歸并,即子序列Ri-1,1和Ri,1、Ri-1,2和Ri,2、...、Ri-1,km和Ri,km分別由一個線程塊進行歸并,本輪參與歸并操作的線程塊數(shù)量為m;
(2.23)重復子步驟(2.21)-(2.22),直到序列Ai和Bi歸并完成,輸出該分組的歸并結果Ci。
(2.3)重復步驟(2.2),直到所有分組的序列Ai和Bi歸并完成,分別產(chǎn)生每個分組的歸并結果C1、C2、……、Ch;其中1≤i≤h,Ai和Bi表示第i個分組包含的兩個序列,Ci為Ai和Bi歸并完成后產(chǎn)生的有序序列;
(2.4)對h個分組的歸并結果C1、C2、……、Ch,重復步驟(2.1)-(2.3)進行歸并,直到產(chǎn)生最終歸并結果。
圖3所示為子序列A1和B1劃分為4個子序列,采用4個線程塊進行歸并排序的流程示例,其中G1、G2、G3、……、Gn表示用以進行子序列歸并的第1、2、3...n個線程塊,每個線程塊在每一輪歸并中處理的子序列不同,Ri,j(1≤i≤n,1≤j≤n)表示每輪歸并過程中產(chǎn)生的第i個歸并結果的第j個子序列。
上述具體實施方式僅僅對本發(fā)明的優(yōu)選實施方式進行描述,而并非對本發(fā)明的保護范圍進行限定。在不脫離本發(fā)明設計構思和精神范疇的前提下,本領域的普通技術人員根據(jù)本發(fā)明所提供的文字描述、附圖對本發(fā)明的技術方案所作出的各種變形、替代和改進,均應屬于本發(fā)明的保護范疇。本發(fā)明的保護范圍由權利要求確定。