分布式并行圖處理中基于p2p的動態(tài)容錯方法及系統(tǒng)的制作方法
【技術領域】
[0001]本發(fā)明涉及計算機網(wǎng)絡技術領域,具體涉及一種在開放、動態(tài)的網(wǎng)絡環(huán)境下分布式并行圖處理的動態(tài)容錯的方法及系統(tǒng)。
【背景技術】
[0002]近年來,隨著社交網(wǎng)絡、協(xié)同網(wǎng)絡等技術的普及和發(fā)展,互聯(lián)網(wǎng)中的數(shù)據(jù)規(guī)模越來越大,這給分析這些數(shù)據(jù)帶來了新的挑戰(zhàn)。在社交網(wǎng)絡、協(xié)同網(wǎng)絡等場景中,數(shù)據(jù)之間可能存在關聯(lián),相關研宄經(jīng)常用圖結(jié)構來對這些數(shù)據(jù)進行描述。圖中的頂點記錄數(shù)據(jù)自身屬性,圖中的邊對應數(shù)據(jù)間的關聯(lián)。這樣,對網(wǎng)絡數(shù)據(jù)的分析就轉(zhuǎn)化成了圖處理。然而,上述圖結(jié)構常常具有百萬、千萬個頂點和數(shù)億條邊,這對普通計算機的內(nèi)存造成很大壓力。更嚴重的是,由于圖處理過程將產(chǎn)生正比于圖規(guī)模的數(shù)量的中間結(jié)果,這使得單機由于內(nèi)存的限制難以對圖進行正常計算。
[0003]因此,利用分布式集群對圖進行并行處理便成為了當前網(wǎng)絡圖數(shù)據(jù)分析的主要方式。以Google提出的Pregel框架為典型代表,大部分圖處理系統(tǒng)將圖數(shù)據(jù)劃分成多個子圖(或稱圖分區(qū))分派到若干機器中,對圖數(shù)據(jù)進行并行計算。并行計算主要采用BSP(BulkSynchronous Processing)模型,即對圖數(shù)據(jù)進行迭代運算。在每個迭代步中,圖中每個頂點獲取鄰接頂點的消息,各自更新自身狀態(tài),并將新狀態(tài)傳播給鄰接頂點。如圖1所示,在迭代步之間,所有頂點的運算需要進行同步,當所有頂點完成當前迭代步的運算時,方可觸發(fā)進入下一迭代步。當所有頂點均求得結(jié)果時,圖處理計算完成。
[0004]在開放的網(wǎng)絡環(huán)境下,分布式集群具有動態(tài)變化的特點,集群中的某些節(jié)點可能失效、連接集群的網(wǎng)絡可能出錯,這些異常情況將影響圖處理作業(yè)的正常執(zhí)行。因此,分布式并行圖處理需要考慮在運算過程中的容錯性。現(xiàn)有的圖處理系統(tǒng)一般通過checkpoint機制實現(xiàn)容錯。這種容錯要求圖處理在發(fā)現(xiàn)出錯時,停止當前運算,重新從磁盤中加載最近一次的checkpoint數(shù)據(jù),從該checkpoint所記錄的迭代點重新進行運算。這種容錯機制是靜態(tài)的,且恢復代價也比較大,并不適用于開放的網(wǎng)絡環(huán)境。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的是提供一種開放、動態(tài)網(wǎng)絡環(huán)境下分布式并行圖處理中基于P2P (Peer to Peer,對等計算/對等網(wǎng)絡)的動態(tài)容錯的方法,使得圖處理運算能夠從節(jié)點失效、網(wǎng)絡出錯等異常中恢復正常狀態(tài),保證運算的正確執(zhí)行。
[0006]為實現(xiàn)上述目的,本發(fā)明采用如下技術方案:
[0007]一種分布式并行圖處理中基于P2P的動態(tài)容錯方法,其步驟包括:
[0008]I)定義分布式圖處理問題的數(shù)據(jù)單元,以確保動態(tài)容錯時所恢復數(shù)據(jù)的完整性;
[0009]2)將處理器節(jié)點組成環(huán)狀結(jié)構,將輸入的圖數(shù)據(jù)劃分成若干分區(qū),并將各分區(qū)分派到各處理器節(jié)點中,每個處理器節(jié)點把各自的數(shù)據(jù)單元生成副本備份在鄰接處理器節(jié)點中;
[0010]3)在運算的每一個迭代步中,每個處理器節(jié)點執(zhí)行完自身的數(shù)據(jù)單元后,以增量的方式更新其放置于相鄰處理器節(jié)點中的副本;
[0011]4)當某個處理器節(jié)點失效或因網(wǎng)絡出錯而離線時,指派其相鄰節(jié)點利用數(shù)據(jù)副本替代原先的數(shù)據(jù)單元,完成相應運算,從而恢復圖處理的正常執(zhí)行。
[0012]進一步地,步驟⑴定義的分布式圖處理問題的數(shù)據(jù)單元為二元組(Pj, InMsg(Pj)),其中,Pj為由圖結(jié)構劃分成的某一圖分區(qū),即某一子圖JnMsg(Pj)為子圖Pj包含的所有頂點在某一迭代步所收到的消息集合,在運算初始時,InMsg(Pj)為空集;
I^ j ^ m, m為對圖進行分區(qū)后分區(qū)的數(shù)量。
[0013]進一步地,步驟⑵將輸入的圖數(shù)據(jù)劃分成若干分區(qū)后,以二元組的,空的消息集合)的結(jié)構分派到各個處理器節(jié)點中。
[0014]進一步地,步驟(2)中,對于自己被分派的數(shù)據(jù)單元,處理器節(jié)點基于BSP模型對數(shù)據(jù)單元中的每一個頂點進行運算;對于相鄰節(jié)點的數(shù)據(jù)單元副本,處理器節(jié)點只是記錄,并等待每一次迭代步后,相鄰節(jié)點發(fā)送數(shù)據(jù)來更新這些副本。
[0015]進一步地,步驟(3)在每個迭代步完成后進行副本更新;或者根據(jù)系統(tǒng)錯誤發(fā)生的頻率,綜合考慮副本更新所消耗的時間代價,每隔一定迭代步進行一次副本更新。
[0016]進一步地,步驟(3)在圖處理的每一個迭代步中,每個頂點首先處理在上一次迭代步所收到的消息集,并根據(jù)這些消息更新自己的狀態(tài),再向鄰接頂點傳播自己的新狀態(tài);同一頂點在不同迭代步之間的消息不需要累積,當某一迭代步已計算出頂點的更新值后,在該迭代步之前所收到的消息都不再需要。
[0017]一種采用上述方法的分布式并行圖處理系統(tǒng),包括控制器和處理器節(jié)點,所述控制器負責將輸入的圖數(shù)據(jù)進行分區(qū),將各分區(qū)分派到各處理器節(jié)點中,并監(jiān)控各處理器節(jié)點的運行情況;各處理器節(jié)點組成環(huán)狀結(jié)構,每個處理器節(jié)點把各自的數(shù)據(jù)單元生成副本備份在鄰接處理器節(jié)點中,每個處理器節(jié)點執(zhí)行完自身的數(shù)據(jù)單元后,以增量的方式更新其放置于相鄰處理器節(jié)點中的副本;當某個處理器節(jié)點失效或因網(wǎng)絡出錯而離線時,控制器利用其相鄰節(jié)點的數(shù)據(jù)副本替代原先的數(shù)據(jù)單元,恢復圖處理的正常執(zhí)行。
[0018]與現(xiàn)有技術相比,本發(fā)明的有益效果如下:
[0019](I)傳統(tǒng)的checkpoint機制一般需要讀寫磁盤,而本發(fā)明將容錯時所需的副本緩存于內(nèi)存中。與傳統(tǒng)checkpoint機制相比,讀寫內(nèi)存能更快速地實現(xiàn)副本記錄和錯誤恢復;
[0020](2)本發(fā)明基于P2P的副本分派避免了副本記錄和錯誤恢復過程中的單一熱點現(xiàn)象,使得分布式處理器之間的網(wǎng)絡通信量較為平均,減少了每一個迭代步中的總體通信時間;
[0021](3)本發(fā)明支持動態(tài)容錯,即圖處理在運算過程中發(fā)生異常時,可以從離異常點最近的數(shù)據(jù)單元副本恢復運算,而不必重新計算那些已經(jīng)正確完成的數(shù)據(jù),也不必從頭重新執(zhí)行整個圖處理應用。
【附圖說明】
[0022]圖1是基于BSP模型的分布式并行圖處理工作流程圖。
[0023]圖2是基于P2P的數(shù)據(jù)單元副本生成示意圖。
[0024]圖3是兩個相鄰處理器節(jié)點在相鄰迭代步中進行副本更新的示意圖。
[0025]圖4是錯誤恢復與P2P副本的重建示意圖。
[0026]圖5是具體實例中UniAS架構示意圖。
【具體實施方式】
[0027]為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面通過具體實施例和附圖,對本發(fā)明做進一步說明。
[0028]本發(fā)明的分布式并行圖處理中基于P2P的動態(tài)容錯的方法,包括如下步驟:
[0029](I)為了確保在動態(tài)容錯過程中能夠完整地恢復數(shù)據(jù),本發(fā)明對分布式圖處理的數(shù)據(jù)單元進行了定義。
[0030]由于在圖處理中,每個頂點運算所需的參數(shù)不僅包含頂點自身的原狀態(tài),還需要其鄰接頂點所傳播的消息。因此,在定義圖處理問題的數(shù)據(jù)單元時,不僅要考慮對前一迭代的頂點中數(shù)據(jù)的依賴,還需要考慮鄰接頂點的消息依賴。為了更直觀地描述數(shù)據(jù)單元,本發(fā)明定義圖結(jié)構如下:G = (V, E),其中V表示圖中頂點的集合Iv1, v2,Vf vn},E表示圖中的有向邊組成的集合。初始的圖結(jié)構劃分成若干圖分區(qū)組成的集合,表示為P= (P11P21P3-PJ,這些分區(qū)在運行過程中將分派到各個處理器節(jié)點中。對于任意頂點Vi,其在某一迭代步所收到的消息集合為InMsg(Vi)。進一步,對于某一子圖P」,其包含的所有頂點在某一迭代步所收到的消息集合為InMsg(Pj) = UnMsg(Vi)Iall Vi in P」}。于是,本發(fā)明定義分布式圖處理的數(shù)據(jù)單元為二元組(P」,InMsg(Pj)),其中I ( j彡m,在運算初始時,InMsg(Pj)為空集。在下文的容錯技術中,要求將二元組作為一個整體看待,同時進行復制或恢復。
[0031](2)將處理器節(jié)點組成環(huán)狀結(jié)構,每個節(jié)點把各自的數(shù)據(jù)單元生成副本備份在鄰接處理器節(jié)點中。
[0032]為了實現(xiàn)高效的容錯,本發(fā)明并不將運算過程的副本保存于磁盤中,而是記錄于內(nèi)存中。然而,由于分布式圖處理中的圖規(guī)模較大,如果將每次迭代運算后的圖生成副本保存在某一處理器節(jié)點中,則該節(jié)點可能成為數(shù)據(jù)傳輸熱點,并進一步影響整體運算的效率。因此,本發(fā)明把副本的保存分散到各個處理器節(jié)點,以均衡副本產(chǎn)生過程中的數(shù)據(jù)傳輸量。本發(fā)明將參與運算過程的所有處理器節(jié)點編號,組成環(huán)狀結(jié)構。根據(jù)(I)中對數(shù)據(jù)單元的定義,將輸入的圖數(shù)據(jù)劃分成若干分區(qū),以二元組(Pj,空的消息集合)的結(jié)構分派到各個處理器節(jié)點中。完成分派后,各個數(shù)據(jù)單元將其副本傳輸給編號相鄰的兩個處理器節(jié)點中保存。
[0033]因此,每個處理器節(jié)點既保存自己被分派的數(shù)據(jù)單元(以下稱為運算單元),也緩存著相鄰節(jié)點中的數(shù)據(jù)單元副本(以下稱為鏡像單元),如圖2所示,其中A?H表示運算單元,A’?H’表示鏡像單元。對于自己被分派的數(shù)據(jù)單元,處理器將基于BSP模型對數(shù)據(jù)單元中的每一個頂點進行運算;對于相鄰節(jié)點的數(shù)據(jù)單元副本,處理器只是記錄,并等待每一次迭代步后,相鄰節(jié)點發(fā)送數(shù)據(jù)來更新這些副本。
[0034](3)在運算中,每個處理器節(jié)點執(zhí)行完自身的數(shù)據(jù)單元后,以增量的方式更新其放置于相鄰處理器節(jié)點中的副本。
[0035]在分布式圖處理系統(tǒng)中,圖的每個頂點是隨著迭代運算不斷更新的,這使得步驟
(2)中所設置的副本需要不斷更新。而由于每個頂點的運算需要其相鄰頂點在上一迭代步所傳播的消息,這使得在數(shù)據(jù)恢復過程中必須考慮多個數(shù)據(jù)單元副本所處的迭代步之間的關系問題。
[0036]為了簡化這一問題,保證副本的更新和副本所處迭代步的一致。本發(fā)明基于BSP計算模型,在兩個迭代步之間增添了副本更新階段,在該階段,要求圖處理中的所有數(shù)據(jù)單元都要根據(jù)當前值更新其副本。副本更新階段可以發(fā)生在每個迭代步完成后,也可以根據(jù)系統(tǒng)錯誤發(fā)生的頻率,綜合考慮副本更新所消耗的時間代價,每隔一定迭代步進行一次副本更新。
[0037]為了降低每次副本傳輸所消耗的時間與網(wǎng)絡資源代價,并減少副本緩存所占用的內(nèi)存空間,本發(fā)明提出了增量式的副本更新。每次對副本中圖分區(qū)狀態(tài)的更新只傳輸發(fā)生變化的部分,相鄰處理器節(jié)點將變化的部分累加到數(shù)據(jù)單元副本中,實現(xiàn)副本中圖分區(qū)狀態(tài)的更新。此外,