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