ArangoDB(四)Pregel

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一样继续计算,直到所有节点都变成不活跃状态,整个计算过程结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值