分布式图计算中的点切分和边切分

介绍点切分和边切分之前,我们先引入一个概念:Natural Graphs —实际应用中不同平台里产生的图,就像是新浪微博或者Twitter里的粉丝/follow关系图谱。

《分布式图计算中的点切分和边切分》 image.png

以上是一张密率度分布图,可以发现该分布图有明显的幂率现象。对于幂率现象,形象的解释是,只有少数明星的微博和twitter是有大量人关注的,同时大部分用户只有少部分的粉丝/follower。该幅图中,只有一个邻居点(粉丝)数量过10^8的节点,同时仅有的那1%的节点(大V用户),占据了整个图的50%的边(粉丝关系)。这些点被称为高纬度点。

《分布式图计算中的点切分和边切分》 image.png

能有奥巴马这样多粉丝的人,是极少的,但是又在整个图谱中占据极重要地位。大部分人的粉丝都寥寥无几。

《分布式图计算中的点切分和边切分》 image.png

高纬度点的切分,切分过后形成新的抽象。可以观察,边切分策略下节点是单一完整的,节点拥有所有邻居节点的信息,可以独立完成该一节点的程序运算。但是在节点切分策略下,每个节点看到的只有部分邻居节点,无法完成这个单点的完整计算。

《分布式图计算中的点切分和边切分》 image.png

在节点切分策略下,分布在不同的CPU或者机器上的节点如何对其进行编程?目前最具代表性的图计算方法,主要通过两种方式对图进行并行化抽象计算:
——使用消息 Pregel
——共享状态 GraphLab
GraphLab的方法简单却低效:序列化处理边,即便利所有相邻节点。
Pregel的方法是使用消息,处理高纬度点时单个worker会发送大量消息给邻居节点。
GraphLab的坏处是,会接触到图的大部分,且对于单台机器元数据量太大。此外,GraphLab共享状态为异步执行,需要大量锁操作。
对于Pregel来说,它同步执行但是容易产生Stragglers,即执行较慢的节点会拖累集群效率,即木桶的短板效应。

点切分和边切分的实例:

《分布式图计算中的点切分和边切分》 点切分和边切分的实例

如上,我们现在要将一个有4个顶点的图存储到3台机器上,这三台机器分别叫1,2,3。那么按照边切分的方式,这些边被切分在3台机器的分布如a图。 从图中可以看出,切分的过程中,总共有AB,BC,CD三条边被切开,保存到3台机器后,边的总数目由原来的3条,变成了6条,多了一倍,外加5个节点副本。第二种方式是点切分方式,同样是4个节点的图,我们将B、C节点切分开来。存储到3台机器后,得到b图,可以看出我们的边的数目还是3台,只多了两个节点的副本。当边的数量比节点数量大很多的情况下,这种两种切分方式差异会更加明显。

    原文作者:Nicky_Ye
    原文地址: https://www.jianshu.com/p/9c59f801963b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞