本發(fā)明屬于圖計算領(lǐng)域,更具體地,涉及一種存儲優(yōu)化的分布式圖處理方法。
背景技術(shù):
圖作為經(jīng)典的數(shù)據(jù)結(jié)構(gòu),通過點和邊來表達復雜的數(shù)據(jù)關(guān)系,已廣泛應(yīng)用于社會各領(lǐng)域,包括互聯(lián)網(wǎng)領(lǐng)域的社交數(shù)據(jù)分析與挖掘、化學領(lǐng)域的蛋白質(zhì)交互、醫(yī)學領(lǐng)域疾病暴發(fā)路徑的預測、學術(shù)領(lǐng)域中文獻的引用關(guān)系等,于是衍生出很多重要的算法,包括pagerank、最短路徑,連通分支,極大獨立集等。正因為圖數(shù)據(jù)具有重要的意義,又需要大量的計算,于是出現(xiàn)了各種各樣的圖處理系統(tǒng)。
首先是分布式內(nèi)存模式圖處理系統(tǒng),包括pregel、graphlab等,這些系統(tǒng)先把圖的所有信息都放入到內(nèi)存中再開始處理,這種方式執(zhí)行速度快,但代價大、成本高,在規(guī)模繼續(xù)增大的圖應(yīng)用背景下,挑戰(zhàn)越來越顯著。且單一處理機可裝配內(nèi)存量較為有限,處理系統(tǒng)橫向擴展只能橫向補充處理機數(shù)量,這將不可避免地增加圖分區(qū),更進一步增加切邊數(shù)量,增加處理機間通信壓力,加劇網(wǎng)絡(luò)io延遲,由此將抵消橫向擴展所提供的并行優(yōu)勢,拖累圖處理性能。
在橫向擴展遭遇矛盾時,涌現(xiàn)出一批采取縱向擴展設(shè)計的單機外存模式圖處理技術(shù)系統(tǒng),包括graphchi、x-stream等,其利用外存相對于內(nèi)存廉價且容量更易于擴展的優(yōu)點,將圖的大部分數(shù)據(jù)駐留于外存,僅在計算有依賴時裝載少量數(shù)據(jù)進入內(nèi)存,圖的信息主要通過磁盤訪問的收益,減少對多機之間通信的依賴,并且可以實現(xiàn)在內(nèi)存等資源高度受限的普通機器上進行性能可以接受的圖處理,但是這種系統(tǒng)的性能嚴重受到磁盤io的影響。
在大數(shù)據(jù)的時代,圖數(shù)據(jù)的規(guī)模越來越大,對擴展性、并行性要求越來越高。圖處理系統(tǒng)在結(jié)構(gòu)上無論是采取單機縱向擴展還是集群橫向擴展均面臨各自的限制。就單機而言,其資源擴展,無論是計算能力還是內(nèi)存資源、io帶寬均有不足,反觀分布式架構(gòu),圖的合理劃分早已成為經(jīng)典挑戰(zhàn),盡管好的數(shù)據(jù)劃分能平衡計算負載、減少通信開銷,從而加速處理,但這種劃分本身是一個np-hard問題,即使能實現(xiàn)近似算法,往往也要耗費大量的時間及資源進行預處理,得不償失,有鑒于此,現(xiàn)有技術(shù)仍然僅進行簡單的圖數(shù)據(jù)劃分,如pregel的基于hash的劃分,gemini的按段連續(xù)劃分。這種簡單的圖數(shù)據(jù)劃分在分布式圖處理過程中,難以避免負載不平衡的問題,造成動態(tài)變化的處理熱點,成為拖累整個圖迭代處理的短板,影響圖處理總體性能。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)的以上缺陷,本發(fā)明提供一種存儲優(yōu)化的分布式圖處理方法,對圖數(shù)據(jù)進行分區(qū)存儲和io平衡,實現(xiàn)圖數(shù)據(jù)處理負載平衡,加快圖數(shù)據(jù)處理速度,解決現(xiàn)有技術(shù)存在的負載不平衡,在圖數(shù)據(jù)處理過程中造成熱點而引起的總體性能下降問題。
為實現(xiàn)上述目的,本發(fā)明提供一種存儲優(yōu)化的分布式圖處理方法,包括如下步驟:
(1)初始化;將圖處理系統(tǒng)處理機節(jié)點劃分為一個主控節(jié)點和多個工作節(jié)點,各工作節(jié)點用于完成圖處理的基本過程,實現(xiàn)圖處理的計算模型;主控節(jié)點用于控制各個工作節(jié)點;
主控節(jié)點根據(jù)用戶初始的配置,可以是包含各個節(jié)點信息的文件,由這個文件來生成初始的消息路由表,所有工作節(jié)點保存所述消息路由表副本并與之同步更新;所述消息路由表用于記錄各工作節(jié)點間的路由信息;主控節(jié)點控制整個圖處理系統(tǒng)的執(zhí)行,工作節(jié)點完成圖處理的基本過程;所述路由信息,用于工作節(jié)點之間更新消息的傳遞和主控節(jié)點到各工作節(jié)點之間通信;
主控節(jié)點根據(jù)所述消息路由表劃分圖數(shù)據(jù),即以圖結(jié)構(gòu)表示信息的大規(guī)模數(shù)據(jù),按圖的結(jié)點id進行劃分;劃分塊數(shù)與消息路由表中工作節(jié)點數(shù)相同;分塊根據(jù)圖結(jié)點總數(shù)平均劃分;所述圖的所有結(jié)點形成一個環(huán)狀空間,圖結(jié)點id的最小值和圖結(jié)點id的最大值相鄰;經(jīng)過劃分,各圖結(jié)點分區(qū)呈現(xiàn)兩種情況,一種分區(qū)是有連續(xù)的id,另一種分區(qū)是有兩段連續(xù)id;對圖按圖結(jié)點“連續(xù)”的分段,這里的“連續(xù)”就是一個圖分區(qū)在上述的環(huán)狀空間是連續(xù)的;這是一種基于塊的分區(qū)方法,本系統(tǒng)初始并不對圖數(shù)據(jù)進行刻意的劃分,不保證分區(qū)的平衡性,而是僅僅按將圖結(jié)點平均的分到每個圖分區(qū)上去,而且一個圖分區(qū)擁有該分區(qū)點的所有出邊;
(2)圖數(shù)據(jù)的分發(fā);主控節(jié)點將步驟(1)劃分得到的各圖結(jié)點分區(qū)和該分區(qū)內(nèi)的元數(shù)據(jù)根據(jù)一致性哈希算法發(fā)送到消息路由表中相應(yīng)的工作節(jié)點,所述元數(shù)據(jù)包括全圖的邊數(shù)、全圖的結(jié)點數(shù)、圖的類型、各分區(qū)的邊數(shù)、各分區(qū)的id、各分區(qū)的起始的圖結(jié)點id、各分區(qū)結(jié)束的圖結(jié)點id、圖分區(qū)中點圖結(jié)點id;后面再次分區(qū)會使用該信息;
(3)迭代次數(shù)判別;各工作節(jié)點在主控節(jié)點控制下開始圖數(shù)據(jù)迭代處理;迭代前,主控節(jié)點判別迭代次數(shù)是否達到迭代次數(shù)預設(shè)值,是則轉(zhuǎn)步驟(6);否則,轉(zhuǎn)步驟(4);這里主控節(jié)點起著一個屏障的作用,屏障即圖處理過程中一個工作節(jié)點要等到所有的工作節(jié)點都完成一輪迭代之后才能進行下一輪迭代;
(4)更新消息傳遞,各工作節(jié)點執(zhí)行mga計算,包括:
首先,對圖分區(qū)的每條邊都執(zhí)行一次map操作,如pagerank算法對每一個圖結(jié)點的權(quán)重按照出邊的數(shù)量均分,每一個圖結(jié)點在執(zhí)行map操作的同時產(chǎn)生一個更新消息,發(fā)送給對應(yīng)的目的地址;更新消息為具體應(yīng)用產(chǎn)生,更新消息結(jié)構(gòu)包括需要傳給鄰結(jié)點的數(shù)據(jù)與一個目的地址,即鄰接結(jié)點的地址;其次,各圖結(jié)點執(zhí)行一個gather操作收集傳遞給該圖結(jié)點所有的更新消息;第三,各圖結(jié)點執(zhí)行一個apply操作,用收集的更新消息來改變這個結(jié)點的數(shù)據(jù);所述更新消息的發(fā)送僅僅發(fā)生在工作節(jié)點之間,更新消息根據(jù)消息路由表發(fā)送給對應(yīng)的工作節(jié)點;所述mga計算即上述map、gather和apply操作的簡稱,在圖處理一輪迭代中,每一個圖結(jié)點都要經(jīng)歷這三個階段;
在這一步中,各工作節(jié)點根據(jù)mga計算模型(mga是map-gather-apply過程的簡稱,在圖處理一輪迭代中,每一個圖結(jié)點都要經(jīng)歷這三個階段),對圖分區(qū)的每條邊都執(zhí)行一次map操作(根據(jù)具體應(yīng)用產(chǎn)生更新消息),在工作節(jié)點中產(chǎn)生一個更新消息(更新消息結(jié)構(gòu)包含一個傳遞給臨結(jié)點的數(shù)據(jù)和一個目的地址),發(fā)送給對應(yīng)的目的地址;然后,各圖結(jié)點執(zhí)行一個gather操作(收集傳遞給該結(jié)點的所有的更新消息),將賦給該結(jié)點的更新消息收集,然后執(zhí)行一個apply操作(根據(jù)更新消息更新結(jié)點狀態(tài));因此在每一輪迭代中,工作節(jié)點需要將產(chǎn)生的更新消息發(fā)送給對應(yīng)的工作節(jié)點,這種更新消息的發(fā)送僅僅發(fā)生在工作節(jié)點之間,更新消息根據(jù)分布式消息路由表發(fā)送給對應(yīng)的工作節(jié)點;所有工作節(jié)點及主控節(jié)點都要保存一份分布式系統(tǒng)消息路由表,其中每一個工作節(jié)點保存的分布式系統(tǒng)消息路由表的是主控節(jié)點所保存的分布式系統(tǒng)路由表的副本,當主控節(jié)點的分布式系統(tǒng)消息路由表更新時,主控節(jié)點會將該消息路由表同步并更新所有的工作節(jié)點消息路由表;
(5)擴展處理;主控節(jié)點根據(jù)所收集的工作節(jié)點運行狀態(tài),判別各工作節(jié)點負載是否均衡:
是則,不進行分割和擴展,轉(zhuǎn)步驟(3)進行下一輪迭代;
否則對負載最大工作節(jié)點的圖分區(qū)數(shù)據(jù)進行分裂,即對處理的圖數(shù)據(jù)進行分割,然后橫向擴展,用以消除熱點,即處理數(shù)據(jù)耗時最長的那個節(jié)點,采用一致性哈希算法為工作節(jié)點分配圖分區(qū)數(shù)據(jù),達到負載調(diào)控的目的;然后更新消息路由表,轉(zhuǎn)步驟(3)進行下一輪迭代;所述分割指將圖結(jié)點分成兩部分;所述橫向擴展指加入一個工作節(jié)點,對分出的圖數(shù)據(jù)進行處理;一致性哈希算法是為工作節(jié)點分區(qū)數(shù)據(jù)的操作,每一次添加工作節(jié)點后,都要重新分配一次;擴展是均衡負載的關(guān)鍵方法,也是加快一輪圖處理迭代的重要手段;
(6)圖數(shù)據(jù)處理結(jié)束,同時輸出計算結(jié)果。
進一步的,所述步驟(4)中mga計算過程使用圖數(shù)據(jù)的流式讀取保證了對存儲器的順序訪問,從而保證了對外存io的最大利用。
進一步的,所述步驟(5)中收集的工作節(jié)點運行狀態(tài)包括磁盤io、網(wǎng)絡(luò)io以及計算的消耗代價。
進一步的,所述步驟(5)中所述熱點指一輪迭代中運行最慢的工作節(jié)點,對熱點的圖分區(qū)進行分裂的原則是使分成的兩個分區(qū)負載代價盡可能接近;
cost=α|v|+|e|
其中,對于圖數(shù)據(jù)處理來說,α取圖的平均入度,α|v|代表一個圖分區(qū)所要接收的更新消息,|e|代表一個圖分區(qū)所要發(fā)送的更新消息,公式中cost衡量一個圖的負載;分裂的目的是在需要分裂的圖分區(qū)上找到一個圖結(jié)點,使該圖分區(qū)分裂成的兩段子分區(qū)的負載代價大致相當。該公式中cost可以理想的衡量一個圖的負載。顯然,擴展決策時,在需要分裂的圖分區(qū)上總可以找到一個圖結(jié)點,使該圖分區(qū)分裂成的兩段子分區(qū)的負載代價大致相當。
本發(fā)明中,所述步驟1中劃分數(shù)據(jù)使用存儲優(yōu)化的分區(qū)方法,這種分區(qū)策略基本思想是在初始時進行簡單的按段劃分,后續(xù)在圖處理的過程中,系統(tǒng)會根據(jù)工作節(jié)點的負載情況對分區(qū)進行再次按段劃分。圖所有結(jié)點形成一個環(huán)狀空間,圖結(jié)點id的最小值和圖結(jié)點id的最大值相鄰,對圖按圖結(jié)點“連續(xù)”的分段,這里的“連續(xù)”就是一個圖分區(qū)在上述的環(huán)狀空間是連續(xù)的。
本發(fā)明中,所述步驟4中mga計算模型具體內(nèi)容如圖4所示,mga過程使用圖數(shù)據(jù)的流式讀取保證了對磁盤的順序訪問,從而保證了對外存io的最大利用。
總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下有益效果:
本發(fā)明在處理圖數(shù)據(jù)時,利用一致性哈希存儲圖數(shù)據(jù),隨后采取動態(tài)存儲優(yōu)化的策略,根據(jù)負載調(diào)整圖的分區(qū)存儲,從而可以實現(xiàn)圖分區(qū)的動態(tài)擴展,消除“熱點”工作節(jié)點,平衡io,提高圖處理的性能,大大提高系統(tǒng)處理數(shù)據(jù)的速度。
附圖說明
圖1為本發(fā)明存儲優(yōu)化的分布式圖處理系統(tǒng)執(zhí)行流程圖;
圖2為本發(fā)明存儲優(yōu)化的分布式圖處理系統(tǒng)的總體架構(gòu)圖;
圖3為本發(fā)明存儲優(yōu)化的分布式圖處理系統(tǒng)的分區(qū)策略圖;
圖4為本發(fā)明存儲優(yōu)化的分布式圖處理系統(tǒng)計算模型mga示意圖;
圖5、6、7為本發(fā)明存儲優(yōu)化的分布式圖處理系統(tǒng)分區(qū)動態(tài)擴展示意圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
圖2為本發(fā)明存儲優(yōu)化的分布式圖處理系統(tǒng)的系統(tǒng)架構(gòu)圖,該系統(tǒng)由兩部分組成,主控節(jié)點和工作節(jié)點,主控節(jié)點控制整個圖處理系統(tǒng)的執(zhí)行,工作節(jié)點完成圖處理的基本過程,實現(xiàn)圖處理的計算模型。圖1為該系統(tǒng)數(shù)據(jù)處理的流程圖,具體包括以下步驟:
步驟1:圖的劃分:
主控節(jié)點首先會根據(jù)用戶初始的配置生成初始的消息路由表,根據(jù)該表劃分圖數(shù)據(jù),一個分區(qū)中有兩種情況,一種是有連續(xù)的id,第二種是有兩段連續(xù)id,這是一種基于塊的分區(qū)方法,本系統(tǒng)初始并不對圖數(shù)據(jù)進行刻意的劃分,不會保證分區(qū)的平衡性,而是僅僅按將圖結(jié)點平均的分到每個圖分區(qū)上去。
步驟2:圖數(shù)據(jù)的分發(fā):
主控節(jié)點將圖分區(qū)以及分區(qū)元數(shù)據(jù)發(fā)送到對應(yīng)的工作節(jié)點,包括全圖的邊數(shù)、全圖的結(jié)點數(shù)、圖的類型、分區(qū)的邊數(shù)、分區(qū)的id、分區(qū)的起始的圖結(jié)點id、分區(qū)的結(jié)束圖結(jié)點id、圖分區(qū)中點圖結(jié)點id,再次分區(qū)會使用該信息;
步驟3:開始數(shù)據(jù)迭代處理:
主控節(jié)點控制圖處理每輪迭代的開始和結(jié)束,同時會根據(jù)預設(shè)值控制迭代的次數(shù),這里主控節(jié)點起著一個屏障的作用,屏障即圖處理過程中一個工作節(jié)點要等到所有的工作節(jié)點都完成一輪迭代之后才能進行下一輪迭代。當判斷全部迭代完成,執(zhí)行步驟6;
步驟4:更新消息傳遞:
在每一輪迭代中,根據(jù)mga(map-gather-apply)計算模型,每一個圖結(jié)點都要經(jīng)歷這三個階段,圖數(shù)據(jù)以流的形式從磁盤輸入以便并行化處理,對每條邊都執(zhí)行一個map操作,產(chǎn)生一個更新,這個更新結(jié)構(gòu)包含一個目的地址,每個更新都會發(fā)送給對應(yīng)的目的地址,每個圖結(jié)點有一個gather的操作,然后等所有的更新都收集完畢之后,每個圖結(jié)點會執(zhí)行一個apply操作。工作節(jié)點需要將產(chǎn)生的更新消息發(fā)送給對應(yīng)的工作節(jié)點,這種更新消息的發(fā)送僅僅發(fā)生在工作節(jié)點之間,更新消息根據(jù)分布式消息路由表發(fā)送給對應(yīng)的工作節(jié)點;
步驟5:擴展決策:
擴展決策是均衡負載的關(guān)鍵方法,也是加快一輪圖處理迭代的重要手段,主控節(jié)點會在迭代計算過程中根據(jù)主控節(jié)點所收集的工作節(jié)點運行狀態(tài),決定是否對系統(tǒng)進行橫向擴展(scale-out),以及對哪個工作節(jié)點進行“分裂”以消除熱點,達到負載調(diào)控的目的;
步驟6圖數(shù)據(jù)處理結(jié)束,同時輸出計算結(jié)果。
本發(fā)明提供一個實施例,以[0,232-1]的環(huán)狀hash空間,vid1、vid2、vid3、vid4四個圖結(jié)點,3個圖分區(qū)為例,其中vid2和vid4處于同一個分區(qū),如圖5所示,具體介紹本發(fā)明,包括以下步驟:
步驟1圖的劃分:
主控節(jié)點首先會根據(jù)用戶初始的配置生成初始的消息路由表,根據(jù)該表劃分圖數(shù)據(jù),一個分區(qū)中有兩種情況,一種是有連續(xù)的id,第二種是有兩段連續(xù)id,這是一種基于塊的分區(qū)方法,本系統(tǒng)初始并不對圖數(shù)據(jù)進行刻意的劃分,不會保證分區(qū)的平衡性,而是僅僅按將圖結(jié)點平均的分到每個圖分區(qū)上去。
例如圖3所示,圖結(jié)點是在分區(qū)時是一個環(huán)狀空間,圖結(jié)點首尾相接,分為四個分區(qū),分區(qū)一、分區(qū)二、分區(qū)三中的圖結(jié)點id是嚴格連續(xù)的,而分區(qū)四在環(huán)狀空間上是連續(xù)的,跨越了圖的首尾結(jié)點,實際是由兩段嚴格連續(xù)的圖結(jié)點組成。假設(shè)在分布式圖處理過程中,這種基于塊的方法減少了全局圖結(jié)點id到本分區(qū)圖結(jié)點局部id的映射開銷,每個圖分區(qū)只需要維護邊界信息就能快速的轉(zhuǎn)換。在進行負載轉(zhuǎn)移的過程中,對一個圖分區(qū)再次劃分的時候,可以證明,沿著環(huán)查詢,總可以找到一個圖結(jié)點,向該圖結(jié)點擴展,將該圖分區(qū)再次二分,能使得這兩結(jié)點的負載相等或相差最小。
步驟2圖數(shù)據(jù)的分發(fā):
主控節(jié)點將圖分區(qū)以及分區(qū)元數(shù)據(jù)發(fā)送到對應(yīng)的工作節(jié)點,首先將工作節(jié)點映射到圖結(jié)點構(gòu)成的環(huán)上,假設(shè),三個工作節(jié)點通過一致性哈希hash算法得到對應(yīng)的鍵(key)值,即工作節(jié)點在這個環(huán)上的位置。
hash(w1)=key1
hash(w2)=key2
hash(w3)=key3
然后將key值放置于所述環(huán)中,如圖6所示。
然后采用一致性哈希算法,以順時針的方向,將每個圖分區(qū)所有的圖結(jié)點(vid)映射到離該分區(qū)最近的工作節(jié)點中(就是這個圖分區(qū)歸這個工作節(jié)點計算)。
步驟3開始一輪數(shù)據(jù)迭代處理:
主控節(jié)點控制圖處理每輪迭代的開始和結(jié)束,同時會根據(jù)預設(shè)值控制迭代的次數(shù),這里主控節(jié)點起著一個屏障的作用,屏障即圖處理過程中一個工作節(jié)點要等到所有的工作節(jié)點都完成一輪迭代之后才能進行下一輪迭代。當判斷全部迭代完成,執(zhí)行步驟6;
步驟4更新消息傳遞:
在每一輪迭代中,根據(jù)mga(map-gather-apply)計算模型,每一個圖結(jié)點都要經(jīng)歷這三個階段,圖數(shù)據(jù)以流的形式從磁盤輸入以便并行化處理,對每條邊都執(zhí)行一個map操作,產(chǎn)生一個更新,這個更新結(jié)構(gòu)包含一個目的地址,每個更新都會發(fā)送給對應(yīng)的目的地址,每個圖結(jié)點有一個gather的操作,然后等所有的更新都收集完畢之后,每個圖結(jié)點會執(zhí)行一個apply操作。工作節(jié)點需要將產(chǎn)生的更新消息發(fā)送給對應(yīng)的工作節(jié)點,這種更新消息的發(fā)送僅僅發(fā)生在工作節(jié)點之間,更新消息根據(jù)分布式消息路由表發(fā)送給對應(yīng)的工作節(jié)點;
步驟5擴展決策:
擴展決策是均衡負載的關(guān)鍵方法,也是加快一輪圖處理迭代的重要手段,主控節(jié)點會在每一次迭代過程中之間根據(jù)主控節(jié)點所收集的工作節(jié)點運行狀態(tài),決定是否對系統(tǒng)進行橫向擴展(scale-out),以及對哪個工作節(jié)點進行“分裂”以消除熱點,同時采用步驟2中所描述的一致性哈希算法再次分發(fā)圖數(shù)據(jù),達到負載調(diào)控的目的。假設(shè)熱點出現(xiàn)在第三個工作節(jié)點w3處理的分區(qū)二,則需要把分區(qū)二“分裂”成兩個子分區(qū),并添加第四個工作節(jié)點w4來處理分裂的其中一個子分區(qū),如圖7所示。
步驟6圖數(shù)據(jù)處理結(jié)束,同時輸出計算結(jié)果。
本發(fā)明在執(zhí)行圖數(shù)據(jù)處理時,通過對各工作節(jié)點的負載進行量化評價,使“熱點”工作節(jié)點的分區(qū)數(shù)據(jù)均分,并通過一致性哈希算法來實現(xiàn)分區(qū)的動態(tài)擴展,對合成的圖數(shù)據(jù)以及真實社交網(wǎng)絡(luò)圖數(shù)據(jù)進行測試,實驗結(jié)果也很好的證明了通過存儲優(yōu)化,圖處理的不平衡性減少,加速了圖處理。
本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。