GraphX pregel接口
来源:互联网 发布:多线程socket编程java 编辑:程序博客网 时间:2024/06/06 19:27
1.首先介绍一下以节点为中心的编程模型(Pregel)和GAS编程模型。
1.1以节点为中心的编程模型
以节点为中心的编程模型(Vertex-Centered ProgrammingModel)首先由Pregel系统提出,之后的绝大多数离线挖掘累大规模图计算系统都是采用这个模型为编程模型。
对于图G=(V,E)来说,以节点为中心的编程模型将图节点的vertex看做计算的中心,应用开发者可以自定义一个与具体应用密切相关的节点更新函数Function(vertex),这个函数可以获取并改变图节点vertex及与其有关联的边的权值,甚至可以公国增加和删除边来改变图结构。对于所有途中的节点斗志性节点更新函数Function(vertex)来对图的状态(包括节点信息和边信息)进行转换,如此反复迭代进行,直到达到一定的停止标准为止。典型的图节点更新函数Function(vertex)基本遵循如下逻辑:
即首先从vertex的入边和出边收集消息,对这些信息经过针对节点权值的函数f变换后,将计算得到的值更新vertex的权值,之后以节点的新权值和边原先的权值作为输入;通过针对边的函数g()进行变换,变换后的值用来依次更新部分图状态的目的。
以节点为中心的编程模型有很强的表达能力。研究表明,很多类型的问题都可以通过这个编程模型来进行表达,比如很多图挖掘,数据挖掘,机器学习甚至是线性代数的问题都可以以这种编程模型来获得解决。这也是为何以图节点为中心的编程模型流行的原因。
1.2GAS编程模型
GAS模型可以看做是对以节点为中心的图计算编程模型的一种细粒度改造,通过将计算过程进一步细分来增加计算的并发性。GAS模型明确的将以节点为中心的图计算模型的节点更新函数Function(vertex)划分为三个连续的处理阶段:信息收集阶段(Gather),应用阶段(Apply)和分发阶段(Scatter)。通过这种明确的计算阶段划分,可以使原来的一个完整计算流程划分,这样在计算过程中可以讲各个子处理阶段并发执行来增加系统的并发处理性能。
这里假设当前要进行计算的节点时u,以此为基础来说明GAS模型。在信息收集阶段,将u节点的所有邻接节点和相连的边上的信息通过一个累加函数收集起来:
通过以上三个阶段,可以定义以图节点为中心的高度抽象的GAS计算模型,在GAS模型中,节点的入边和出边在信息收集和分发阶段如何使用取决于具体的应用,比如在PageRank中,信息收集阶段只会考虑入边的信息,分发阶段只会考虑出边的信息,但是在类似FaceBook的社交关系图中,如果边表达的语义是朋友关系,那么信息收集和分发阶段则是所有的边的信息都会考虑在内。
2.Graphx 中的Pregel接口,并不严格遵循Pregel模式,他是一个参考GAS改进的Pregel模式。定义如下:
这种基于MrTriplet方法的Pregel模式,与标准的Pregel的最大区别是,它的第二段参数体接受的是三个函数参数,而不是messageList。它不会在单个顶点上进行消息的遍历,而是将顶点的多个Ghost副本收到的消息聚合后,发送给Master副本,再使用vprog函数来更新顶点的值。消息的接受和发送都被自定并行化处理,无需担心超级节点的问题。常见的模板代码如下:
在上方的函数中,mergeMsg是发生在vprog函数之前的。这样,我们可以自定义消息的合并熟顺序。例如,如果我们有两个list的消息,分别为List1(A1,A2,A3)和list2(B1,B2,B3)。我们可以在mergeMsg中先合并每一个list中的消息,这样master节点(vprog)函数将收到两个消息,在vprog中将再去将这两个消息合并。这种做法可以避免在mergeMsg阶段将list1和list2两个列表中的消息进行合并,从而实现自定义消息合并顺序。
可以看到,GraphX设计这个模式的用意。它综合了Pregel和GAS两者的优点,即接口相对简单,又能保证性能,可以应对点分割的图存储模式,胜任符合幂率分布的自然图的大型计算。另外,值得注意的是,官方的Pregel版本是一个最简单的版本。对于复杂的业务场景,根据这个版本扩展一个定制的Pregel是一种很常见的用法。
参考文献:
1. 大数据图数据库之离线挖掘计算模型
2.Spark入门实战系列--9.Spark图计算GraphX介绍及实例
0 0
- GraphX pregel接口
- 并行图计算: GraphX 的 pregel 接口
- graphx之pregel模型
- GraphX Pregel实例实现
- pregel 与 spark graphX 的 pregel api
- graphx中Pregel函数详解
- graphx中Pregel函数详解
- graphX+pregel入门初使用
- Spark的Graphx学习笔记--Pregel
- graphx操作实例09-Pregel学习
- 关于Graphx中的pregel的API理解
- GraphX中Pregel单源点最短路径
- 毕设第二周(GraphX环境搭建 GraphX API 以及对Pregel的熟悉)
- Pregel
- pregel
- GraphX主要的接口详解
- 毕设第三周(Pregel in GraphX以及Shortest Path)
- Spark组件之GraphX学习9--使用pregel函数求单源最短路径
- JAVA面向对象 Part01 零碎知识点总结
- Qtudp组播编程
- 【题解】codeforces778C Peterson Polyglot
- 八大排序算法 java
- 热修复比较
- GraphX pregel接口
- Vegetable and Road [并查集]
- HDOJ题目分类
- opencv,图像处理,rgb转换为hsv空间
- 浅谈C/C++中运算符的优先级、运算符的结合性以及操作数的求值顺序
- 2017年3月4号。
- Dijistra求最短路(邻接表存储,前向星存储,堆优化)
- poj 1860 Bellman算法
- FastCGI和php-fpm的区别