总结一下目前对于专门的图处理框架GraphLab和Pregel是不适合处理这种natural graphs
主要的两大挑战是高纬度的点和低质量的分区策略。
本文提出的PowerGraph即是为了解决这2个问题而设计的,其中Power的意思就是密分布的意思。
下面就来介绍PowerGraph的详细设计细节:
PowerGraph的主要贡献或者说创新点可归结为以下两点:
第一,提出了GAS计算模型,将高维度的点进行并行化
第二是采用点切分策略,来保证整个集群的均衡性,该策略对大量密率图分区是非常高效的。
这里主要介绍一下GAS 模型
GAS Decomposition
顶点程序的通用模板大致如图所示,第一步收集邻居节点信息,第二步更新节点权值,如果还没有收敛,触发节点邻居再次运行顶点程序。
GAS分解过程如下,
Gather:收集邻居信息
先收集同一台机器的信息,然后对不同主机收集的信息进行汇总。得到最后的求和信息。
Apply:对中心点应用收集点的值,得到y一撇
Scatter(分散):更新邻居点和边,触发邻居点进行下一轮迭代。
那么就PowerGraph的GAP模型应用到RageRank算法中,是什么样的过程?
该公式中i表示目标节点,我们需要对这个节点求PageRank值,wij表示从j点到i点的权值,
Gather阶段,先求i所有邻居节点的权值,用户自定义一个sum操作,统计所有邻居节点的权值之和。
Apply阶段更新i点的权值,利用上一阶段的sum值加上一个偏置值,计算得到i的新的权值;
Scatter阶段如果i值被修改,就触发相应的邻居节点j重新计算。
当顶点按点切分方式被分到4台机器之后,在多个节点上指派一个为Master,其余的为Mirror。
Mirror上可以运行Gather程序来收集所有邻居的信息,并进行聚合计算(sum)后发送给Master。
Master上的Gather程序收集这些结果,最终将这个结果应用到Apply程序上,得到新的节点状态。然后通过Scatter程序将新的节点状态广播给各个Mirror,Mirror进而广播给各个邻居。