分布式图处理系统--Pregel

article/2025/9/7 10:46:24

介绍分布式图处理系统–Pregel以及其开源实现–Giraph

图数据处理简介

图数据的应用

图数据

  • 数据本身以图的形式呈现
    • 社交网络
    • 传染病传播途径
    • 交通路网
  • 某些非图结构的数据,也可以转换为图模型后进行处理
    • 网页链接
    • 机器学习训练数据

关联性分析

  • 图数据结构表达了数据之间的关联性
  • 通过获得数据的关联性,抽取有用的信息
    • 购物通过为购物者之间的关系建模,就能很快找到口味相似的用户,并为之推荐商品
    • 图在社交网络中,通过传播关系发现意见领袖

图数据处理解决方案

  1. 使用单机的图算法库
    • BGL、LEAD、NetworkX、JDSL、StandfordGraphBase和FGL等
    • 如何运行大规模的图?
  2. 单机算法实现相应的分布式
    • 通用性不好,每个算法都需要重写
  3. 并行图计算系统
    • Parallel BGL和CGM Graph,实现了很多并行图算法
    • 对大规模分布式系统容错等没有很好的支持
  4. 基于现有分布式数据处理系统进行图计算
    • 使用MapReduce/Spark/FlinkAPI编写图算法
    • 编写困难,系统未针对图计算进行优化

图处理系统

图数据库:

  • 基于遍历算法的数据存储、用于实时图查询
    • Neo4j、OrientDB、DEX和Infinite Graph

图处理系统:

  • 以图顶点为中心的计算、用于离线图分析
  • 基于消息传递的并行引擎:如GoldenOrb、Pregel/Giraph
  • 利用Dataflow系统构建的工具包:MapReduceHama、Spark GraphX、FlinkGelly

Pregel/Giraph系统

计算模型

  • 基于BSP模型实现的分布式图处理系统
    • 一套可扩展的、有容错机制的平台
    • 提供一套灵活的API,描述图计算,比如图遍历、最短路径、PageRank计算等
  • 注意,Giraph是利用MapReduce开源框架实现,不是基于MapReduce API计算

图结构

  • 顶点
    • 顶点ID:唯一标识
    • 自定义值:存储顶点的“状态值”
      • 例如PageRank、最短路径中的属性值
    • 和其源顶点关联,并记录了其目标顶点ID
    • 边上有一个可修改的用户自定义值与之关联

图算法共性

共性:顶点给邻居传递消息,不断进行更新,此过程迭代,直到最终收敛

  • 集中式算法:限制参与运算的顶点,例如Dijkstra总是挑最近的顶点加入source
  • 分布式算法:所有顶点同时参与运算

BSP模型

  • 一系列全局超步(superstep)
    • 局部计算:每个参与的处理器独立计算
    • 通讯:处理器群相互交换数据
    • 栅栏同步(Barrier Synchronization):等到其他所有处理器完成计算,再继续下一个超步

Vertex-centric计算模型

  • “边”并不是核心对象,在边上面不会运行计算,只有顶点才会执行用户自定义函数进行相应计算
  • 顶点的状态
    • 活跃active:该顶点参与当前的计算
    • 非活跃inactive:该顶点不执行计算,除非被其他顶点发来的消息激活
    • 当一个非活跃状态的顶点收到来自其他顶点的消息时,Pregel计算框架根据条件判断是否将其显式唤醒进入活跃状态
  • 什么时候结束
    • 当所有顶点都是非活跃状态的时候

编程模型

  • Compute()
    • 用户定义的计算函数
  • SendMessageTo()
    • 消息传递给哪些顶点
    • 通常给邻居节点发送
  • Combiner
    • 将发往同一顶点的多个消息合并成一个消息,减少了传输和缓存的开销
    • 与Hadoop中的Combiner作用相同
  • Aggregator
    • 一种全局通信、监控和数据查看的机制
      • 超步S中,每个顶点都可以向某个Aggregator提供数据,Pregel计算框架对这些值进行聚合操作产生一个值
      • 超步S+1中,所有顶点都可以看见这个值
    • 例如,可以用来求图中边数

体系结构

  • Master:协调各个Worker执行任务
  • Worker:维护图的状态信息,负责计算
  • BSP计算模型
    • 计算:worker自身
    • 通讯:worker之间
    • 同步:master

Worker

Worker内部

  • 维护图顶点的描述信息
    • 一般保存在内存中
    • 包括顶点的当前值
    • 以该顶点为起点的初射列表,每条出射边包含了目标顶点ID和边的值
  • 执行图顶点上的计算:Compute()
    • 在每个超步中,Worker会对自己所管辖的分区中的每个顶点进行遍历,并计算
  • 管理图顶点的控制信息
    • 需要存两份(接收的队列,发送的队列)!
    • 输入消息队列:接收到、发送给顶点的消息,
      • S已经接收到的消息(来自于S-1),S中需要处理
      • S中接收到来自其他Worker的消息,S+1处理
    • 标志位:用来标记顶点是否活跃状态
      • S中标记顶点是否活跃
      • S中记录顶点在S+1是否活跃

Worker之间

  • 消息传输:SendMessageTo()
  • 发送消息前会首先判断目标顶点U是否位于本地(根据内部描述信息)
    • 本地:直接把消息放入到与目标顶点U对应的输入消息队列中
    • 远程:暂时缓存消息到本地输出消息队列,当缓存中的消息数目达到阈值时,传输到目标顶点所在的Worker上
    • 若存在用户自定义的Combiner操作,则消息被加入到输出队列或者到达输入队列时,就可以对消息执行合并操作

Master

  • 维护worker的状态
  • 协调worker的计算
    • 同步控制:Superstep
  • 对外服务
  • Master维护的数据信息的大小,只与分区的数量有关,而与顶点和边的数量无关

Master协调计算

在每个SuperStep中需要进行两次同步(双屏障)

  • 开始时同步发送相同的指令,等待Worker回应
  • 结束后,进行路障Barrier同步,一旦成功Master就会进入下一个超步的执行

MapReduce与Giraph

54561694314

  1. Giraph的主从结构在MapReduce中都是Task
    • 利用zookeeper选主
  2. 只利用了MapReduce中的mapper节点,没有Reduce节点
  3. 只是利用了MapReduce框架Run函数将Giraph启动

工作流程

数据加载

  • 基于顶点的图分区
    • 哈希函数或者用户自定义函数
    • 目标是使得跨界点的通信减少
  • 读取数据
    • Master只需要知道图的位置
      • 将输入的图划分为多个部分,如基于文件边界
        • 每个部分都是一系列记录(顶点和边)的集合
      • Master会为每个Worker分配一部分图数据
    • Worker取真正读数据
      • 将部分图数据加载到内存

SuperStep计算

  • Worker为管辖的每个分区分配一个线程
  • 对于分区中的每个顶点,Worker根据来自上一个超步的、发给该顶点的消息并调用处于“活跃”状态的顶点上的Compute()函数

SuperStep结束

  • 在执行计算过程中,顶点可以对外发送消息,但是必须在本超步结束之前完成
  • 超步完成后(barrier),Worker把在下一个超步还处于“活跃”状态的顶点数量报告给Master

容错机制

不能使用MapReduce的容错机制

  • Master故障
    • 意味协调节点丢失
    • Zookeeper选主
  • Worker故障
    • 意味计算节点丢失
    • 设置检查点

检查点机制

  • 设置检查点:每隔一定的superstep
    • 在设置检查点的超步开始时,Master通知所有的Worker把管辖的分区状态(顶点、边、接收到的消息等),写入到持久化存储
  • Worker发生故障
    • Pregel
      • 重新启动一个Worker
      • 局部恢复(confined recover)
        • 将失效节点从检查点恢复到当前时刻
    • Giraph
      • Master把失效Worker的分区分配到其他处于正常状态的Worker上
      • 全局恢复,所有节点退回到检查点

乐观容错

不一定需要检查点


http://chatgpt.dhexx.cn/article/kjVqyiP2.shtml

相关文章

graphx中Pregel函数详解

1、PregelAPI 图本质上是一种递归的数据结构,其顶点的属性值依赖于其邻接顶点,而其邻接顶点属性又依赖于其邻接顶点,许多重要的图算法通过迭代计算每个顶点的属性直到到达定点条件,这些迭代的图算法被抽象成一系列图并行操作。 2、…

Pregel与图迭代

graphx是如何实现Pregel迭代操作,我们应该如何使用该模型。先看下pregel接口源码: 接口中各参数的含义已在图中进行注释,所以此处不再赘述。简单介绍下源码中的参数说明: 剖析 pregel模型提供了消息收集方向、迭代次数、初始化消…

Google图算法引擎Pregel介绍

参考文献点击打开链接 【前言:有一种说法[1]是Google的程序里面80%用的是MapReduce,20%用的是Pregel。今天就来介绍一下这个Pregel。想要深入研究的同志们,可以参考最新的SIGMOD 2010 ppt[2]。】 简介 Pregel是一个用于分布式图计算的计算…

图计算: 使用 Spark Graphx Pregel API 处理分层数据

今天,分布式计算引擎是许多分析、批处理和流应用程序的支柱。Spark提供了许多开箱即用的高级功能(pivot、分析窗口函数等)来转换数据。有时需要处理分层数据或执行分层计算。许多数据库供应商提供诸如“递归 CTE(公用表达式&#…

pregel 与 spark graphX 的 pregel api

[原文](https://blog.csdn.net/u013468917/article/details/51199808)简介 在Hadoop兴起之后,google又发布了三篇研究论文,分别阐述了了Caffeine、Pregel、Dremel三种技术,这三种技术也被成为google的新“三驾马车”,其中的Pregel…

Pregel体系结构

在Pregel计算框架中,一个大型图会被划分成许多个分区,每个分区都包含了一部分顶点以及以其为起点的边 一个顶点应该被分配到哪个分区上,是由一个函数决定的,系统默认函数为hash(ID) mod N,其中,N为所有分区…

Spark GraphX 中的 pregel函数(转载)

文章目录 pregel函数源码 与 各个参数介绍:案例: 求顶点5 到 其他各顶点的 最短距离pregel原理分析 一篇关于 Spark GraphX 中 pregel函数 的笔记,通过一个小案例将pregel函数理解透彻。 pregel函数源码 与 各个参数介绍: def…

03 graphx 从 SSSP 来看 pregel

前言 呵呵 最近刚好有一些需要使用到 图的相关计算 然后 在其他文章中找到了一篇 关于最短路径的graphx计算的代码 spark graphx 最短路径及中间节点 呵呵 很久没有用这些东西了, 虽然只是简单的使用, 但是还是要 复习一下, 稍微理解一下 他的执行方式 pregel 相关论文 …

ArangoDB(四)Pregel

arango pregel.status()返回值 localhost:8529_system> pregel.status(1099521660554) {"state" : "done","gss" : 7,"totalRuntime" : 8.389497518539429,"aggregators" : {},"sendCount" : 392647,"re…

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 ) }…