GraphX与GraphLab、Pregel的对比
分布式批同步BSP
Pregel、GraphLab、GraphX都是基于BSP(Bulk Synchronous Parallel)模式,即整體同步并行。一次計算過程由一系列全局超步組成,每一個超步由并發計算、通信和同步三個步驟組成。從垂直上看,一個程序由一系列串行的超步組成。從水平上看,在一個超步中,所有的進程并行執行局部計算。BSP最大的好處是編程簡單,但在某些情況下BSP運算的性能非常差,系統速度取決于最慢的計算任務,即木桶原理。Spark Graphx中也實現了Pregel的API。
Pregel
Pregel采用迭代的計算模型:在每一輪,每個頂點處理上一輪收到的消息,并發出消息給其它頂點,并更新自身狀態和拓撲結構等。算法是否能夠結束取決于是否所有的頂點都已經vote標識其自身已經達到halt狀態了。頂點通過將其自身的狀態設置成halt來表示它已經不再active。
Pregel框架的缺點:這個模型雖然簡單,那就是對于鄰居數很多的頂點,它需要處理的消息非常龐大,所以對于符合冪律分布的自然圖,這種計算模型下很容易發生假死或者崩潰。
GraphLab
GraphLab將數據抽象成Graph結構,將基于頂點切分的算法的執行過程抽象成Gather、Apply、Scatter三個步驟。如下:需要完成對V0鄰接頂點的求和計算,將頂點V0進行切分,邊關系以及鄰接點部署在兩臺處理器上,各臺機器上并行進行求和運算,然后通過master(藍色)頂點和mirror(橘紅色)頂點的通信完成最終的計算。
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等結合,方便且高效地完成圖計算整套流水作業。
總結
以上是生活随笔為你收集整理的GraphX与GraphLab、Pregel的对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华硕x450jn拆机_华硕X450JN笔
- 下一篇: POI Excel行高设置