標籤:大資料 系統架構 儲存 圖資料庫
節選自《大資料日知錄:架構與演算法》十四章,書籍目錄在此
對于海量待挖掘資料,在分散式運算環境下,首先面臨的問題就是如何將資料比較均勻地分配到不同的伺服器上。對於非圖資料來說,這個問題解決起來往往比較直觀,因為記錄之間獨立無關聯,所以對資料切分演算法沒有特別約束,只要機器負載儘可能均衡即可。由於圖資料記錄之間的強耦合性,如果資料分區不合理,不僅會造成機器之間負載不均衡,還會大量增加機器之間的網路通訊(見圖14-5),再考慮到圖挖掘演算法往往具有多輪迭代啟動並執行特性,這樣會明顯放大資料切片不合理的影響,嚴重拖慢系統整體的運行效率,所以合理切分圖資料對於離線挖掘類型圖應用的運行效率來說非常重要,但是這也是至今尚未得到很好解決的一個潛在問題。
對於圖資料的切片來說,怎樣才是一個合理或者是好的切片方式?其判斷標準應該是什嗎?就像上面的例子所示,衡量圖資料切片是否合理主要考慮兩個因素:機器負載平衡以及網路通訊總量。如果單獨考慮機器負載平衡,那麼最好是將圖資料儘可能平均地分配到各個伺服器上,但是這樣不能保證網路通訊總量是儘可能少的(參考圖14-5右端切割方式,負載比較均衡,但是網路通訊較多);如果單獨考慮網路通訊,那麼可以將密集連通子圖的所有節點儘可能放到同一台機器上,這樣就有效地減少了網路通訊量,但是這樣很難做到機器之間的負載平衡,某個較大的密集連通子圖會導致某台機器高負載。所以,合理的切片方式需要在這兩個因素之間找到一個較穩妥的均衡點,以期系統整體效能最優。
下面介紹兩類從不同出發點切割圖資料的方法,並分別介紹典型的具體切分演算法及其對應的數學分析,首先需要強調一點:在選擇具體的切分演算法時並非越複雜的演算法越可能在實際系統中被採納,讀者可以思考其中的道理,在後面會給出解答。
14.3.1 切邊法(Edge-Cut)
現在面臨的問題是:給定一個巨大的圖資料和p台機器,如何將其切割成p份子圖?解決這個圖切割問題有兩種不同的思路。
切邊法代表了最常見的一種思路,切割線只能穿過串連圖節點的邊,通過對邊的切割將完整的圖劃分為p個子圖。圖14-6代表將7個節點的圖分發到3台機器上,左端展示了切邊法方式,圖節點的編號代表節點被分發到的機器編號。
通過切邊法切割後的圖資料,任意一個圖節點只會被分發到一台機器,但是被切割開的邊資料會在兩台機器中都儲存,而且被切割開的邊在圖計算的時候意味著機器間的遠程通訊。很明顯,系統付出的額外儲存開銷和通訊開銷取決於被切割開的邊的數量,圖切割時通過的邊越多,則系統需額外承載的儲存開銷和通訊開銷越高。
前文有述,衡量圖資料分區合理與否有兩個考慮因素:負載平衡和機器通訊量,所以對於切邊法來說,所有具體的切割演算法追求的目標不外是:如何在儘可能均衡地將圖節點分配到叢集中的不同機器上這一約束下,來獲得最小化切割邊數量。
即在每台機器被分發到的節點儘可能均勻的條件約束下,求切割邊最少的方法。其中,|V|/p代表所有的節點被p台機器均分所得數值,l≥1代表不平衡調節因子,通過調節l的大小可以控制節點分配的均勻度,當其值為1時,要求完全均分,其值越大,允許的不均衡程度越高。
從上述形式化描述可以看出,lamda約等於1的時候,這個問題本質上是一個圖切割中的均衡p路分區(Balanced p-way Partitioning)問題,解決這個問題有很多相關研究(有興趣的讀者可以閱讀本章參考文獻[4]),但是由於圖切割演算法的時間複雜度較高,基本不太適合處理大規模資料,所以在真實的大規模資料情境下很少被採用。
在實際的圖計算系統中,經常使用的策略是節點隨機均分法,即通過雜湊函數將節點均分到叢集的各個機器中,並不仔細考慮邊切割情況。Pregel和GraphLab都採用了這種策略。這種方法的優點是快速、簡單且易實現,但是從定理14.1可以證明這種方法會將圖中絕大多數的邊都切開。
由定理14.1可知,假設叢集包含10台機器,則被切割的邊比例大約為90%,即90%的邊會被切開,而如果包含100台機器,則99%的邊會被切開。可見,這種切分方式是效率很低的一種。
14.3.2 切點法(Vertex-Cut)
切點法代表另外一種切割圖的不同思路。與切邊法不同,切點法在切割圖的時候,切割線只能通過圖節點而非邊,被切割線切割的圖節點可能同時出現在多個被切割後的子圖中。圖14-6右側是切點法,可看出,圖中心的節點被切割成三份,也就是意味著這個節點會同時出現在被切割後的三個子圖中。
與切邊法正好相反,切點法切割後的圖中,每條邊只會被分發到一台機器上,不會重複儲存,但是被切割的節點會被重複儲存在多台機器中,因此,同樣存在額外儲存開銷。另外,如此切割帶來的問題是:圖演算法在迭代過程中往往會不斷更新圖節點的值,因為某個節點可能儲存在多台機器中,也即存在資料多副本問題,所以必須解決圖節點值資料的一致性問題。對這個問題,在後面講解PowerGraph系統時,會給出一種典型的解決方案。
那麼,既然切點法圖中的邊都沒有被切割,機器之間是否就無須通訊開銷了呢?事實並非如此,在維護被切割的圖節點值資料一致性時仍然會產生通訊開銷。所以,對於切點法來說,所有具體演算法追求的合理切分目標是:如何在儘可能均勻地將邊資料分發到叢集的機器中這個約束條件下,最小化被切割開的圖節點數目。
即在每台機器被分發到的邊儘可能均勻的條件約束下,求平均副本數最少的方法。其中,|E|/p代表所有邊被p台機器均分所得數值,l≥1代表不平衡調節因子,通過調節l的大小可以控制邊分配的均勻度,當其值為1時,要求完全均分,其值越大,允許的不均衡程度越高。
同樣,由於採用複雜圖切割演算法的時間複雜度太高,所以實際系統中最常用的還是邊隨機均分
現實世界中的大多數圖的邊分布都遵循power law法則,理論和實踐已經證明,對於遵循這一法則的圖資料來說,屬於切點法的邊隨機均分法要比切邊法裡的節點隨機均分法強,其計算效率要高出至少一個數量級。所以總體而言,對於一般情形的圖資料,採取切點法要明顯優於切邊法。
請思考:為何不是越複雜、有效切分演算法越受歡迎?
解答:一般來說,圖挖掘演算法分為兩個階段。
階段一:集中式圖資料切分與分發;階段二:分布式圖計算。
如果採用複雜的圖切割演算法,則系統負載平衡好,機器間通訊量較少,所以第二階段啟動並執行效率高,但是採用複雜演算法不僅開發成本高,在第一階段付出的時間成本也很高,甚至因此付出的時間成本要高於在第二階段產生的效率收益,所以選擇何種切分演算法也需要有全域的效率權衡。
大資料圖資料庫之資料分區