【摘要】:GraphX采用点分割的方法对分布式图进行分区。用户可以在Graph.partitionBy函数中选取不同的图分割策略。尽管如此,用户可以很方便地在GraphX中将分割策略改为2D分割或者其他的分割方式。因为不是所有的划分都会包含边和边所相邻的所有点,所以我们在内部维护一个路由表,当进行triplets和mapReduceTriplets这些join操作时,可以很方便地确定点在哪一个划分中出现。路由表的具体表示如图4-10所示。
SparkGraphX是基于Spark的,那么GraphX如何进行图计算呢?就是进行图的分割。分割有两种方式,一种是对边进行分割(Edge Cut),另一种是对点进行分割(Vertex cut)。GraphX采用点分割的方法对分布式图进行分区。两种分割方式如图4-9所示。
图4-9 分区示意
以点分割的方式进行图的分割,既可以减少通信开销,也可以减少存储开销。逻辑上来说,就是将边分到一台机器上进行存储,而点被多台机器存储。精确的分配边的方法取决于分配策略,而且可以多次试探之后权衡策略,从而选出最适合自己的分配策略。用户可以在Graph.partitionBy函数中选取不同的图分割策略。在构建图的同时会默认选择初始化边的分区策略。尽管如此,用户可以很方便地在GraphX中将分割策略改为2D分割或者其他的分割方式。(www.xing528.com)
一旦边被分割,那么提高分布式图计算效率的关键就是如何将点的属性存储到边所在的机器上。因为在真实的情况下,边一般会比点的数量更多,所以我们采用的方式是将点的属性加到边上。因为不是所有的划分都会包含边和边所相邻的所有点,所以我们在内部维护一个路由表,当进行triplets和mapReduceTriplets这些join操作时,可以很方便地确定点在哪一个划分中出现。路由表的具体表示如图4-10所示。
图4-10 路由表
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。