1.1 GraphX应用背景
参考链接1:https://www.cnblogs.com/shishanyuan/p/4747793.html
参考链接2:https://blog.csdn.net/qq_37142346/article/details/82016770
Spark GraphX是一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求。
众所周知社交网络中人与人之间有很多关系链,例如Twitter、Facebook、微博和微信等,这些都是大数据产生的地方都需要图计算,现在的图处理基本都是分布式的图处理,而并非单机处理。Spark GraphX由于底层是基于Spark来处理的,所以天然就是一个分布式的图处理系统。
1.2 GraphX的框架
设计GraphX时,点分割和GAS都已成熟,在设计和编码中针对它们进行了优化,并在功能和性能之间寻找最佳的平衡点。如同Spark本身,每个子模块都有一个核心抽象。GraphX的核心抽象是Resilient Distributed Property Graph,一种点和边都带属性的有向多重图。它扩展了Spark RDD的抽象,有Table和Graph两种视图,而只需要一份物理存储。两种视图都有自己独有的操作符,从而获得了灵活操作和执行效率。
下面我们看一下图计算的简单示例:
2.2.2.4 图算法工具包
GraphX也提供了一套图算法工具包,方便用户对图进行分析。目前最新版本已支持PageRank、数三角形、最大连通图和最短路径等6种经典的图算法。这些算法的代码实现,目的和重点在于通用性。如果要获得最佳性能,可以参考其实现进行修改和扩展满足业务需求。另外,研读这些代码,也是理解GraphX编程最佳实践的好方法。
Pregel 简介
Pregel 是 Google 自 2009 年开始对外公开的图计算算法和系统, 主要用于解决无法在单机环境下计算的大规模图论计算问题。与其说 Pregel 是图计算的算法, 不如说它是一系列算法、模型和系统设计组合在一起形成的一套图模型处理方案。
1节点(Vertex)。在 Pregel 中,每个节点都有全局唯一的 ID
2边(Edge)。在 Pregel 中,每个边可以被 Assign 一个属性,这个属性可以是边的权值等信息
3消息(Message)。消息是 Pregel 计算模型的核心。每个 Vertex 在初始状态以及之后的每一个计算步骤当中都被 Attach 一个 Message 值作为 Vertex 当前的状态,算法的迭代通过 Vertex 之间互相发送的消息来完成
4超迭代(Superstep)。一个 Superstep 是 Pregel 在执行算法过程当中进行的一次迭代。 一次 Pregel 计算过程可能包括多个 Superstep
5在 Pregel 当中,Edge 一般是有向的。同时节点 Vertex 还存在 Active 和 Inactive 两种状态。 之后可以看到,节点的状态将会决定一些算法是否结束。
前面提到 Vertex 会有状态变化,这个概念也十分简单:
当一个 Vertex 在上一步当中没有接收到消息,或者算法自己决定不再向外发送消息,它可以被转变为 Inactive 的。 在 Pregel 的术语当中,这被称为 Vote to halt
当一个在之前已经 Inactive 的 Vertex 又接受到一条新的消息,它会在新的计算中转变为 Active 的状态
在大多数算法当中,所有的 Vertex 都进入 Inactive 状态就意味着算法结束。
参考链接:https://io-meter.com/2018/03/23/pregel-in-graphs/
Graphx的数三角形算法TriangleCount用于统计每个顶点所在的三角形个数。
1.1 简介
对网络图中进行三角形个数计数可以根据三角形数量反应网络中的稠密程度和质量。
1.2 应用场景
(一)用于社区发现
如微博中你关注的人也关注你,大家的关注关系中有很多三角形,说明社区很强很稳定,大家联系比较紧密;如果一个人只关注了很多人,却没有形成三角形,则说明社交群体很小很松散。
(二)衡量社群耦合关系的紧密程度
通过三角形数量来反应社区内部的紧密程度,作为一项参考指标。