ArangoDB(四)Pregel

article/2025/9/7 10:47:58

arango pregel.status()返回值

localhost:8529@_system> pregel.status(1099521660554)
{"state" : "done","gss" : 7,"totalRuntime" : 8.389497518539429,"aggregators" : {},"sendCount" : 392647,"receivedCount" : 392647,"vertexCount" : 1243072,"edgeCount" : 274916
}

state:运行状态

gss:执行的全局迭代数量

totalRuntime:算法总运行时长

aggregators:全局通信、监控和数据查看的机制,所产生的值,在下一次迭代中可以看到

sendCount:发送的消息总数(一次迭代完成后,发送消息给其他的顶点)

receivedCount:接收的消息总数(在下一次迭代时,顶点会接收其他顶点发送来的消息)

vertexCount:处理顶点的总数

edgeCount:处理边的总数

pregel的工作原理

pregel是一种迭代计算的计算模型,每个顶点会保存一个当前顶点的状态信息(包括顶点当前值、出边列表、接收到的消息队列、状态标记)。

每次迭代过程中会对当前活跃状态的所有顶点使用相同的算法进行计算;当迭代完成后根据计算结果会修改当前顶点的状态信息,并发送消息给其他的顶点;其他顶点接收到消息后,会在下一次迭代中进行计算,依次类推,直到所有顶点的状态都不活跃,算法才结束。

pregel详细说明

ArangoDB的pregel组件是基于Pregel计算模型来实现的。

Pregel是Google提出的大规模分布式图计算平台,专门用来解决网页链接分析、社交数据挖掘等实际应用中涉及的大规模分布式图计算问题。

Pregel计算模型是以顶点为中心,基于消息传递的并行图处理系统。

工作原理:

顶点的状态信息包括:
1、顶点的当前值
2、以该顶点为起点的出射边列表,每条出射边包含了目标顶点ID和边的值
3、消息队列,包含了所有接收到的、发送给该顶点的消息
4、标志位,用来标记顶点是否处于活跃状态

在每个超步中,对每个顶点进行遍历,并调用顶点上的Compute()函数,在调用时,会把以下三个参数传递进去:
1、该顶点的当前值
2、一个接收到的消息的迭代器
3、一个出射边的迭代器(本超步完成后要沿着本顶点的所有出射边发生消息给其他目标顶点)

在Pregel中,为了获得更好的性能,“标志位”和输入消息队列是分开保存的:

1、对于每个顶点而言,Pregel只保存一份顶点值和边值,但是,会保存两份“标志位”和输入消息队列,分别用于当前超步和下一个超步

2、在超步S中,当一个Worker在进行顶点处理时,用于当前超步的消息会被处理,同时,它在处理过程中还会接收到来自其他Worker的消息,这些消息会在下一个超步S+1中被处理,因此,需要两个消息队列用于存放作用于当前超步S的消息和作用于下一个超步S+1的消息

3、如果一个顶点V在超步S接收到消息,那么,它表示V将会在下一个超步S+1中(而不是当前超步S中)处于“活跃”状态

超步示意图:
在这里插入图片描述

  • 在每个超步S中,图中的所有顶点都会并行执行相同的用户自定义函数。
  • 每个顶点可以接收前一个超步(S-1)中发送给它的消息,修改其自身及其出射边的状态,并发送消息给其他顶点,甚至是修改整个图的拓扑结构。
  • 在这种计算模式中,“边。”并不是核心对象,在边上面不会运行相应的计算,只有顶点才会执行用户自定义函数进行相应计算。

简单说pregel的计算过程就是:

每个顶点会维护一个顶点状态信息:顶点当前值,出射边列表,消息队列,标记位。

  • 顶点当前值

  • 出射边列表,维护一个边和一个顶点,当计算结束后,给哪些顶点发送消息。

  • 消息队列是上一次迭代时发送给该顶点的消息。

  • 如果上一次迭代有发送给该顶点的消息,则在本次迭代中,该顶点处于活跃状态。

每次迭代中,每次活跃的顶点都执行相同的函数Compute(),该函数读取上一次迭代的消息队列,执行相应计算后,修改顶点和出射边的状态,然后沿着出射边发送消息给其他顶点。

这些消息将会在下一个超步(S+1)中被目标顶点接收,然后像上述过程一样开始下一个超步(S+1)的迭代过程。

在Pregel计算过程中,一个算法什么时候可以结束,是由所有顶点的状态决定的。(当所有顶点都处于inactive状态时,算法才结束)

Aggregator:
Aggregator提供了一种全局通信、监控和数据查看的机制。

在一个超步S中,每一个顶点都可以向一个Aggregator提供一个数据,Pregel计算框架会对这些值进行聚合操作产生一个值,在下一个超步(S+1)中,图中的所有顶点都可以看见这个值。

计算过程
Pregel中的计算分为一个个“superstep”,这些”superstep”中执行流程如下:
1、 首先输入图数据,并进行初始化。
2、 将每个节点均设置为活跃状态。每个节点根据预先定义好的sendmessage函数,以及方向(边的正向、反向或者双向)向周围的节点发送信息。
3、 每个节点接收信息如果发现需要计算则根据预先定义好的计算函数对接收到的信息进行处理,这个过程可能会更新自己的信息。如果接收到消息但是不需要计算则将自己状态设置为不活跃。
4、 每个活跃节点按照sendmessage函数向周围节点发送消息。
5、 下一个superstep开始,像步骤3一样继续计算,直到所有节点都变成不活跃状态,整个计算过程结束


http://chatgpt.dhexx.cn/article/28fT6bpU.shtml

相关文章

graphx中的pregel原理详解

优秀参考: graphx教程参考:https://www.jianshu.com/p/ad5cedc30ba4 pergel函数详细讲解:https://blog.csdn.net/hanweileilei/article/details/89764466 迪杰斯特拉原理简介:https://www.jianshu.com/p/ad5cedc30ba4 ps: 以最…

Pregel模型

简介 在Hadoop兴起之后,google又发布了三篇研究论文,分别阐述了了Caffeine、Pregel、Dremel三种技术,这三种技术也被成为google的新“三驾马车”,其中的Pregel是google提出的用于大规模分布式图计算框架。主要用于图遍历&#xf…

Spark Graphx Pregel(pregel参数详解,pregel调用实现过程的详细解释)

Spark Graphx Pregel 一.Pregel概述1.什么是pregel?2.pregel应用场景 二.Pregel源码及参数解释1.源码2.参数详细解释(1)initialMsg(2)maxIteration(3)activeDirection(4)…

2020.11.26课堂笔记(sparkGraphx算法之pregel)

参考博客:https://blog.csdn.net/hanweileilei/article/details/89764466 大佬博客写的很详细,不用继续看这篇了,随便写一些记录一下。 Pregel框架: Pregel是一种面向图算法的分布式编程框架,采用迭代的计算模型&…

Pregel(图计算)技术原理

图计算简介 图结构数据: 许多大数据都是以大规模图或网络的形式呈现。许多非图结构的大数据,也常常会被转换为图模型后进行分析。图数据结构很好地表达了数据之间的关联性。关联性计算是大数据计算的核心——通过获得数据的关联性,可以从噪…

python bar函数

bar(left, height, width, color, align, yerr)函数:绘制柱形图。left为x轴的位置序列,一般采用arange函数产生一个序列;height为y轴的数值序列,也就是柱形图的高度,一般就是我们需要展示的数据;width为柱形…

C++ 函数模板

函数模板是通用的函数描述,它们使用泛型来定义函数,其中的泛型可用具体的类型替换。通过将类型作为参数传递给模板,可使编译器生成该类型的函数。由于模板允许以泛型(而不是具体类型)的方式编写程序,因此有…

lead窗口函数

lead函数在Impala中可以配合over使用,lead函数有三个参数 lead(property,num,default) 第一个参数「property」标识想查询的列,「num」标识相对于当前行的第num行,第三个参数是默认值。 举例: -- 建表 CREATE TABLE test(id s…

C++ 仿函数

文章目录 1.由来2.定义3.实例参考文献 1.由来 我们先从一个非常简单的问题入手,来了解为什么要有仿函数。 假设我们现在有一个数组,数组中存有任意数量的数字,我们希望能够统计出这个数组中大于 10 的数字的数量,你的代码很可能…

心形函数的几种表达式

用两个函数表示: f(x)sqrt(1-(abs(x)-1)^2) h(x)-2*sqrt(1-0.5*abs(x)) 也可以根据图中的q(x)画出心形的内部: q(x)(f(x)-h(x))/2*cos(200*x)(f(x)h(x))/2 带入得: 用一个函数表示,我拟合了很久才画出来的: f(x)…

共轭函数

共轭函数在最近火的不行的Gan生成对抗神经网络进阶版本的数学推理中有着神奇的作用,因此在这边记录下。 共轭函数的定义为: f ∗ ( t ) max ⁡ x ∈ dom ⁡ ( f ) { x t − f ( x ) } f ^ { * } ( t ) \max _ { x \in \operatorname { dom } ( f ) }…

高斯函数解析

高斯函数广泛应用于统计学领域,用于表述正态分布,在信号处理领域,用于定义高斯滤波器,在图像处理领域,二维高斯核函数常用于高斯模糊,在数学领域,主要用于解决热力方程和扩散方程。 https://blo…

PostgreSQL 函数

PostgreSQL 函数 函数的定义 使用函数,可以极大的提高用户对数据库的管理效率。函数表示输入参数表示一个具有特定关系的值。 一、数学函数 绝对值函数、三角函数、对数函数、随机函数等,当有错误产生时,数学函数会返回null值。 二、函数…

EXCEL IFS函数简单使用

IFS函数的使用: 在学生成绩以及绩效考核中,我们需要对每个范围的成绩打分。比如【A】,【B】,【C】,【D】。可以使用【IFS()函数】完成操作。 1:选择单元格【C2】,输入【】,点击【fx】,弹出【插入函数】对话…

函数的返回值

1.什么是函数的返回值? print 和 return 的区别,print 仅仅是打印在控制台,而 return 则是将 return 后面的部分作为返回值作为函数的输出 可以用变量接走,继续使用该返回值做其它事 函数需要先定义后调用,函数体中 return 语句的结果就是返回值 如果一个函数没有 reutrn…

反双曲函数

Chapter10:反双曲函数 10.3 反双曲函数10.3.1 反双曲正弦函数【 yarsinh(x) 】反双曲正弦函数图像反双曲正弦函数的指数形式反双曲正弦函数的对数形式推导反双曲正弦函数的导数推导 10.3.2 反双曲余弦函数【 yarcosh(x) 】反双曲余弦函数图像反双曲余弦函数的指数形…

损失函数作用

前言:损失函数是机器学习里最基础也是最为关键的一个要素,通过对损失函数的定义、优化,就可以衍生到我们现在常用的机器学习等算法中 损失函数的作用:衡量模型模型预测的好坏。 正文: 首先我们假设要预测一个公司某商品…

Python自定义函数

一、自定义函数的固定语句 def contrast(a,b) : #使用def来定义一个名称为contrast的方法,a与b的值是两个变量,称为形参if a>b : #使用条件语句进行判定return a #返回a的值elif b>a :return b #返回b的值else:return (ab) …

可测函数

1 定义 可测函数:设是定义在可测集上的实函数,称为上的可测函数,如果满足: a])=b_{a})" class="mathcode" src="https://private.codecogs.com/gif.latex?%5Cforall%20a%5Cin%20R%2C%20%7Ca%7C%20%3C%20+%5Cinfty%2C%5Cexists%20b_%7Ba%7D…

虚函数详解

文章目录 一、多态与重载1、多态的概念2、重载---编译期多态的体现3、虚函数---运行期多态的体现 二、虚函数实例三、虚函数的实现(内存布局)1、无继承情况2、单继承情况(无虚函数覆盖)3、单继承情况(有虚函数覆盖&…