一種基于并發(fā)改進(jìn)的大規(guī)模圖數(shù)據(jù)流式劃分方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于計算機存儲技術(shù)領(lǐng)域,更具體地,涉及一種基于并發(fā)改進(jìn)的大規(guī)模圖 數(shù)據(jù)流式劃分方法及系統(tǒng)。
【背景技術(shù)】
[0002] 圖劃分是指將一個規(guī)模很大的圖數(shù)據(jù)拆分成若干份,分散到一個分布式系統(tǒng)中進(jìn) 行處理。圖劃分算法一般有三個目標(biāo),第一是需要保證劃分后的多個分區(qū)所包含的數(shù)據(jù)量 滿足一定的平衡性;第二是要減少分區(qū)間的切邊率,因為切邊在分布式系統(tǒng)中意味著主機 間的通信;第三則是算法能高效的完成劃分。
[0003] 靜態(tài)圖劃分算法根據(jù)整個靜態(tài)圖的信息來處理圖數(shù)據(jù)中所有點的劃分。當(dāng)圖數(shù)據(jù) 規(guī)模較小時,靜態(tài)圖劃分算法能有效處理,獲得較小的切邊率。但是隨著應(yīng)用的快速發(fā)展, 圖數(shù)據(jù)規(guī)模的急劇增長給靜態(tài)圖劃分算法造成顯著挑戰(zhàn),因其處理速度及可擴展性較差而 難以處理千萬級以上大規(guī)模的流式圖數(shù)據(jù)。
[0004] 流式圖劃分算法則一次只處理一個點的劃分,通常根據(jù)新到點的鄰接信息等比較 簡單的數(shù)據(jù),采用貪心策略,對切邊數(shù)量和分區(qū)平衡統(tǒng)籌考慮做出決策?,F(xiàn)有的頂點劃分流 式算法,在分布式部署實現(xiàn)中,對新到達(dá)系統(tǒng)的頂點,控制節(jié)點將該頂點信息及其相關(guān)的鄰 接頂點鏈表信息發(fā)送給對應(yīng)的K個工作者節(jié)點;在工作者節(jié)點處,先緩存接收到的頂點v及 鄰接頂點鏈表信息,再使用單步貪心算法計算將頂點v分配給本節(jié)點后的梯度值并將該值 返回給控制節(jié)點;當(dāng)控制節(jié)點收到頂點v的所有梯度值后,選取最大值,將對應(yīng)的最優(yōu)化選 擇分區(qū)i發(fā)送K個工作者節(jié)點;工作者節(jié)點收到最優(yōu)化選擇分區(qū)后,判斷該最優(yōu)結(jié)果是否是 本分區(qū),若是本分區(qū),則從緩存中把頂點v及其鄰接頂點鏈表信息取出并存儲在本地,若非 本分區(qū),則從緩存中刪除頂點v及其鄰接頂點鏈表信息并將(頂點V-分區(qū)結(jié)果i)鍵值對 放入本地表中,以供后續(xù)分布式圖算法運行時進(jìn)行查找。
[0005] 現(xiàn)有的頂點劃分流式算法每次只發(fā)送一個頂點及其鄰接頂點信息,記RTT為網(wǎng)絡(luò) 往返傳播時延,在理想情況下處理一個新到節(jié)點的時間為:
[0006] T=發(fā)送鄰接頂點信息時間+工作者節(jié)點數(shù)據(jù)處理時間+回收梯度值時間
[0007] =1XRTT+工作者數(shù)據(jù)處理時間+數(shù)據(jù)傳輸時間
[0008] =1XRTT+工作者數(shù)據(jù)處理時間+ (鄰接節(jié)點信息大小+梯度信息大?。?網(wǎng)絡(luò)傳 輸速率。
[0009] 現(xiàn)有的頂點劃分流式算法每次發(fā)送一個頂點及其鄰接頂點信息后,都需要等待工 作節(jié)點返回結(jié)果,每個頂點的處理時間除了固定的數(shù)據(jù)處理時間和網(wǎng)絡(luò)傳輸時間外,都額 外增加了一個網(wǎng)絡(luò)往返傳播時延的開銷,極大的拖累了算法的效率。
【發(fā)明內(nèi)容】
[0010] 針對現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供一種基于并發(fā)改進(jìn)的大規(guī)模圖 數(shù)據(jù)流式劃分方法及系統(tǒng),通過一次發(fā)送多個頂點及其相關(guān)信息的方法,解決了現(xiàn)有流式 圖劃分方法一次網(wǎng)絡(luò)往返傳播時延處理一個頂點的問題,減少網(wǎng)絡(luò)時延對系統(tǒng)的影響,提 高了圖劃分效率。
[0011] 為實現(xiàn)上述目的,按照本發(fā)明的一個方面,提供了一種基于并發(fā)改進(jìn)的大規(guī)模圖 數(shù)據(jù)流式劃分方法,包括以下步驟:
[0012] 步驟1所有工作節(jié)點將其由IP和端口號組成的Sessionld發(fā)送給代理服務(wù)器,所 述代理服務(wù)器將根據(jù)收到各Sessionld的先后順序給其編號作為Id,并將編號后所有工作 節(jié)點的Sessionld和Id構(gòu)成表發(fā)送給所有工作節(jié)點;
[0013] 步驟2所述代理服務(wù)器依次發(fā)送頂點信息,發(fā)送每一個頂點前,先將初始值為N的 信號量減1,其中N為并發(fā)度,若所述信號量不為負(fù)則發(fā)送該頂點信息及其鄰接頂點信息給 所有工作節(jié)點,所述代理服務(wù)器持續(xù)發(fā)送頂點信息直到所述信號量為負(fù)時暫停發(fā)送;
[0014] 步驟3各工作節(jié)點接收來自所述代理服務(wù)器的頂點信息及其鄰接頂點信息,根據(jù) 工作節(jié)點的本地緩存中已分配的頂點信息計算貪心梯度值Sg(Vi+1,S)并將其返回給所述 代理服務(wù)器:
[0015]
[0016]其中,Vi+1表示待處理的頂點;S表示圖數(shù)據(jù)在該工作節(jié)點的分區(qū)結(jié)果存儲區(qū)中的 頂點集;N(Vi+1)表示頂點Vi+1的所有鄰接頂點的集合;k表示分區(qū)的數(shù)量;n表示圖數(shù)據(jù)總 的頂點數(shù)量;n表示平衡系數(shù);
[0017] 步驟4所述代理服務(wù)器為每個頂點記錄一個最優(yōu)的貪心梯度信息,當(dāng)返回的貪心 梯度信息數(shù)量達(dá)到所述分區(qū)的數(shù)量時則認(rèn)為所有的分區(qū)已處理完畢,將最優(yōu)的貪心梯度信 息的分區(qū)作為最后的分區(qū)結(jié)果發(fā)送給各工作節(jié)點,同時將所述信號量加1,當(dāng)所述信號量非 負(fù)時,執(zhí)行所述步驟2,所述代理服務(wù)器繼續(xù)發(fā)送頂點信息,直至所有頂點發(fā)送完畢;
[0018] 步驟5各工作節(jié)點收到最優(yōu)分區(qū)信息后進(jìn)行判斷,若該頂點位于本分區(qū)則將頂點 信息及其鄰接頂點信息存儲在本地,若該頂點位于其他分區(qū),則記錄一個頂點編號和分區(qū) 號作為索引,將本地緩存中的頂點信息及鄰接頂點信息丟棄。
[0019] 按照本發(fā)明的另一方面,提供了一種基于并發(fā)改進(jìn)的大規(guī)模圖數(shù)據(jù)流式劃分系 統(tǒng),包括多個工作節(jié)點模塊和代理服務(wù)器模塊,其中:
[0020] 所述工作節(jié)點模塊,用于向所述代理服務(wù)器模塊注冊IP和端口信息,接收來自所 述代理服務(wù)器模塊的頂點信息并計算貪心梯度值,并向所述代理服務(wù)器模塊返回計算結(jié) 果;
[0021] 所述代理服務(wù)器模塊,用于登記系統(tǒng)中的所述多個工作節(jié)點模塊,進(jìn)行系統(tǒng)中的 工作任務(wù)劃分以及發(fā)送圖元數(shù)據(jù)及系統(tǒng)信息給各工作節(jié)點模塊,并根據(jù)所述工作節(jié)點模塊 返回的貪心梯度值決定頂點的分區(qū)結(jié)果并通知各工作節(jié)點模塊。
[0022] 總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下有益效 果:
[0023] 本發(fā)明在處理圖數(shù)據(jù)的流式劃分時,一次發(fā)送多個頂點及其鄰接頂點信息給各工 作節(jié)點,多個頂點的處理只需要一個網(wǎng)絡(luò)往返傳播時延,極大的提升了劃分效率。
【附圖說明】
[0024] 圖1為本發(fā)明大規(guī)模圖數(shù)據(jù)流式劃分方法的流程圖;
[0025]圖2為本發(fā)明大規(guī)模圖數(shù)據(jù)流式劃分系統(tǒng)的示意圖。
【具體實施方式】
[0026] 為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對 本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并 不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術(shù)特征只要 彼此之間未構(gòu)成沖突就可以相互組合。
[0027] 圖1為本發(fā)明大規(guī)模圖數(shù)據(jù)流式劃分方法的流程圖,具體包括以下步驟:
[0028] 步驟1工作節(jié)點登記同步:
[0029] 所有工作節(jié)點將其Sessionld(由IP和端口號組成)發(fā)送給代理服務(wù)器,代理 服務(wù)器將根據(jù)收到Sessionld的先后順序給其編號作為Id,編號后將所有工作節(jié)點的 Sessionld和Id構(gòu)成表發(fā)送給所有的工作節(jié)點,工作節(jié)點可以據(jù)此查詢本工作節(jié)點在系統(tǒng) 中的編號。
[0030] 步驟2代理服務(wù)器發(fā)送頂點信息:
[0031] 對于并發(fā)度為N的情況,代理服務(wù)器使用初始值為N的信號量,將要發(fā)送一個頂點 時,先對信號量進(jìn)行P操作,即將信號量減1,若信號量不為負(fù)則發(fā)送該頂點及其鄰接頂點 信息給各工作節(jié)點,工作節(jié)點接收到頂點信息后進(jìn)入步驟3。代理服務(wù)器則繼續(xù)持續(xù)發(fā)送頂 點信息直到信號量為負(fù)時暫停發(fā)送。工作節(jié)點處理接收到的頂點信息與代理服務(wù)器發(fā)送后 續(xù)的頂點信息同時進(jìn)行,對于代理服務(wù)器而言,最多有相當(dāng)于并發(fā)度N數(shù)目的頂點處于未 處理中。
[0032] 步驟3工作節(jié)點返回梯度信息:
[0033] 工作節(jié)點接收來自代理服務(wù)器的頂點信息,根據(jù)本地內(nèi)存中已分配的頂點信息計 算貪心梯度值,并將其返回給代理服務(wù)器。
^n
[0034] 其中,Vi+1表示待處理的頂點;S表示圖數(shù)據(jù)在該工作節(jié)點的分區(qū)結(jié)果存儲區(qū)中的 頂點集;N(V i+1)表示頂點Vi+1的所有鄰接頂點的集合;k表示分區(qū)的數(shù)量;n表示總的頂點 數(shù)量;n表示平衡系數(shù)。貪心梯度值Sg(v i+1,s)的前一項|N(vi+1) n s|表示了頂點vi+1 的所有鄰接頂點在該分區(qū)中的數(shù)量,用來最小化切邊;貪心梯度值Sg(Vi+1,S)的后一項 ((| S I+1)二I 即)用來平衡分區(qū)的大小。
[0035] 步驟4代理服務(wù)器發(fā)送最優(yōu)分區(qū)信息:
[0036] 代理服務(wù)器為每個頂點記錄一個最優(yōu)的貪心梯度信息,在收到工作節(jié)點返回的梯 度信息后將其與當(dāng)前最優(yōu)值比較,取較大者更新此記錄。當(dāng)返回的貪心梯度信息數(shù)量達(dá)到 分區(qū)的數(shù)量時則認(rèn)為所有的分區(qū)已處理完畢,將最優(yōu)梯度信息的分區(qū)作為最后的分區(qū)結(jié)果 發(fā)送給各工作節(jié)點,工作節(jié)點收到分區(qū)結(jié)果后進(jìn)入步驟5。同時,對信號量作V操作,即為信 號量加1,意味著有一個頂點處理完畢,重新開始步驟2,直至所有頂點發(fā)送完畢。
[0037] 步驟5工作節(jié)點保存分區(qū)結(jié)果:
[0038] 工作節(jié)點收到最優(yōu)分區(qū)信息后進(jìn)行判斷,若該頂點位于本分區(qū)則將頂點信息及其 鄰接頂點信息存儲在本地,若頂點位于其他分區(qū),則記錄一個頂點編號和分區(qū)號作為索引, 將緩存中的頂點信息及鄰接頂點信息丟棄。當(dāng)工作節(jié)點處理完所有的頂點信息和最優(yōu)分區(qū) 信息后,算法結(jié)束。
[0039] 本發(fā)明提供一個實施例,以一個并發(fā)度為50,工作節(jié)點為2的情形為例,具體介紹 本發(fā)明,包括以下步驟:
[0040] 步驟1兩個工作節(jié)點分別將其IP和端口號作為Sessionld發(fā)送給代理服務(wù)器,代 理服務(wù)器為兩個工