本發(fā)明涉及復(fù)雜網(wǎng)絡(luò),具體地,涉及基于MapReduce的復(fù)雜網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)計(jì)算方法和系統(tǒng)。
背景技術(shù):
:首先對(duì)相關(guān)術(shù)語進(jìn)行說明。復(fù)雜網(wǎng)絡(luò):具有自組織、自相似、吸引子、小世界、無標(biāo)度中部分或全部性質(zhì)的網(wǎng)絡(luò)稱為復(fù)雜網(wǎng)絡(luò)。包括現(xiàn)實(shí)中的WWW網(wǎng)絡(luò)、Internet、社會(huì)關(guān)系網(wǎng)絡(luò)、經(jīng)濟(jì)網(wǎng)絡(luò)、電力網(wǎng)絡(luò)等。網(wǎng)絡(luò)拓?fù)涮卣鲄?shù):由于網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜,研究者在刻畫復(fù)雜網(wǎng)絡(luò)結(jié)構(gòu)的統(tǒng)計(jì)特性上提出了許多概念和方法,稱之為網(wǎng)絡(luò)的拓?fù)涮卣鲄?shù)。主要包括度、聚類系數(shù)、網(wǎng)絡(luò)直徑、平均路徑長(zhǎng)度、最大連通子圖大小、核數(shù)和介數(shù)等。度:節(jié)點(diǎn)的度是指該節(jié)點(diǎn)擁有相鄰節(jié)點(diǎn)的數(shù)目。聚類系數(shù):節(jié)點(diǎn)的聚類系數(shù)定義為它所有相鄰節(jié)點(diǎn)之間連的數(shù)目占可能的最大連邊數(shù)目的比例,網(wǎng)絡(luò)的聚集系數(shù)則是所有節(jié)點(diǎn)簇系數(shù)的平均值。平均路徑長(zhǎng)度和網(wǎng)絡(luò)直徑:在網(wǎng)絡(luò)中,兩點(diǎn)間的距離被定義為連接兩點(diǎn)的最短路所包含的邊的數(shù)目,所有節(jié)點(diǎn)對(duì)的距離的平均值稱作網(wǎng)絡(luò)的平均路徑長(zhǎng)度。所有節(jié)點(diǎn)對(duì)的距離的最大值稱作網(wǎng)絡(luò)的直徑。最大連通子圖大?。壕W(wǎng)絡(luò)可能不是完全連通的,通常使用最大連通子圖大小來表示網(wǎng)絡(luò)的連通性。核數(shù):描述網(wǎng)絡(luò)層次性的參數(shù),一個(gè)圖的k-核指反復(fù)去掉小于或等于k的節(jié)點(diǎn)后所剩余的子圖。若一個(gè)節(jié)點(diǎn)存在于k-核,而在(k+1)-核中被移除,那么此節(jié)點(diǎn)的核數(shù)為k,節(jié)點(diǎn)核中的最大值稱為網(wǎng)絡(luò)的核數(shù)。介數(shù):節(jié)點(diǎn)的介數(shù)為網(wǎng)絡(luò)中所有的最短路徑中經(jīng)過該節(jié)點(diǎn)的數(shù)量比例。當(dāng)前研究中,計(jì)算網(wǎng)絡(luò)的拓?fù)涮卣鲄?shù)大多是在單機(jī)條件下完成的。由于一些網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)算法的時(shí)間復(fù)雜度較高,傳統(tǒng)單機(jī)條件下的網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)計(jì)算方法在處理大規(guī)模網(wǎng)絡(luò)拓?fù)鋽?shù)據(jù)時(shí)存在效率低、內(nèi)存受限的問題。所以考慮使用Hadoop分布式計(jì)算平臺(tái)來進(jìn)行計(jì)算。Hadoop的實(shí)現(xiàn)的MapReduce計(jì)算框架為設(shè)計(jì)分布式算法提供了簡(jiǎn)單易懂的編程模型。目前,利用Hadoop分布式平臺(tái)計(jì)算網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)還沒有成熟的技術(shù)。由于分布式環(huán)境的數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)處理和單機(jī)系統(tǒng)存在很大差異,導(dǎo)致傳統(tǒng)單機(jī)串行圖算法向MapReduce計(jì)算框架上移植時(shí)存在以下問題:1.數(shù)據(jù)存儲(chǔ)和處理方式上不兼容大量的計(jì)算拓?fù)涮卣鲄?shù)的算法都需要執(zhí)行查找或修改鄰居節(jié)點(diǎn)信息的操作,單機(jī)算法中的圖結(jié)構(gòu)以鄰接表或者鄰接矩陣的形式存儲(chǔ)在單機(jī)內(nèi)存中,可以在常數(shù)時(shí)間內(nèi)查找到鄰居節(jié)點(diǎn)的存儲(chǔ)位置并修改其狀態(tài)信息。但是在分布式環(huán)境中,每個(gè)節(jié)點(diǎn)信息是以單獨(dú)一條文本來存儲(chǔ)的,查找或修改鄰居節(jié)點(diǎn)信息都需要遍歷整個(gè)圖文件,效率很低。2.單機(jī)算法缺乏并行特性單機(jī)算法在設(shè)計(jì)時(shí)并沒有考慮到并行特性,所以在單機(jī)上串行執(zhí)行的算法并不一定能在分布式計(jì)算平臺(tái)上高效的運(yùn)行。例如對(duì)網(wǎng)絡(luò)拓?fù)鋱D進(jìn)行遍歷的過程,在單機(jī)算法中深度優(yōu)先遍歷和寬度優(yōu)先遍歷都是常用的算法。但是同一時(shí)刻,寬度優(yōu)先遍歷可以并行訪問處于網(wǎng)絡(luò)同一層的多個(gè)節(jié)點(diǎn),而深度優(yōu)先遍歷只能串行訪問一個(gè)節(jié)點(diǎn),在當(dāng)前節(jié)點(diǎn)未完成訪問時(shí)不能繼續(xù)訪問下一節(jié)點(diǎn)。所以寬度優(yōu)先遍歷算法的并行性要優(yōu)于深度優(yōu)先遍歷,更適合運(yùn)行在MapReduce框架中。3.單機(jī)算法并行移植時(shí)會(huì)產(chǎn)生額外的開銷MapReduce運(yùn)行時(shí)需要執(zhí)行啟動(dòng)作業(yè)、任務(wù)調(diào)度、讀寫磁盤等操作,會(huì)產(chǎn)生額外的時(shí)間開銷。特別地,當(dāng)圖算法中的迭代次數(shù)過多時(shí),MapReduce框架需要連續(xù)啟動(dòng)若干作業(yè)才可以完成圖的迭代處理,每個(gè)作業(yè)都會(huì)執(zhí)行啟動(dòng)作業(yè)、任務(wù)調(diào)度、讀寫磁盤等操作,尤其是相鄰作業(yè)之間通過分布式文件系統(tǒng)交換全部數(shù)據(jù),產(chǎn)生大量額外開銷,導(dǎo)致算法計(jì)算效率下降。技術(shù)實(shí)現(xiàn)要素:針對(duì)現(xiàn)有技術(shù)中的缺陷,本發(fā)明的目的是提供一種基于MapReduce的復(fù)雜網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)計(jì)算方法。根據(jù)本發(fā)明提供的一種基于MapReduce的復(fù)雜網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)計(jì)算方法,其特征在于,采用基于消息傳遞的算法并行化方法;所述基于消息傳遞的算法并行化方法,包括:步驟1,產(chǎn)生更新消息;每個(gè)節(jié)點(diǎn)根據(jù)本節(jié)點(diǎn)的狀態(tài)信息計(jì)算生成更新消息的內(nèi)容,把鄰居節(jié)點(diǎn)作為消息的目的節(jié)點(diǎn),將更新消息向目的節(jié)點(diǎn)發(fā)送;步驟2,傳遞消息;更新消息按照目的節(jié)點(diǎn)被發(fā)送給指定的節(jié)點(diǎn);步驟3,更新節(jié)點(diǎn)內(nèi)部狀態(tài)信息;目的節(jié)點(diǎn)收到若干條更新消息,目的節(jié)點(diǎn)對(duì)這些更新消息進(jìn)行解析并更新目的節(jié)點(diǎn)內(nèi)部狀態(tài)信息。優(yōu)選地,所述步驟1,具體為:步驟1由MapReduce框架中的Map階段完成,Map階段的處理方法由用戶完成;該Map階段負(fù)責(zé)處理每條存儲(chǔ)節(jié)點(diǎn)信息的文本記錄,根據(jù)需求產(chǎn)生更新消息鍵/值對(duì);其中,鍵是鄰居節(jié)點(diǎn)id,值是更新消息的內(nèi)容;所述步驟2,具體為:所述步驟2由MapReduce框架中的partitioner組件自動(dòng)完成,partitioner組件默認(rèn)根據(jù)hash算法把具有相同鍵的消息鍵/值對(duì)和節(jié)點(diǎn)鍵/值對(duì)劃分到一起,使得更新消息達(dá)到了傳遞的效果;所述步驟3,具體為:所述步驟3由MapReduce框架中的Reduce階段完成,Reduce階段負(fù)責(zé)接收上一階段傳遞的鍵/值對(duì),把所有具有相同鍵的消息鍵/值對(duì)和節(jié)點(diǎn)鍵/值對(duì)進(jìn)行聚合,得到更新后的節(jié)點(diǎn)鍵/值對(duì)并輸出;Reduce階段的處理方法由用戶根據(jù)需求自定義完成的。優(yōu)選地,采用利用所述基于消息傳遞的算法并行化方法實(shí)現(xiàn)的基于MapReduce的介數(shù)方法;所述基于MapReduce的介數(shù)方法,包括:步驟S1,所有節(jié)點(diǎn)選取自己做為源節(jié)點(diǎn)開始計(jì)算節(jié)點(diǎn)介數(shù);步驟S2,從源節(jié)點(diǎn)出發(fā)進(jìn)行寬度優(yōu)先遍歷;步驟S3,回溯求解點(diǎn)對(duì)依賴度;步驟S4,累加點(diǎn)對(duì)依賴度得到介數(shù)。優(yōu)選地,節(jié)點(diǎn)v的介數(shù)被定義為:B(v)=Σs≠v≠t∈Vσst(v)σst]]>其中,B(v)表示節(jié)點(diǎn)v的介數(shù),σst表示節(jié)點(diǎn)s和節(jié)點(diǎn)t之間的最短路徑條數(shù),σst(v)表示節(jié)點(diǎn)s和節(jié)點(diǎn)t之間的最短路徑中經(jīng)過節(jié)點(diǎn)v的條數(shù);V表示網(wǎng)絡(luò)節(jié)點(diǎn)的集合;所述步驟2包括:從所有源節(jié)點(diǎn)同時(shí)出發(fā)寬度優(yōu)先遍歷其余節(jié)點(diǎn),當(dāng)訪問到當(dāng)前節(jié)點(diǎn)v時(shí),根據(jù)下式:σsv=Σu∈Ps(v)σsu]]>計(jì)算節(jié)點(diǎn)v到源節(jié)點(diǎn)s的最短路徑的數(shù)目,并記錄下節(jié)點(diǎn)v的前驅(qū)節(jié)點(diǎn)Ps(v);迭代遍歷過程,直到所有節(jié)點(diǎn)都被訪問到;其中,σsv表示節(jié)點(diǎn)s到節(jié)點(diǎn)v的最短路徑數(shù)目,Ps(v)表示節(jié)點(diǎn)v以節(jié)點(diǎn)s為源的前驅(qū)節(jié)點(diǎn),σsu表示節(jié)點(diǎn)s到節(jié)點(diǎn)u的最短路徑數(shù)目;所述步驟3包括:從距離源節(jié)點(diǎn)最遠(yuǎn)一層的節(jié)點(diǎn)開始回溯,按照下式:δs·(v)=Σw,v∈Ps(w)σsvσsw(1+δs·(w))]]>計(jì)算當(dāng)前層中節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)的點(diǎn)對(duì)依賴度;不停回溯計(jì)算前驅(qū)節(jié)點(diǎn)的點(diǎn)對(duì)依賴度,直到回到源節(jié)點(diǎn),得到源節(jié)點(diǎn)對(duì)其他所有節(jié)點(diǎn)的依賴度;其中,δs·(v)表示節(jié)點(diǎn)s對(duì)節(jié)點(diǎn)v的依賴度,稱為點(diǎn)對(duì)依賴度;w,v表示網(wǎng)絡(luò)中的節(jié)點(diǎn);σsw表示節(jié)點(diǎn)s到節(jié)點(diǎn)w的最短路徑數(shù)目;δs·(w)表示節(jié)點(diǎn)s對(duì)節(jié)點(diǎn)w的依賴度;所述步驟4包括:根據(jù)如下公式:B(v)=Σs≠v∈Vδs·(v)]]>將不同源節(jié)點(diǎn)對(duì)節(jié)點(diǎn)v的依賴度求和得到該節(jié)點(diǎn)v的介數(shù)。優(yōu)選地,所述步驟S2包括:步驟S21,網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)維護(hù)著一個(gè)狀態(tài)記錄表,狀態(tài)記錄表中每條記錄包含當(dāng)前已經(jīng)訪問到的源節(jié)點(diǎn)id和相應(yīng)的距離、最短路徑數(shù)目、前驅(qū)節(jié)點(diǎn)這四個(gè)字段;步驟S22,在Map階段所有節(jié)點(diǎn)都根據(jù)當(dāng)前狀態(tài)表中的每條記錄構(gòu)造更新消息;更新消息是以鍵/值對(duì)的形式處理,其中鍵是需要接受該更新消息的目的節(jié)點(diǎn)的id,值中包含了目的節(jié)點(diǎn)需要的信息,與狀態(tài)記錄表中的記錄包含同樣的四個(gè)字段;到源節(jié)點(diǎn)的距離等于本節(jié)點(diǎn)到源節(jié)點(diǎn)的距離加1,所述最短路徑數(shù)目即為本節(jié)點(diǎn)到源節(jié)點(diǎn)的最短路徑數(shù)目,前驅(qū)節(jié)點(diǎn)則為節(jié)點(diǎn)本身;步驟S23,Map階段產(chǎn)生的鍵/值對(duì)將通過MapReduce框架進(jìn)行自動(dòng)劃分,最終相同鍵的鍵/值對(duì)被同一個(gè)Reduce函數(shù)接收,完成消息傳遞的過程;步驟S24,在Reduce階段,所有節(jié)點(diǎn)都會(huì)收到來自鄰居節(jié)點(diǎn)的若干條更新消息;以消息中的源節(jié)點(diǎn)為準(zhǔn)在狀態(tài)記錄表中進(jìn)行匹配,查找該源節(jié)點(diǎn)對(duì)相應(yīng)的狀態(tài)記錄,并根據(jù)更新消息中包含的信息進(jìn)行狀態(tài)更新;步驟S25,判斷所有源節(jié)點(diǎn)是否完成寬度遍歷,若沒有則跳轉(zhuǎn)到步驟S23繼續(xù)迭代,若完成了則進(jìn)入步驟S3繼續(xù)執(zhí)行。根據(jù)本年發(fā)明提供的一種基于MapReduce的復(fù)雜網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)計(jì)算系統(tǒng),包括基于消息傳遞的算法并行化裝置;所述基于消息傳遞的算法并行化裝置,包括:裝置M1,產(chǎn)生更新消息;每個(gè)節(jié)點(diǎn)根據(jù)本節(jié)點(diǎn)的狀態(tài)信息計(jì)算生成更新消息的內(nèi)容,把鄰居節(jié)點(diǎn)作為消息的目的節(jié)點(diǎn),將更新消息向目的節(jié)點(diǎn)發(fā)送;裝置M2,傳遞消息;更新消息按照目的節(jié)點(diǎn)被發(fā)送給指定的節(jié)點(diǎn);裝置M3,更新節(jié)點(diǎn)內(nèi)部狀態(tài)信息;目的節(jié)點(diǎn)收到若干條更新消息,目的節(jié)點(diǎn)對(duì)這些更新消息進(jìn)行解析并更新目的節(jié)點(diǎn)內(nèi)部狀態(tài)信息。優(yōu)選地,所述裝置M1,具體為:裝置M1在MapReduce框架中的Map階段被觸發(fā)執(zhí)行,Map階段的處理方法由用戶完成;該Map階段負(fù)責(zé)處理每條存儲(chǔ)節(jié)點(diǎn)信息的文本記錄,根據(jù)需求產(chǎn)生更新消息鍵/值對(duì);其中,鍵是鄰居節(jié)點(diǎn)id,值是更新消息的內(nèi)容;所述裝置M2,具體為:所述裝置M2在MapReduce框架中的partitioner組件被觸發(fā)執(zhí)行,partitioner組件默認(rèn)根據(jù)hash算法把具有相同鍵的消息鍵/值對(duì)和節(jié)點(diǎn)鍵/值對(duì)劃分到一起,使得更新消息達(dá)到了傳遞的效果;所述裝置M3,具體為:所述裝置M3在MapReduce框架中的Reduce階段被觸發(fā)執(zhí)行,Reduce階段負(fù)責(zé)接收上一階段傳遞的鍵/值對(duì),把所有具有相同鍵的消息鍵/值對(duì)和節(jié)點(diǎn)鍵/值對(duì)進(jìn)行聚合,得到更新后的節(jié)點(diǎn)鍵/值對(duì)并輸出;Reduce階段的處理方法由用戶根據(jù)需求自定義完成的。優(yōu)選地,采用利用所述基于消息傳遞的算法并行化裝置實(shí)現(xiàn)的基于MapReduce的介數(shù)裝置;所述基于MapReduce的介數(shù)裝置,包括:裝置MS1,令所有節(jié)點(diǎn)選取自己做為源節(jié)點(diǎn)開始計(jì)算節(jié)點(diǎn)介數(shù);裝置MS2,從源節(jié)點(diǎn)出發(fā)進(jìn)行寬度優(yōu)先遍歷;裝置MS3,回溯求解點(diǎn)對(duì)依賴度;裝置MS4,累加點(diǎn)對(duì)依賴度得到介數(shù)。優(yōu)選地,節(jié)點(diǎn)v的介數(shù)被定義為:B(v)=Σs≠v≠t∈Vσst(v)σst]]>其中,B(v)表示節(jié)點(diǎn)v的介數(shù),σst表示節(jié)點(diǎn)s和節(jié)點(diǎn)t之間的最短路徑條數(shù),σst(v)表示節(jié)點(diǎn)s和節(jié)點(diǎn)t之間的最短路徑中經(jīng)過節(jié)點(diǎn)v的條數(shù);V表示網(wǎng)絡(luò)節(jié)點(diǎn)的集合;所述裝置M2具體為:從所有源節(jié)點(diǎn)同時(shí)出發(fā)寬度優(yōu)先遍歷其余節(jié)點(diǎn),當(dāng)訪問到當(dāng)前節(jié)點(diǎn)v時(shí),根據(jù)下式:σsv=Σu∈Ps(v)σsu]]>計(jì)算節(jié)點(diǎn)v到源節(jié)點(diǎn)s的最短路徑的數(shù)目,并記錄下節(jié)點(diǎn)v的前驅(qū)節(jié)點(diǎn)Ps(v);迭代遍歷過程,直到所有節(jié)點(diǎn)都被訪問到;其中,σsv表示節(jié)點(diǎn)s到節(jié)點(diǎn)v的最短路徑數(shù)目,Ps(v)表示節(jié)點(diǎn)v以節(jié)點(diǎn)s為源的前驅(qū)節(jié)點(diǎn),σsu表示節(jié)點(diǎn)s到節(jié)點(diǎn)u的最短路徑數(shù)目;所述裝置M3具體為:從距離源節(jié)點(diǎn)最遠(yuǎn)一層的節(jié)點(diǎn)開始回溯,按照下式:δs·(v)=Σw,v∈Ps(w)σsvσsw(1+δs·(w))]]>計(jì)算當(dāng)前層中節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)的點(diǎn)對(duì)依賴度;不?;厮萦?jì)算前驅(qū)節(jié)點(diǎn)的點(diǎn)對(duì)依賴度,直到回到源節(jié)點(diǎn),得到源節(jié)點(diǎn)對(duì)其他所有節(jié)點(diǎn)的依賴度;其中,δs·(v)表示節(jié)點(diǎn)s對(duì)節(jié)點(diǎn)v的依賴度,稱為點(diǎn)對(duì)依賴度;w,v表示網(wǎng)絡(luò)中的節(jié)點(diǎn);σsw表示節(jié)點(diǎn)s到節(jié)點(diǎn)w的最短路徑數(shù)目;δs·(w)表示節(jié)點(diǎn)s對(duì)節(jié)點(diǎn)w的依賴度;所述裝置M4具體為:根據(jù)如下公式:B(v)=Σs≠v∈Vδs·(v)]]>將不同源節(jié)點(diǎn)對(duì)節(jié)點(diǎn)v的依賴度求和得到該節(jié)點(diǎn)v的介數(shù)。優(yōu)選地,所述裝置MS2包括:裝置MS21,令網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)維護(hù)著一個(gè)狀態(tài)記錄表,狀態(tài)記錄表中每條記錄包含當(dāng)前已經(jīng)訪問到的源節(jié)點(diǎn)id和相應(yīng)的距離、最短路徑數(shù)目、前驅(qū)節(jié)點(diǎn)這四個(gè)字段;裝置MS22,令在Map階段所有節(jié)點(diǎn)都根據(jù)當(dāng)前狀態(tài)表中的每條記錄構(gòu)造更新消息;更新消息是以鍵/值對(duì)的形式處理,其中鍵是需要接受該更新消息的目的節(jié)點(diǎn)的id,值中包含了目的節(jié)點(diǎn)需要的信息,與狀態(tài)記錄表中的記錄包含同樣的四個(gè)字段;到源節(jié)點(diǎn)的距離等于本節(jié)點(diǎn)到源節(jié)點(diǎn)的距離加1,所述最短路徑數(shù)目即為本節(jié)點(diǎn)到源節(jié)點(diǎn)的最短路徑數(shù)目,前驅(qū)節(jié)點(diǎn)則為節(jié)點(diǎn)本身;裝置MS23,令Map階段產(chǎn)生的鍵/值對(duì)將通過MapReduce框架進(jìn)行自動(dòng)劃分,最終相同鍵的鍵/值對(duì)被同一個(gè)Reduce函數(shù)接收,完成消息傳遞的過程;裝置MS24,令在Reduce階段,所有節(jié)點(diǎn)都會(huì)收到來自鄰居節(jié)點(diǎn)的若干條更新消息;以消息中的源節(jié)點(diǎn)為準(zhǔn)在狀態(tài)記錄表中進(jìn)行匹配,查找該源節(jié)點(diǎn)對(duì)相應(yīng)的狀態(tài)記錄,并根據(jù)更新消息中包含的信息進(jìn)行狀態(tài)更新;裝置MS25,判斷所有源節(jié)點(diǎn)是否完成寬度遍歷,若沒有則跳轉(zhuǎn)觸發(fā)裝置MS23繼續(xù)迭代,若完成了則觸發(fā)裝置MS3繼續(xù)執(zhí)行。與現(xiàn)有技術(shù)相比,本發(fā)明具有如下的有益效果:針對(duì)傳統(tǒng)單機(jī)算法在計(jì)算大規(guī)模網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)時(shí)效率較低的問題,本發(fā)明提出了一種網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)的單機(jī)算法向MapReduce計(jì)算框架并行移植的方法,克服了當(dāng)前單機(jī)算法并行移植到MapReduce時(shí)存在的問題,利用Hadoop計(jì)算平臺(tái)實(shí)現(xiàn)了網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)的并行計(jì)算,提高了網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)的計(jì)算效率。附圖說明通過閱讀參照以下附圖對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:圖1為基于MapReduce的介數(shù)算法。圖2為算法遍歷階段的消息傳遞過程。圖3為并行介數(shù)算法消耗時(shí)間。圖4為并行算法的加速比。圖2中各消息message的字段內(nèi)容如下:srcdisnumSPprea01nullb11bc11cd22b,c具體實(shí)施方式下面結(jié)合具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說明。以下實(shí)施例將有助于本領(lǐng)域的技術(shù)人員進(jìn)一步理解本發(fā)明,但不以任何形式限制本發(fā)明。應(yīng)當(dāng)指出的是,對(duì)本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變化和改進(jìn)。這些都屬于本發(fā)明的保護(hù)范圍。為解決網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)單機(jī)算法并行移植到MapReduce框架中的問題,本發(fā)明提供的基于MapReduce的復(fù)雜網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)計(jì)算方法,采用基于消息傳遞的算法并行化方法,包括:步驟1,產(chǎn)生更新消息。每個(gè)節(jié)點(diǎn)根據(jù)本節(jié)點(diǎn)的狀態(tài)信息計(jì)算生成更新消息內(nèi)容,把鄰居節(jié)點(diǎn)作為消息的目的節(jié)點(diǎn),將消息發(fā)送出去。在MapReduce框架中,該步驟工作由Map階段完成,Map階段的處理方法由用戶完成。該階段負(fù)責(zé)處理每條存儲(chǔ)節(jié)點(diǎn)信息的文本記錄,根據(jù)需求產(chǎn)生更新消息鍵/值對(duì)。其中鍵是鄰居節(jié)點(diǎn)id,值是更新消息的內(nèi)容。步驟2,傳遞消息。更新消息按照目的節(jié)點(diǎn)被發(fā)送給指定的節(jié)點(diǎn)。在MapReduce框架中,該步驟工作由框架的partitioner自動(dòng)完成,它默認(rèn)根據(jù)hash算法把具有相同鍵的消息鍵/值對(duì)和節(jié)點(diǎn)鍵/值對(duì)劃分到一起,使得消息達(dá)到了傳遞的效果。步驟3,更新節(jié)點(diǎn)內(nèi)部狀態(tài)信息。目的節(jié)點(diǎn)收到若干條更新消息,節(jié)點(diǎn)對(duì)這些消息進(jìn)行解析并更新節(jié)點(diǎn)內(nèi)部狀態(tài)信息。該步驟由MapReduce的Reduce階段完成,該階段負(fù)責(zé)接收上一階段傳遞的鍵/值對(duì),把所有具有相同鍵的消息鍵/值對(duì)和節(jié)點(diǎn)鍵/值對(duì)進(jìn)行聚合,得到更新后的節(jié)點(diǎn)鍵/值對(duì)并輸出。Reduce階段的處理方法也是由用戶根據(jù)需求自定義完成的。下面以介數(shù)計(jì)算為例,詳細(xì)介紹本發(fā)明在計(jì)算網(wǎng)絡(luò)拓?fù)鋮?shù)中的實(shí)現(xiàn)。網(wǎng)絡(luò)中不相鄰的節(jié)點(diǎn)s和t之間的最短路徑會(huì)經(jīng)過其他若干節(jié)點(diǎn),節(jié)點(diǎn)v被其他最短路徑經(jīng)過次數(shù)越多,則表示該節(jié)點(diǎn)在網(wǎng)絡(luò)中越重要。由此,節(jié)點(diǎn)v的介數(shù)被定義為:B(v)=Σs≠v≠t∈Vσst(v)σst---(1)]]>其中σst表示節(jié)點(diǎn)s和t之間的最短路徑數(shù)目,σst(v)表示這些最短路徑經(jīng)過節(jié)點(diǎn)v的數(shù)目。利用消息傳遞機(jī)制實(shí)現(xiàn)的基于MapReduce的介數(shù)算法如圖1所示。步驟S1,所有節(jié)點(diǎn)選取自己做為源節(jié)點(diǎn)開始計(jì)算節(jié)點(diǎn)介數(shù)。步驟S2,從源節(jié)點(diǎn)出發(fā)進(jìn)行寬度優(yōu)先遍歷。從所有源節(jié)點(diǎn)同時(shí)出發(fā)寬度優(yōu)先遍歷其余節(jié)點(diǎn),當(dāng)訪問到當(dāng)前節(jié)點(diǎn)v時(shí),根據(jù)公式2計(jì)算節(jié)點(diǎn)v到源節(jié)點(diǎn)s的最短路徑的數(shù)目,并記錄下節(jié)點(diǎn)v的前驅(qū)節(jié)點(diǎn)Ps(v)。迭代遍歷過程,直到所有節(jié)點(diǎn)都被訪問到。σsv=Σu∈Ps(v)σsu---(2)]]>其中σsv表示節(jié)點(diǎn)s到節(jié)點(diǎn)v的最短路徑數(shù)目。Ps(v)表示節(jié)點(diǎn)v以節(jié)點(diǎn)s為源的前驅(qū)節(jié)點(diǎn)。步驟S3,回溯求解點(diǎn)對(duì)依賴度。從距離源節(jié)點(diǎn)最遠(yuǎn)一層的節(jié)點(diǎn)開始回溯,按照公式3計(jì)算當(dāng)前層中節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)的點(diǎn)對(duì)依賴度。不停回溯計(jì)算前驅(qū)節(jié)點(diǎn)的點(diǎn)對(duì)依賴度,直到回到源節(jié)點(diǎn)。得到源節(jié)點(diǎn)對(duì)其他所有節(jié)點(diǎn)的依賴度。δs·(v)=Σw,v∈Ps(w)σsvσsw(1+δs·(w))---(3)]]>其中δs·(v)表示節(jié)點(diǎn)s對(duì)節(jié)點(diǎn)v的依賴度,稱為點(diǎn)對(duì)依賴度。步驟S4,累加點(diǎn)對(duì)依賴度得到介數(shù)。根據(jù)公式4,將不同源節(jié)點(diǎn)對(duì)節(jié)點(diǎn)v的依賴度求和得到該節(jié)點(diǎn)的介數(shù)。B(v)=Σs≠v∈Vδs·(v)---(4)]]>其中B(v)表示節(jié)點(diǎn)v的介數(shù)。所述步驟S2和S3都包含多次的MapReduce迭代,原理相似。以S2為例對(duì)算法中的消息傳遞過程進(jìn)行介紹,所述步驟S2進(jìn)一步為。步驟S21,網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)維護(hù)著一個(gè)狀態(tài)記錄表,表中每條記錄包含當(dāng)前已經(jīng)訪問到的源節(jié)點(diǎn)id和相應(yīng)的距離、最短路徑數(shù)目、前驅(qū)節(jié)點(diǎn),示例中該條記錄表示節(jié)點(diǎn)a到本身的距離為0,默認(rèn)有1條路徑,不需要經(jīng)過前驅(qū)節(jié)點(diǎn)。步驟S22,在Map階段所有節(jié)點(diǎn)都根據(jù)當(dāng)前狀態(tài)表中的每條記錄構(gòu)造更新消息。更新消息是以鍵/值對(duì)的形式處理,其中鍵是需要接受該消息的目的節(jié)點(diǎn)的id,值中包含了目的節(jié)點(diǎn)需要的信息,與記錄表中的記錄包含同樣的四個(gè)字段。到源節(jié)點(diǎn)的距離等于本節(jié)點(diǎn)到源節(jié)點(diǎn)的距離加1,最短路徑數(shù)目即為本節(jié)點(diǎn)到源節(jié)點(diǎn)的最短路徑數(shù)目,前驅(qū)節(jié)點(diǎn)則為節(jié)點(diǎn)本身。如示例中,節(jié)點(diǎn)a向鄰居節(jié)點(diǎn)b和c發(fā)送包含同樣值的消息a|1|1|a,告知鄰居節(jié)點(diǎn)可以通過本節(jié)點(diǎn)到達(dá)a,距離為1,最短路徑數(shù)目為1,前驅(qū)節(jié)點(diǎn)為a。步驟S23,Map階段產(chǎn)生的鍵/值對(duì)(包括節(jié)點(diǎn)狀態(tài)信息和更新消息)將會(huì)通過MapReduce框架進(jìn)行自動(dòng)劃分,最終相同鍵的鍵/值對(duì)會(huì)被同一個(gè)Reduce函數(shù)接收,完成消息傳遞的過程。如示例中的b和c產(chǎn)生的以a為鍵的消息將會(huì)被發(fā)送到節(jié)點(diǎn)a。步驟S24,在Reduce階段,所有節(jié)點(diǎn)都會(huì)收到來自鄰居節(jié)點(diǎn)的若干條更新消息。以消息中的源節(jié)點(diǎn)為準(zhǔn)在狀態(tài)記錄表中進(jìn)行匹配,查找該源節(jié)點(diǎn)對(duì)相應(yīng)的狀態(tài)記錄,并根據(jù)消息中包含的信息進(jìn)行狀態(tài)更新。如示例中a收到來自b,c的消息后,因?yàn)閍節(jié)點(diǎn)沒有記錄到達(dá)這兩個(gè)節(jié)點(diǎn)的信息,所以將該信息添加到自身節(jié)點(diǎn)的狀態(tài)表中,表示節(jié)點(diǎn)a已經(jīng)知道了到達(dá)節(jié)點(diǎn)b和c的信息,完成了一輪迭代。步驟S25,判斷所有源節(jié)點(diǎn)是否完成寬度遍歷,若沒有則跳轉(zhuǎn)到步驟S23繼續(xù)迭代,若完成了則輸出結(jié)果,寬度遍歷階段結(jié)束。本發(fā)明在分布式計(jì)算框架中實(shí)現(xiàn)了網(wǎng)絡(luò)拓?fù)涮卣鲄?shù)的計(jì)算,解決了單機(jī)計(jì)算內(nèi)存受限、效率低下的問題,提高了計(jì)算網(wǎng)絡(luò)拓?fù)鋮?shù)的效率。利用實(shí)驗(yàn)說明本發(fā)明的性能。實(shí)驗(yàn)對(duì)五個(gè)不同規(guī)模的路由器網(wǎng)絡(luò)的拓?fù)涮卣鲄?shù)進(jìn)行計(jì)算,網(wǎng)絡(luò)規(guī)模如表1所示。表1五個(gè)不同規(guī)模的網(wǎng)絡(luò)其中,n,m表示網(wǎng)絡(luò)的節(jié)點(diǎn)數(shù)和邊數(shù),<k>表示網(wǎng)絡(luò)的節(jié)點(diǎn)平均度。使用本發(fā)明計(jì)算網(wǎng)絡(luò)中節(jié)點(diǎn)介數(shù)的效率如圖3所示。可以看出,在同一計(jì)算集群中計(jì)算不同規(guī)模網(wǎng)絡(luò)的介數(shù),網(wǎng)絡(luò)規(guī)模越大,算法的執(zhí)行時(shí)間越長(zhǎng)。對(duì)于處理同一網(wǎng)絡(luò)數(shù)據(jù)來說,隨著計(jì)算集群中計(jì)算節(jié)點(diǎn)的增加,計(jì)算介數(shù)的時(shí)間在不斷下降。并且隨著實(shí)驗(yàn)網(wǎng)絡(luò)數(shù)據(jù)規(guī)模的增大,運(yùn)行時(shí)間減少的幅度越大。使用8個(gè)計(jì)算節(jié)點(diǎn)來計(jì)算包含百萬級(jí)別節(jié)點(diǎn)的網(wǎng)絡(luò),效率可以提升6倍以上。實(shí)驗(yàn)說明本發(fā)明可以通過擴(kuò)大集群規(guī)模來大幅計(jì)算提升效率,尤其是在處理大規(guī)模拓?fù)鋽?shù)據(jù)時(shí)更具優(yōu)勢(shì)。除并行介數(shù)算法外,本發(fā)明基于MapReduce計(jì)算框架設(shè)計(jì)還實(shí)現(xiàn)了計(jì)算的度(Degree)、聚類系數(shù)(Cluster)、網(wǎng)絡(luò)直徑(D)、平均路徑長(zhǎng)度(L)、最大連通子圖大小(|gs|)和核數(shù)(Core)的并行算法。它們?cè)诓煌?guī)模集群中運(yùn)行的加速比平均值如圖4所示。從圖中可以看出,隨著計(jì)算集群規(guī)模的擴(kuò)大,七種算法的加速比都得到了明顯的提升。而且算法時(shí)間復(fù)雜度最高的介數(shù)算法提升幅度最大。這說明了本發(fā)明所設(shè)計(jì)實(shí)現(xiàn)的算法在Hadoop平臺(tái)上具有良好的擴(kuò)展性,尤其是在對(duì)時(shí)間復(fù)雜度較高的算法提升更明顯。綜上所述,本發(fā)明基于Mapreduce計(jì)算框架實(shí)現(xiàn)的網(wǎng)絡(luò)拓?fù)鋮?shù)的計(jì)算方法在Hadoop平臺(tái)上表現(xiàn)出了較高的計(jì)算效率和良好的擴(kuò)展性。尤其是在處理網(wǎng)絡(luò)數(shù)據(jù)規(guī)模比較大、算法時(shí)間復(fù)雜度較高的情況下,算法的效率得到了更顯著的提升。本領(lǐng)域技術(shù)人員知道,除了以純計(jì)算機(jī)可讀程序代碼方式實(shí)現(xiàn)本發(fā)明提供的系統(tǒng)及其各個(gè)裝置、模塊、單元以外,完全可以通過將方法步驟進(jìn)行邏輯編程來使得本發(fā)明提供的系統(tǒng)及其各個(gè)裝置、模塊、單元以邏輯門、開關(guān)、專用集成電路、可編程邏輯控制器以及嵌入式微控制器等的形式來實(shí)現(xiàn)相同功能。所以,本發(fā)明提供的系統(tǒng)及其各項(xiàng)裝置、模塊、單元可以被認(rèn)為是一種硬件部件,而對(duì)其內(nèi)包括的用于實(shí)現(xiàn)各種功能的裝置、模塊、單元也可以視為硬件部件內(nèi)的結(jié)構(gòu);也可以將用于實(shí)現(xiàn)各種功能的裝置、模塊、單元視為既可以是實(shí)現(xiàn)方法的軟件模塊又可以是硬件部件內(nèi)的結(jié)構(gòu)。以上對(duì)本發(fā)明的具體實(shí)施例進(jìn)行了描述。需要理解的是,本發(fā)明并不局限于上述特定實(shí)施方式,本領(lǐng)域技術(shù)人員可以在權(quán)利要求的范圍內(nèi)做出各種變化或修改,這并不影響本發(fā)明的實(shí)質(zhì)內(nèi)容。在不沖突的情況下,本申請(qǐng)的實(shí)施例和實(shí)施例中的特征可以任意相互組合。當(dāng)前第1頁1 2 3