PowerGraph學習

 

一.前言

1.Natural Graphs(如社交網絡,網頁)

特點:冪律分佈

面臨的挑戰:高維度的點和低質量的分區策略

 

https://img-blog.csdn.net/20180613153811273?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMTI1MTgz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

 

2. Pregel: Pregel是一個同步的,每個節點向外傳播消息的算法,每一個節點都會根據接收到的信息改變自己的Rank,然後將自己的Rank分別發送給所有的鄰接點,所有接收的信息都會被合併成一條數據。

缺點:對於鄰居數很多的頂點,它需要處理的消息非常龐大,所以對於符合冪律分佈的自然圖,這種計算模型下很容易發生假死或者崩潰.

3.GraphLab: GraphLab使用異步的共享內存的分佈式處理方法,所謂的共享內存就是每一個節點都可以共享另外的節點和邊的信息,而不需要接收發送。所有的節點都可以共享當前節點、鄰邊、以及所有不考慮邊方向的鄰接點的所有信息。

缺點:會導致節點太多地進行對周邊節點信息的調用,而且在異步的過程中,一個節點執行的時候其他鄰接點必須處於上鎖的狀態,會導致效率降低。

 

4.總結:Pregel跟GraphLab都是用哈希函數隨機分配所以會導致很多節點被分配到很差的位置,數據分佈不平衡,單個機器的存儲容量可能會不夠用,是不適合處理這種Natural Graphs。

二.PowerGraph創新點

PowerGraph針對Natural Graphs ,主要的創新有兩點

第一,採用點切分策略,來保證整個集羣的均衡性,該策略對大量密率圖分區是非常高效的。

第二,提出了GAS計算模型,將高維度的點進行並行化。

 

1.基於點的切分策略

(1)Vertex-Cut VS Edge-Cut

                                

 

邊切分過程:從(a)圖中可以看出,切分的過程中,總共有AB,BC,CD三條邊被切開,保存到3臺機器後,邊的總數目由原來的3條,變成了6條,多了一倍,外加5個節點副本。

點切分過程:從(b)圖中可以看出同樣是4個節點的圖,將B、C節點切分開來,存儲到3臺機器後,得到右邊這個圖,可以看出邊的數目還是3臺,只多了兩個節點的副本。

點切分優點:對於Natural Graphs ,邊的數量遠大於頂點數量,基於點切分的分區策略相比邊切分的分區策略會減少邊的副本的維護,節省更多內存空間

(2) 點切分方法(三種切分方法)

1)隨機邊分配策略:按照點切分的方式,隨機放置邊 

https://img-blog.csdn.net/20180613160244499?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMTI1MTgz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

這裏數據集選用的是Twitter數據集,有410w個頂點,14億條邊 。橫座標是實際集羣中機器的數目,縱座標表示1個頂點期望跨的機器數目,藍色的線表示表示理論推測期望值,紅線是實際隨機邊放置的曲線圖。可以看出期望值和理論值之間基本能夠匹配,所以針對隨機邊放置策略,就可以做到精確的估計內存和通信開銷。 

2)貪婪的點切分策略

https://img-blog.csdn.net/20180613160428741?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMTI1MTgz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

 

切分過程:新加進來的邊,它的某個節點已經存在於某臺機器上,就將該邊分到對應的機器上,比如在1號機器上已經存在AB這條邊,2號機器上已經存在BC這條邊,那麼當一條新的邊AD在要加進來時,發現A節點已經在1號機器上,所以就將該邊放置到1號機器上。如果再來一條邊BE,發向兩臺機器上都存有B節點,這時候貪婪策略會選擇機器中分配的邊最少的機器進行分配

關於貪婪邊切分策略,有兩種實現方式:
a.貪婪協同邊分配 

協同邊放置策略,這需要維護一張全局的頂點放置的歷史紀錄表,在執行貪心切分之前都要去查詢這張表,在執行的過程中需要更新這張表。協同點切分的策略,它的特點是慢但點切分的質量高

b.Oblivious(遺忘)的貪婪策略

Oblivious的貪婪策略,它是一種近似的貪婪策略,不需要做全局的協同。貪婪算法的運行不依賴每一臺機器,不需要維護全局的記錄表,而是每臺機器自己維護這張表,不需要做機器間的通信。這種策略速度快,但切分質量比較低

(3)三種點切分分區策略的性能的對比(平均的機器跨度和構建時間)

 

 

結論:隨機邊分配策略構建時間短,但平均的機器跨度最大;貪婪協同邊分配算法平均機器跨度最小,但構建時間最長;而Oblivious(遺忘)的貪婪策略能夠在平均機器跨度和構建時間上獲得一個折中的性能

2. GAS模型基於點分割的圖計算抽象成的通用計算模型

當圖數據被分割後進入不同計算節點進行計算的時候,由於在不同節點中對於同一個節點有可能有多個副本,這個節點副本之間如何進行數據交換協同也成爲了一個難題,GAS模型用於解決這個難題。

                

功能介紹:Gather: Gather階段的主要工作主要發生在各個計算節點,蒐集這個計算節點圖數據中某個頂點的相鄰邊和頂點的數據進行計算(例如在PageRank算法中計算某個頂點相鄰的頂點的數量)。

Apply: Apply階段的主要工作是將各個節點計算得到的數據(例如在PageRank算法中各計算節點計算出來的同一頂點的相鄰頂點數)統一發送到某一個計算節點,由這個計算節點對圖的節點的數據進行彙總求和計算,這樣就得到這個圖頂點的所有相鄰節點總數。

Scatter: Scatter階段的主要工作是將中心計算節點計算的圖頂點的所有相鄰節點總數發送更新給各個計算節點,這些收到更新信息的節點將會更新本計算節點中與這個圖頂點相鄰的頂點以及邊的相關數據。

 

https://img-blog.csdn.net/20151216214620729

PowerGraph中使用PageRank算法的過程: i表示目標節點, Wji表示從j點到i點的權值,對目標節點求PageRank值,

Gather階段,先求i所有鄰居節點的權值,用戶自定義一個sum操作,統計所有鄰居節點的權值之和;

Apply階段,利用上一階段的sum值加上一個偏置值,計算得到i的新的權值,更新i點的權值;

Scatter階段如果i值被修改,就觸發相應的鄰居節點j重新計算。

當頂點按點切分方式被分到4臺機器之後,在多個節點上指派一個爲Master(主節點),其餘的爲Mirror(從節點),Mirror(從節點)上可以運行Gather程序來收集所有鄰居的信息,並進行sum (聚合計算)後發送給Master,Master(主節點)上的Gather程序收集這些結果,最終將這個結果應用到Apply程序上,得到新的節點狀態。然後通過Scatter程序將新的節點狀態廣播給各個Mirror(從節點),Mirror(從節點)進而廣播給各個鄰居。

三. Pregel、GraphLab和PowerGraph性能對比

Pregel、GraphLab和PowerGraph使用人工合成的Power-law Graph運行PageRank算法,可以看出PowerGraph不僅通信開銷小而且運行時間短,對高維度點也有很強的健壯性

https://img-blog.csdn.net/20180613160720309?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMTI1MTgz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

 

PowerGraph使用真實的Twitter數據集運行PageRank算法,通信開銷和運行時間相比GraphLab和Pregel都非常低

                           

 

 

四.參考資料

[1] http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.258.7712

[2] https://blog.csdn.net/qq_21125183/article/details/80679689

[3] https://blog.csdn.net/qq_38265137/article/details/80547763

[4] https://www.jianshu.com/p/1b0e2ec54fae

[5] https://www.jianshu.com/p/f088bf589820

 

五.注 

資料整理來源於網絡,如有侵權,請聯繫刪除!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章