大数据图数据库之数据分片
節選自《大數據日知錄:架構與算法》十四章,書籍目錄在此
??????? 對于海量待挖掘數據,在分布式計算環境下,首先面臨的問題就是如何將數據比較均勻地分配到不同的服務器上。對于非圖數據來說,這個問題解決起來往往比較直觀,因為記錄之間獨立無關聯,所以對數據切分算法沒有特別約束,只要機器負載盡可能均衡即可。由于圖數據記錄之間的強耦合性,如果數據分片不合理,不僅會造成機器之間負載不均衡,還會大量增加機器之間的網絡通信(見圖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法則,理論和實踐已經證明,對于遵循這一法則的圖數據來說,屬于切點法的邊隨機均分法要比切邊法里的節點隨機均分法強,其計算效率要高出至少一個數量級。所以總體而言,對于一般情形的圖數據,采取切點法要明顯優于切邊法。
請思考:為何不是越復雜、有效的切分算法越受歡迎?
解答:一般來說,圖挖掘算法分為兩個階段。
階段一:集中式圖數據切分與分發;階段二:分布式圖計算。
如果采用復雜的圖切割算法,則系統負載均衡好,機器間通信量較少,所以第二階段運行的效率高,但是采用復雜算法不僅開發成本高,在第一階段付出的時間成本也很高,甚至因此付出的時間成本要高于在第二階段產生的效率收益,所以選擇何種切分算法也需要有全局的效率權衡。
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生
總結
以上是生活随笔為你收集整理的大数据图数据库之数据分片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《大数据日知录:架构与算法》前言
- 下一篇: linux cmake编译源码,linu