一種異構集群的Hadoop矩陣處理方法及系統(tǒng)的制作方法
【技術領域】
[0001]本發(fā)明屬于數(shù)據處理技術領域,尤其涉及一種異構集群的Hadoop矩陣處理方法及 系統(tǒng)。
【背景技術】
[0002] 高矩陣運算已廣泛應用于工業(yè)、科技等重要領域,從圖像處理、數(shù)據挖掘到生物計 算等,矩陣乘法是矩陣運算中最為重要的計算之一。但隨著矩陣規(guī)模的擴展,短時間內進行 矩陣相乘變得困難起來。傳統(tǒng)矩陣乘法采用單個節(jié)點串行處理或GHJ并行處理方案。該方案 雖然在一定程度上提高了性能,但是并不適用于海量數(shù)據處理。Hadoop是一個能夠對大數(shù) 據處理的分布式框架,是MapReduce編程模型最為流行的開源實現(xiàn)。它簡化了數(shù)據分發(fā)、處 理、計算和任務調度,并具有高容錯、高可靠、高可擴展和高資源利用率等特性。編程人員只 需要編寫Map和Reduce函數(shù),Hadoop會自動將任務分配到集群的各個節(jié)點,并執(zhí)行任務,從 而達到數(shù)據并行。論文(孫遠帥,陳,官新均,林?。?基于Hadoop的大數(shù)據乘法處理方法",提 出采用內積法和外積法實現(xiàn)MapReduce的矩陣相乘。
[0003] 然而,(1)對于海量數(shù)據處理應用,Hadoop表現(xiàn)并不理想。海量數(shù)據處理應用,有兩 個特點:計算密集和數(shù)據密集,Hadoop主要適用于數(shù)據密集型應用;(2)采用內積法的 MapReduce僅僅一個作業(yè)就可以完成任務,但是Map階段的中間輸出結果很大,Hadoop框架 在Map階段需要將中間結果寫入本地磁盤,Shuffle階段需要復制對應分區(qū)的中間結果,因 此,該方案在實際應用中很少使用。外積法在降低一定并發(fā)粒度的情況下,把原先的作業(yè)分 成兩個,相對減少了中間結果的數(shù)據量,但是第一個作業(yè)的輸出需要作為第二個作業(yè)的輸 入,此時需要等待第一個作業(yè)完成方能進行第二個作業(yè)。
【發(fā)明內容】
[0004] 本發(fā)明鑒于上述現(xiàn)有技術的不足,提供一種異構集群的Hadoop矩陣處理方法,有 效提升Hadoop矩陣的相乘效率。
[0005] 本發(fā)明的實施例提供一種異構集群的Hadoop矩陣處理方法,包括以下步驟,
[0000] 搭建一個物理集群,設置一個Master節(jié)點及多個Slaver節(jié)點;
[0007] 在所述Master節(jié)點及多個Slaver節(jié)點上分別配置Java開發(fā)環(huán)境下的編程環(huán)境,并 預編矩陣相乘CUDA版的Map和Reduce代碼;
[0008] 讀取內存中已存儲第一矩陣A及第二矩陣B的相關信息,并根據預編代碼對所述存 儲的第一矩陣A及第二矩陣B進行MapReduce矩陣相乘運算;
[0009] 控制運算結果直接寫進分布式文件系統(tǒng)HDFS;
[00?0] 其中,所述A=(aij)是mXs的矩陣,B=(bij)是sXn的矩陣。
[0011] 優(yōu)選地,所述Java開發(fā)環(huán)境下的編程環(huán)境是指Java開發(fā)環(huán)境JDK,Hadoop,Inte 1 GHJ 的編程環(huán)境 CUDA,JCuda,Gangl ia;
[0012]其中,JCuda提供了 Java直接訪問CUDA的API,Gang 1 ia實時監(jiān)控集群的CPU、內存、 網絡、硬盤利用率。
[0013] 優(yōu)選地,所述第一矩陣A及第二矩陣B的存儲方式采用三元組表格存儲方式,具體 列信息包括i,j,aiT bj;
[0014] 其中,aiT為第一矩陣A的第i行;h為第二矩陣B的第j列。
[0015] 優(yōu)選地,MapReduce矩陣相乘運算具體包括:
[0016] Map階段,根據預編代碼得到emit((i, j),aiT · bj),其中
;Reduce 階段,直接獲得Map階段的結果。
[0017] 優(yōu)選地,在所述步驟控制運算結果直接寫進分布式文件系統(tǒng)HDFS之后,還包括步 驟,
[0018] 搭建Web服務器,顯示程序的加速比及所述物理集群的軟硬件配置信息。
[0019]優(yōu)選地,如果reduce階段處理的數(shù)據個數(shù)為零,Map階段將中間輸入結果直接寫進 分布式文件系統(tǒng)HDFS。
[0020] 優(yōu)選地,在所述第一矩陣A及第二矩陣B的存儲方式采用三元組表格存儲方式存儲 之前,首先對所述第一矩陣A及第二矩陣B進行預處理,按照三元組存儲表格方式采集第一 矩陣A及第二矩陣B中的相關信息。
[0021] 本發(fā)明的實施例還提供一種異構集群的Hadoop矩陣處理系統(tǒng),所述處理系統(tǒng)包 括:
[0022] 環(huán)境搭建單元,用于搭建一個物理集群,并設置一個Master節(jié)點及多個Slaver節(jié) 占.
[0023] 配置及代碼預編單元,用于為節(jié)點配置Java開發(fā)環(huán)境下的編程環(huán)境,并預編矩陣 相乘CUDA版的Map和Reduce代碼;
[0024] 存儲單元,用于存儲需要進行相乘運算的矩陣信息;
[0025] 執(zhí)行單元,用于讀取存儲單元中已存儲的矩陣信息,并根據預編代碼對所述存儲 矩陣進行MapReduce矩陣相乘運算;
[0026] 輸出單元,控制將運算結果直接寫進分布式文件系統(tǒng)HDFS。
[0027] 優(yōu)選地,所述處理系統(tǒng)還包括一個性能監(jiān)控及顯示單元,用于顯示程序的加速比 及所述物理集群的軟硬件配置信息。
[0028]優(yōu)選地,根據預編代碼對所述存儲矩陣進行MapReduce矩陣相乘運算的兩個矩陣 在所述存儲單元中的信息存儲方式采用三元組表格存儲方式,具體列信息包括i,j,a/ bj; [0029]其中,a/為第一個矩陣的第i行;bj為第二個矩陣的第j列。
[0030]以上技術方案中,采用Master節(jié)點及多個Slaver節(jié)點并行處理Hadoop矩陣乘法任 務,并通過預編矩陣相乘⑶DA版的Map和Reduce代碼,實現(xiàn)GPU對Hadoop矩陣乘法任務進行 加速,從算法角度提升Hadoop矩陣相乘性能有限,能夠更深層次提高程序的性能,有效提高 了矩陣相乘運算的效率。
【附圖說明】
[0031]圖1是本發(fā)明一種實施例的異構集群的Hadoop矩陣處理方法的流程示意圖。
[0032]圖2是本發(fā)明一種實施例的異構集群的Hadoop矩陣處理系統(tǒng)的結構框圖。
[0033] 圖3是本發(fā)明一種異構集群的Hadoop矩陣處理系統(tǒng)結構圖。
【具體實施方式】
[0034] 為了使本發(fā)明所解決的技術問題、技術方案及有益效果更加清楚明白,以下結合 附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用 以解釋本發(fā)明,并不用于限定本發(fā)明。
[0035]如圖1所示,本發(fā)明的實施例提供一種異構集群的Hadoop矩陣相乘算法,包括以下 步驟,
[0036] 步驟S100,搭建一個物理集群,設置一個Master節(jié)點及多個Slaver節(jié)點;
[0037] 步驟S200,在所述Master節(jié)點及多個Slaver節(jié)點上分別配置Java開發(fā)環(huán)境下的編 程環(huán)境,并預編矩陣相乘CUDA版的Map和Reduce代碼;
[0038]步驟S300,讀取內存中已存儲第一矩陣A及第二矩陣B的相關信息,并根據預編代 碼對所述存儲的第一矩陣A及第二矩陣B進行MapReduce矩陣相乘運算;
[0039]步驟S400,控制運算結果直接寫進分布式文件系統(tǒng)HDFS;
[0040] 其中,所述A=(aij)是mXs的矩陣,B=(bij)是sXn的矩陣。
[0041 ] 優(yōu)選地,在步驟S200中,在每個Master及Slaver節(jié)點上部署和安裝配置Java開發(fā) 環(huán)境JDK,Hadoop,Intel GTO的編程環(huán)境CUDA,JCuda,Ganglia。其中JCuda提供了 Java直接 訪問CUDA的API,Gang 1 ia實時監(jiān)控集群的CPU、內存、網絡、硬盤利用率等。
[0042] Hadoop是采用Java語言編程實現(xiàn)的,而GPU是CUDA(intel GPU)/0penCL(AMD GPU) 編寫的,為了使Hadoop任務能夠無縫運行于GPU,得解決代碼統(tǒng)一問題,Hadoop提供了 Pipes,Streaming兩種編程接口支持其他編程語言,Java自身也有JNI方案支持其他編程語 言。JCuda可以將⑶DA runtime和driver api與Java相連接,從而實現(xiàn)Java程序調用GPU資 源。
[0043] Pipes采用包裝進程的方式通過Socket傳輸"key-value對",這會對網絡傳輸會帶 來很大的開銷,且調試程序困難。Streaming采用包裝進程的方式通過標準輸入輸出流傳輸 "key-value對",網絡傳輸也成為主要的性能瓶頸,但測試程序簡單。JNI方案編程復雜,可 實施性不高。因此,本方案從編程難度、程序性能、調試難度考慮,采用JCuda方案。
[0044]由于Hadoop的Map階段數(shù)據處理是以行為單位,所以如果數(shù)據存儲采用二維表形 式,則讀取矩陣某一列時需要將整個矩陣讀入內存,再獲取相應的列,性能會大大降低,故 Hadoop對于矩陣的運算處理采用表1的三元組表格存儲方案。
[0045]表1:矩陣的三元組表格存儲形式 Γλλ/ιλ?
[0048]采用內積法進行矩陣相乘運算時,矩陣C中的每一個元素的計算相互之間沒有依 賴,可以達到m X η的并發(fā)粒度。MapRedce的流程如下所示:
[0049] Map:
[0050] 對于矩陣A的每個元素 aij,即(i j aij),emit((i,k),aij),ke[l,n],
[0051] 對于矩陣B的每個元素 bjk,即(j k bjk),emit((i,k),bjk),ie[l,m]。
[0052] Reduce:
[0053] 對于每一個key: (i k)
[0054] 計算Value: /=1
[0055] 從計算流程中可以發(fā)現(xiàn)中間數(shù)據結果的輸出量為mX s Xn個A矩陣元素和s Xn Xm 個B矩陣元素,將中間的輸出結果數(shù)據量相對于原始矩陣數(shù)據量擴大了 m倍