分布式圖計算模型Pregel詳解

??Pregel是Google提出的大規(guī)模分布式圖計算平臺,專門用來解決網(wǎng)頁鏈接分析倒彰、社交數(shù)據(jù)挖掘等實際應(yīng)用中涉及的大規(guī)模分布式圖計算問題待讳。目前的圖計算模型基本上都遵循BSP計算模式。在詳細(xì)介紹Pregel模型之前痴晦,我們先簡單了解一下BSP模式的相關(guān)概念誊酌。

1. BSP模式

??BSP(Bulk Synchronous Parallel露乏,整體同步并行)是一種并行計算模式瘟仿,由英國計算機(jī)科學(xué)家Viliant在上世紀(jì)80年代提出。BSP計算模式入下圖所示驹止。

BSP模型

BSP計算模式中以下幾個概念需要了解一下:

  1. Processors:并行計算進(jìn)程幢哨,它對應(yīng)到集群中的多個結(jié)點,每個結(jié)點可以有多個Processor闸与;
  2. LocalComputation:單個Processor的計算岸售,每個Processor都會切分一些結(jié)點作計算凸丸;
  3. Communication:Processor之間的通信。接觸的圖計算往往需要做些遞歸或是使用全局變量咽块,在BSP模型中腻惠,對圖結(jié)點的訪問分布到了不同的Processor中集灌,并且往往哪怕是關(guān)系緊密具有局部聚類特點的結(jié)點也未必會分布到同個Processor或同一個集群結(jié)點上,所有需要用到的數(shù)據(jù)都需要通過Processor之間的消息傳遞來實現(xiàn)同步腌零;
  4. BarrierSynchronization:柵欄同步益涧。每一次同步也是一個超步的完成和下一個超步的開始驯鳖;
  5. Superstep:超步,這是BSP的一次計算迭代嘹裂,拿圖的廣度優(yōu)先遍歷來舉例寄狼,從起始結(jié)點每往前步進(jìn)一層對應(yīng)一個超步。
  6. 任務(wù)結(jié)束伊磺,一個作業(yè)可以選出一個Proceessor作為Master删咱,每個Processor每完成一個Superstep都向Master反饋完成情況痰滋,Master在N個Superstep之后發(fā)現(xiàn)所有Processor都沒有計算可做了,便通知所有Processor結(jié)束并退出任務(wù)团搞。

2. Pregel模型

??在BSP模式的基礎(chǔ)上逻恐,我們詳細(xì)解釋一下Pregel模型的原理峻黍。Pregel在概念模型上遵循BSP模式姆涩。整個計算過程由若干順序運行的超級步(Super Step)組成,系統(tǒng)從一個“超級步”邁向下一個“超級步”轻局,直到達(dá)到算法的終止條件样刷。一個典型的Pregel計算過程如下:

  • 讀取圖數(shù)據(jù)并對圖初始化置鼻;
  • 當(dāng)圖被初始化完畢蜓竹,執(zhí)行一系列的超步(SuperStep)直到整個計算結(jié)束俱济,這些SuperStep之間通過一些全局的同步點分隔;
  • 輸出計算結(jié)果。

??在每個SuperStep中聂喇,頂點上的計算都是并行的希太,每個頂點執(zhí)行相同的用于表達(dá)指定邏輯的用戶自定義函數(shù)。每個頂點都可以需修改自身以及出邊的狀態(tài)矾湃,接收前一個SuperStep發(fā)送給它的消息堕澄,并將計算的結(jié)果或信息發(fā)送給其他頂點蛙紫,這些信息會在下一個SuperStep中被目標(biāo)頂點接收。邊在這種計算模式中并不是核心對象丽涩,只用于表明消息傳遞的方向矢渊,沒有相應(yīng)的計算運行在其上枉证。詳細(xì)過程可以參考下圖,顯示了兩個SuperStep之間的內(nèi)容毡鉴。

SuperStep
2.1 Pregel模型狀態(tài)機(jī)

??算法結(jié)束的時機(jī)取決于所有的頂點是否均已經(jīng)達(dá)到halt狀態(tài)猪瞬。首先在剛開始的時候陈瘦,所有的頂點都處于active狀態(tài)潮售,所有的active頂點都會參與到SuperStep中的相應(yīng)計算酥诽。頂點通過將其自身的status設(shè)置成inactive來表示它已不再active,以此表明在下一次的SuperStep中咖驮,該頂點不再需要執(zhí)行相應(yīng)的計算。除非該頂點接收到其他頂點傳送的消息饰抒,否則Pregel框架不會再接下來的SuperStep中執(zhí)行該頂點的計算袋坑。如果頂點在接收到消息后進(jìn)入active狀態(tài)眯勾,那么在隨后的計算中該頂點必須顯式的deactive吃环。整個計算在所有頂點都達(dá)到inactive狀態(tài),并且沒有消息傳送時結(jié)束翅娶。整個狀態(tài)轉(zhuǎn)換如下圖所示好唯。


image.png
2.2 Pregel模型示例

??接下來展示一個以Pregel計算最大值的例子骑篙。假設(shè)圖中存在A/B/C/D四個頂點靶端,其中每個頂點的數(shù)據(jù)表示當(dāng)前頂點的值。在計算的每個SuperStep中)脏榆,每個頂點將接收其他頂點傳過來的值(初始SuperStep除外)姐霍,并判斷當(dāng)前頂點的值是否小于傳遞過來的值典唇。若小于介衔,更新當(dāng)前頂點的值骂因,并將該頂點狀態(tài)設(shè)置為active狀態(tài),同時將當(dāng)前頂點的最新值傳遞出去乘盼;若不小于绸栅,則什么都不做,并將當(dāng)前頂點的狀態(tài)設(shè)置為inactive蓖柔。直到所有的頂點狀態(tài)均變成inactive况鸣,計算結(jié)束竹观。整個過程入下圖所示。

image.png

以上圖為例,我們詳細(xì)介紹一下Pregel模型的執(zhí)行過程速址。

  • SuperStep0:初始SuperStep芍锚,不接收信息,只負(fù)責(zé)將當(dāng)前頂點的值傳遞出去默刚,并設(shè)置所有頂點狀態(tài)為active荤西。
  • SuperStep1: 頂點A接收的信息為6伍俘,將當(dāng)前頂點的值設(shè)置為6癌瘾,狀態(tài)設(shè)置為active,并將6作為消息發(fā)送給頂點B(頂點B下一輪迭代的時候會收到妇萄,當(dāng)前輪次并不會收到)冠句;頂點B接收的信息為3和2,均小于當(dāng)前頂點值6放典,不更新當(dāng)前頂點值基茵,并將頂點的狀態(tài)設(shè)置為inactive拱层;頂點C接收的信息為1,小于當(dāng)前頂點值2径缅,不更新當(dāng)前頂點值纳猪,并將頂點的狀態(tài)設(shè)置為inactive桃笙;頂點D接收信息為2和6搏明,將當(dāng)前頂點的值更新為6,狀態(tài)設(shè)置為active购笆,并將6作為消息發(fā)送給頂點C虚循;
  • SuperStep2:頂點A未接收到信息横缔,且狀態(tài)為inactive,什么都不做娃循;頂點B接收到頂點A上一個輪次發(fā)送的消息捌斧,由于當(dāng)前頂點值為6泉沾,不小于接收到的消息6跷究,因此不更新當(dāng)前頂點值,并將頂點的狀態(tài)設(shè)置為inactive丁存;頂點C接收到的消息為6解寝,當(dāng)前頂點值為2艘儒,將當(dāng)前頂點的值更新為6界睁,狀態(tài)設(shè)置為active翻斟,并將6作為消息發(fā)送給頂點B和D;頂點D未接收到信息敞斋,且狀態(tài)為inactive疾牲,什么都不做阳柔;
  • SuperStep3:頂點A未接收到信息,且狀態(tài)為inactive济锄,什么都不做荐绝;頂點B接收到頂點C上一個輪次發(fā)送的消息避消,由于當(dāng)前頂點值為6,不小于接收到的消息6监憎,因此不更新當(dāng)前頂點值婶溯,并將頂點的狀態(tài)設(shè)置為inactive迄委;頂點C未接收到任何信息,因此將狀態(tài)設(shè)置為inactive渔扎;頂點D接收到頂點C上一個輪次發(fā)送的消息赞警,由于當(dāng)前頂點值為6虏两,不小于接收到的消息6定罢,因此不更新當(dāng)前頂點值祖凫,并將頂點的狀態(tài)設(shè)置為inactive;
  • 所有頂點的狀態(tài)均為inactive遭庶,迭代停止稠屠,輸出結(jié)果权埠。

??以上就是圖計算模型Pregel的全部內(nèi)容攘蔽,以后有時間還會再詳細(xì)介紹其他幾種常見的圖計算模型,如GAS转捕。具體實現(xiàn)可以參見Flink Gelly提供的迭代計算模式瓜富。

2.3 Pregel框架的缺點

??Pregel模型雖然簡單降盹,那就是對于鄰居數(shù)很多的頂點蓄坏,它需要處理的消息非常龐大,所以對于符合冪律分布的自然圖结蟋,對于那些關(guān)聯(lián)關(guān)系非常多的頂點嵌屎,這種模型在計算的時候很容易崩潰恍涂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尼夺,一起剝皮案震驚了整個濱河市炒瘸,隨后出現(xiàn)的幾起案子顷扩,更是在濱河造成了極大的恐慌,老刑警劉巖扎阶,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乘陪,死亡現(xiàn)場離奇詭異啡邑,居然都是意外死亡井赌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進(jìn)店門戚绕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枝冀,“玉大人舞丛,你說我怎么就攤上這事」” “怎么了球切?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绒障。 經(jīng)常有香客問我,道長户辱,這世上最難降的妖魔是什么鸵钝? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮庐镐,結(jié)果婚禮上恩商,老公的妹妹穿的比我還像新娘。我一直安慰自己焚鹊,他們只是感情好痕届,可當(dāng)我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著末患,像睡著了一般研叫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上璧针,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天嚷炉,我揣著相機(jī)與錄音,去河邊找鬼探橱。 笑死申屹,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的隧膏。 我是一名探鬼主播哗讥,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胞枕!你這毒婦竟也來了杆煞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎决乎,沒想到半個月后队询,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡构诚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年蚌斩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片范嘱。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡送膳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出彤侍,到底是詐尸還是另有隱情肠缨,我是刑警寧澤逆趋,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布盏阶,位于F島的核電站,受9級特大地震影響闻书,放射性物質(zhì)發(fā)生泄漏名斟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一魄眉、第九天 我趴在偏房一處隱蔽的房頂上張望砰盐。 院中可真熱鬧,春花似錦坑律、人聲如沸岩梳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冀值。三九已至,卻和暖如春宫屠,著一層夾襖步出監(jiān)牢的瞬間列疗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工浪蹂, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留抵栈,地道東北人。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓坤次,卻偏偏與公主長得像古劲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子缰猴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容