作者:劉旭暉 Raymond 轉載請註明出處
Email:colorant at 163.com
BLOG:http://blog.csdn.net/colorant/
更多論文閱讀筆記 http://blog.csdn.net/colorant/article/details/8256145
閱讀筆記 - Pregel: A System for Large-Scale
GraphProcessing
關鍵字
分散式運算,圖,迭代
==目標問題 ==
設計一種解決圖(Graph)類問題的大規模分布式並行運算架構,提供一個通用的API介面。
==核心思想 ==
Pregel將靶心圖表類問題的運算模型歸結為在圖的拓撲節點(Vertex)上迭代執行特定的演算法。每次迭代稱為一個superstep
在Pregel中,資料模型的主要概念包括節點,邊(Edge)和訊息(Message)。在每個superstep步驟中,各個節點執行相同的使用者定義函數來處理資料,更新自身的狀態乃至更改整個圖的拓撲結構(如增減節點,邊等)。每個節點的邊則用來連結相關的目標節點,通過發送訊息給其它節點來傳遞資料。
整個處理流程中,資料的接收和處理是以superstep為節拍來同步的,在一個superstep中各個節點所發送的訊息,直到下一個superstep裡才會被目標節點所接收和處理並觸發狀態變更。這種基於節拍的處理流程,很大程度上簡化了資料同步的處理。
每個節點在當前superstep中處理完資料後,會投票決定自身是否停止處理,如果沒有被訊息再次觸發,在以後的superstep中就不會調度該節點進行運算。當所有節點都停止後,整個迭代過程結束。
==實現 ==
進程模型
在實現中,Pregel的進程也分為Master和Worker,每個Worker負責處理一部分的節點(以特定的演算法對節點進行分區Partition),Master則負責調度superstep
各種最佳化和特定Feature
為了減少Worker之間資料轉送的開銷,一方面Worker內部所有節點的訊息會被放入隊列中批量傳輸,另一方面,Combiner類在一些場合裡(如Sum)可以被用來在訊息傳遞前進行訊息(也就是資料)合并。
此外Pregel還提供了Aggregator類來實現全域的通訊,資料同步,統計等工作,每個Worker先在本地做Reduction,再將結果發送給master,master做完全域Reduction後會在下一個superstep開始的時候將結果再分發給各個節點使用。
Master是以Partition而非節點為單位管理相關Worker,因此可以處理大規模的圖拓撲結構
容錯
目前的容錯方案是基於Checkpoint的,Master在一個superstep開始時可以要求各個worker儲存目前狀態到實體儲存體裝置中,當檢測到某個worker
fail的時候,從最近的checkpoint開始重新迭代運算整個圖。目標的改進方案是額外記錄每個節點發送的訊息,便於單獨迭代恢複單個節點的最新狀態。
Future Work
包括放寬資料同步模型,改進在大規模叢集中速度快的worker在Superstep之間等待資料同步的過程。
==相關研究,項目等 ==
Bagel:Spark內建的一個Pregel模型的實現,應該基本上就是利用了Spark自身的RDD可以常駐記憶體,適合於迭代運算的特性,額外加上對Pregel迴圈調度演算法和使用者API介面的實現。