天天看點

GraphX與GraphLab、Pregel的對比分布式批同步BSPPregelGraphLabGraphX

分布式批同步BSP

Pregel、GraphLab、GraphX都是基于BSP(Bulk Synchronous Parallel)模式,即整體同步并行。一次計算過程由一系列全局超步組成,每一個超步由并發計算、通信和同步三個步驟組成。從垂直上看,一個程式由一系列串行的超步組成。從水準上看,在一個超步中,所有的程序并行執行局部計算。BSP最大的好處是程式設計簡單,但在某些情況下BSP運算的性能非常差,系統速度取決于最慢的計算任務,即木桶原理。Spark Graphx中也實作了Pregel的API。

GraphX與GraphLab、Pregel的對比分布式批同步BSPPregelGraphLabGraphX

Pregel

Pregel采用疊代的計算模型:在每一輪,每個頂點處理上一輪收到的消息,并發出消息給其它頂點,并更新自身狀态和拓撲結構等。算法是否能夠結束取決于是否所有的頂點都已經vote辨別其自身已經達到halt狀态了。頂點通過将其自身的狀态設定成halt來表示它已經不再active。

GraphX與GraphLab、Pregel的對比分布式批同步BSPPregelGraphLabGraphX

Pregel架構的缺點:這個模型雖然簡單,那就是對于鄰居數很多的頂點,它需要處理的消息非常龐大,是以對于符合幂律分布的自然圖,這種計算模型下很容易發生假死或者崩潰。

GraphLab

GraphLab将資料抽象成Graph結構,将基于頂點切分的算法的執行過程抽象成Gather、Apply、Scatter三個步驟。如下:需要完成對V0鄰接頂點的求和計算,将頂點V0進行切分,邊關系以及鄰接點部署在兩台處理器上,各台機器上并行進行求和運算,然後通過master(藍色)頂點和mirror(橘紅色)頂點的通信完成最終的計算。

GraphX與GraphLab、Pregel的對比分布式批同步BSPPregelGraphLabGraphX

1.Gather階段,工作頂點的邊從連接配接頂點和自身收集資料。

2.Apply階段,mirror将gather階段計算的結果發送給master頂點,master進行彙總并結合上一步的頂點資料,進行進一步的計算,然後更新master的頂點資料,并同步給mirror。

3.Scatter階段,工作頂點更新完成之後,更新邊上的資料,并通知對其有依賴的鄰結頂點更新狀态。

由于gather/scatter函數是以單條邊為操作粒度,是以對于一個頂點的衆多鄰邊,可以分别由相應的節點獨立調用gather/scatter函數,進而避免Pregel模型的問題。

GraphX

GraphX公開了類似Pregel的操作,是Pregel和GraphLab抽象的一個融合。在GraphX中,操作者執行一系列的超步,在這些超步中,頂點從之前的超步中接收進入消息,為頂點屬性計算一個新的值,然後在以後的超步中發送消息到鄰居頂點。不像Pregel而更像GraphLab,消息通過邊triplet的一個函數被并行計算,消息的計算既會通路源頂點特征也會通路目的頂點特征。

此外,GraphX的優點還包括:

1.允許使用者把資料當做一個圖和一個集合(RDD),而不需要資料移動或者複制。

2.Spark GraphX可以無縫與Spark SQL、MLLib等結合,友善且高效地完成圖計算整套流水作業。

繼續閱讀