Giraph 簡介

前言

本文主要闡述了 Giraph 由來及其作用,並根據 Giraph 的系統架構和計算模型簡要介紹了 Giraph 的運行流程。

什麼是 Giraph

Giraph 是 Google 於 2010 年發佈的論文 Pregel: a system for large-scale graph processing 的開源實現。Giraph 是以 Hadoop 爲基礎開發的上層應用,其系統架構和計算模型與 Pregel 保持了一致。同時也在 Pregel 模型上增加了一些新的特性,如:out-of-core computation、edge-oriented input 等。Giraph 的目的是爲了解決大規模圖的分佈式計算問題。通過隱藏分佈式和並行計算的細節以及提供一套用於描述圖算法的 API,Giraph 不僅擁有了很好的可擴展性,還降低了分佈式圖計算的使用門檻。

系統架構

上圖藍色部分標識了 Giraph 的系統架構,可以看到 Giraph 實質上還是一個 Master/Slave 的架構,主要由三個部分構成:

  • Master

    Master 實質上運行在 Hadoop 的 MapTask 上, 其主要作用是對輸入圖進行分區、協調 Worker 的活動、維護一份存活的 Worker 列表(包括 Worker 的標識符、地址信息等)以及更新 Job 的狀態。

  • Worker

    與 Master 一樣,Worker 也運行在 Hadoop 的 MapTask 上,其主要作用是維護已分配圖的狀態。

  • Zookeeper

    在 Giraph 中 Zookeeper 的主要作用是 Master 選舉、命名服務以及協調服務。圖中顯示的 Zookeeper 是外置狀態,但實際上如果不給 Giraph 提供外置 Zookeeper,那麼 Giraph 將會在 Master 所在節點上自行啓動一個 Zookeeper 來提供服務。

計算模型

上圖顯示了 Giraph 的整個計算模型,主要由輸入、一系列 Superstep 迭代計算、輸出構成,其中這些 Superstep 被稱之爲 BSP(Bulk Synchronous Parallelism) 模型。

BSP 模型

BSP 模型是一個塊同步並行模型,其由許多個 Superstep 組成。對於 BSP 模型而言,其在 Superstep 內的操作是並行的,但在兩個 Superstep 之間則是由一個同步操作進行隔離的。也就是說 Superstep(N + 1) 會等待 Superstep(N) 執行完成之後纔會開始。

上圖顯示了 Superstep 的結構圖,一個 Superstep 由局部計算通訊柵欄同步 三個部分構成。可以看到即使有部分的計算比較快,但最終還是會在柵欄同步這裏停下等待其餘的計算完成。在圖計算中應用這種模型的好處是:可以解決圖計算的同步問題,同步模型有利於推斷程序語義(即利於編程),並且消除了死鎖和數據競爭的問題。

計算過程

在這裏插入圖片描述

上圖展示了一個計算圖中頂點最大值的過程,其中深色的頂點表示本次 Superstep 結束之後將自己標記爲不活躍狀態(即不再需要進行計算),當所有頂點均處於不活躍狀態的時候即表明計算結束。下面針對各個 Superstep 進行分析:

  • Superstep0

    Superstep0 時所有的頂點處於活躍狀態並沿出邊發送其頂點值

  • Superstep1

    Superstep1 時每個頂點處理 Superstep0 發來的頂點值,第一、四個頂點[從左往右計數]發現有更大的頂點值 6,所以更新其頂點值爲 6 ,並沿出邊發送更新之後的頂點值。而第二、三個頂點發現並沒有比它們頂點值更大的頂點值,因此兩個頂點將自身標記爲不活躍狀態。

  • Superstep2

    Superstep2 時由於第二個頂點收到了 Superstep1 發送過來的頂點值,所以系統會將第二個頂點標記爲活躍狀態然後去處理接收到的頂點值,但第二個頂點依舊發現沒有比它更大的頂點值,所以會再次標記自己爲不活躍狀態。第一、四個頂點由於沒有接收到 Superstep1 發來的頂點值,所以會將其標記爲不活躍狀態。第三個頂點在處理 Superstep1 發來的頂點值時,發現了比它更大的頂點值 6,所以會進行更新然後沿出邊發送更新之後的頂點值。

  • Superstep3

    Superstep3 階段只有第二、四頂點接收到了 Superstep2 發來的頂點值,所以跟 Superstep2 中處理方式一致,系統先標記爲這兩個頂點爲活躍狀態,頂點比較接收的頂點值之後將自身標記爲不活躍狀態。至於第一、四頂點因爲處於不活躍狀態且沒有收到上一個超步接收到的頂點值,所以不會進行處理從而依舊保持不活躍狀態。至此整個計算過程就結束了。

運行流程

在瞭解了 Giraph 的系統架構和計算模型之後,這裏簡單介紹一下 Giraph 的整個運行流程:

  1. Giraph 向 Hadoop 提交 Job 之後,Zookeeper 將會選出一個 MapTask 作爲 Giraph 的 Master,其餘的 MapTask 則作爲 Worker。然後這些 Worker 會通過 Zookeeper 命名服務找到 Master,並向 Master 進行註冊。
  2. Master 將會對輸入圖進行分區,併發送分區信息給 Worker,Woker 會對分區進行讀取,期間可能會發生 Worker 之間的分區交換。
  3. 之後 Master 會開始協調 Worker 迭代執行 Superstep,Worker 將會在 Superstep 中完成頂點的計算過程,直到所有的頂點處於不活躍狀態之後結束計算。
  4. 在計算結束之後,Giraph 將會根據用戶指定的格式輸出結果。

總結

上述簡要介紹了 Giraph 的核心知識,即架構和計算模型。但除此之外,Giraph 中還有重要的優化和容錯機制尚未介紹,這些都需要後續學習的時候進行整理分析。

Thanks

  1. Pregel: a system for large-scale graph processing
  2. Pregel(圖計算)技術原理
  3. BSP模型的相關講解
  4. 從BSP模型到Apache Hama
  5. Introduction to Apache Giraph
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章