今天要讲的文章是SIGMOD 2010年的一篇文章,Pregel: A System for Large- Scale Graph Processing。本文主要想解决的问题就是:随着如今技术的发展,图数据规模是不断地增长的。现有的图处理系统采用单机处理大图数据,但是单机处理大图数据存在很差的可扩展性,因为单机机器内存是由限制的。然而使用MapReduce处理大图数据,效率又很差。因为每个阶段中必须存储图状态,这样在每个阶段中会造成大量的磁盘IO和网络通信带来的开销。所以本文就针对现有的图处理系统这种状况,提出了基于BSP的大规模图处理系统:Pregel。

1.Motivation

图算法常常表现出比较差的内存访问局部性,针对单个顶点的处理工作过少,以及计算过程中伴随着的并行度的改变等问题。分布式的介入更是加剧了locality的问题,并且增加了在计算过程中机器发生故障的概率。尽管大型图对象无处不在,及其在商业上的重要性,但是据我们所知,目前还不存在一种在大规模分布式环境下,可以基于各种图表示方法来实现任意图算法的,可扩展的通用系统。如图所示:

当今现有的图计算存在的问题:

1.现有的图处理系统不能满足需求 重新写一个基础设施,需要大量的工程性。
2.使用MapReduce算法。没有效率,因为必须存储图状态到每个阶段中来,这样会造成大量的磁盘IO和网络通信带来的开销在每个阶段中。
3.使用单机图处理库 scalable不好
4.使用现有的并行图处理系统 没有很好的容错

所以说就需要一个可以伸缩的、容错的解决方案:Pregel: A System for Large- Scale Graph Processing,并且Pregel采用一种同步批量模型。

1.Scalable and Fault-tolerant platform
2.API with flexibility to express arbitrary algorithm
3.Inspired by Valiant’s Bulk Synchronous Parallel model[4]

4.Vertex centric computation (Think like a vertex)

2.Pregel的计算模型

首先图数据从文件中输入数据,经过若干次SuperSteps后,也就是若干轮迭代之后,最终数据将会写入到文件中。每一轮迭代都叫做一个Superstep。输入数据经过compute之后进入下一轮迭代。并且每轮迭代计算都需要同步等待其他数据都计算完成后才能进入下一轮迭代。
BSP计算模型由通过通信网络连接的处理器组成。 每个处理器都有一个快速的本地内存,并可能遵循不同的计算线程。 BSP计算以一系列全局超级步骤进行。 一个superstep包含三个组件:
并发计算:在每个参与处理器上进行几次计算。 每个进程只使用存储在处理器本地存储器中的值。 这些计算是独立的,它们是异步发生的。
通信:进程之间交换数据。 这种交换采取单方面的形式,并获得通话,而不是双方发送和接收电话。
屏障同步:当一个进程到达这个点(屏障),它等待,直到所有其他进程已经完成他们的通信行为。
计算和沟通行为不必按时排序。 屏障同步然后结束本轮superstep。
Pregel计算和通信不必按时排序,当一个任务的计算完成之后,这个任务产生的消息就能马上发送到相应的任务中去。Pregel消息采用一种Message-Passing的方式。每个顶点接受上一个superstep产生的消息,每个顶点程序执行相同的用户顶i有的函数,然后修改它的顶点值和出边的值。接着顶点程序就会发送消息给其他顶点(这个消息会在下一个superstep中被处理)。每个顶点程序都有激活和不激活状态之分,每个顶点程序在执行一轮顶点迭代后,会经过判断是否在下一轮迭代中变成激活或者不激活状态。每个顶点程序就是一个状态机,如下图所示:

当整体图数据中,所有的顶点都变为不激活状态后,这个图迭代计算才计算完成。

3. Differences from MapReduce

Pregel 
1.保持每台机器中的顶点和边进行计算
2.仅将网络传输用于消息
MapReduce
1.将图形的整个状态从一个阶段传递到下一个阶段
2.需要协调一个链接的MapReduce的步骤

4.Program API

Pregel 顶点程序定义的编程接口

Pregel 程序Example:SSSP

4. System Architecture

Pregel 采用的也是一种Master& Worker的模型。Master用来协调各个Worker工作,并且当集群发生宕机的情况下,Master还可以调度Worker,使得Worker能够从错误中恢复出来。Worker就是用来处理各个Task任务,并且每轮迭代的通信都是在不同的Worke之间进行通信。

Pregel将图数据放在分布式存储系统中(比如GFS或者BigTable),临时数据存储在本地磁盘中。

4.1Pregel执行步骤

1. Pregel初始化过程 Master将会复制很多个点程序执行到各个集群上面去

2. Master 初始化每个Worker分区的个数和Grpah分区个数,并将图graph划分到每个worker中一个或者多个分区上
3. DataInput 数据输入 
Master进程为每个worker分配用户输入中的一部分,这些输入被看做是一系列记录的集合,每一条记录都包含任意数目的顶点和边。并且每个worker加载这些点集并把它标记为active 并且更新woker上的数据结构

4. Master指示每个woker执行一个superstep阶段
worker轮询在其之上的顶点,会为每个partition启动一个线程。调用每个active顶点的Compute()函数,传递给它从上一次超级步发送来的消息。消息是被异步发送的,这是为了使得计算和通信可以并行,以及进行batching,但是消息的发送会在本次superstep结束前完成。 每个step会不断重复该步骤,只要有顶点还处在active状态,或者还有消息在传输。
5. 在每个点program计算都终止后,Master会指示每个worker去保存一部分执行结果

5. Fault Tolerance

5.1Checkpoints

Pregel容错采用一种Checkpoints机制,在每次进行superstep开始的时候,the master会指示每个workers去保存每个分区的状态到持久化系统中去。这个分区的状态包括:点的values 边的values 和incoming messages。然后Master自己也会保存aggregator的值。
当一个或多个worker发生故障,被分配到这些worker的partitions的当前状态信息就丢失了。Master重新分配图的partition到当前可用的worker集合上,所有的partition会从最近的某超级步S开始时写出的checkpoint中重新加载状态信息。该超级步可能比在失败的worker上最后运行的超级步 S’早好几个阶段,此时失去的几个superstep将需要被重新执行我们对checkpoint频率的选择基于某个故障模型[13]的平均时间,以平衡checkpoint的开销和恢复执行的开销。

5.2 Log outgoing Message

除了基本的checkpoint,worker同时还会将其在加载图的过程中和superstep中发送出去的消息(来自它们已经分配后的分区)写入日志。这样恢复就会被限制在丢掉的那些 partitions上。它们会首先通过checkpoint进行恢复,然后系统会通过回放来自正常的partitions的记入日志的消息以及恢复过来的partitions重新生成的消息,更新状态到S’阶段。这种方式通过只对丢失的partitions进行重新计算节省了在恢复时消耗的计算资源,同时由于每个worker只需要恢复很少的partitions,减少了恢复时的延迟。

6.Aggregator

Pregel提供一种全局通信的机制。用于全局通信,全局数据和监测,从顶点报告的值计算汇总统计信息。在superstep期间,每个工作人员从其顶点聚合值以形成部分聚合的值,在superstep结束时,来自每个worker的部分聚合值被聚合在一个树形结构中。并且树结构允许并行化,全局聚合被发送到Master节点上。Master在下一个superstep开始时将全局值发送给所有Worker。

7. Experiments

[SIGMOD 10] Pregel 基于BSP的大规模图处理系统 学习总结相关推荐

  1. [PPOPP 15] PoweSwitch: 基于同步异步切换的分布式大规模图处理系统 学习总结

    今天要讲的文章PPOPP 2015年的一篇文章,SYNC or ASYNC Time to Fuse for Distributed Graph-Parallel Computation.本文主要想解 ...

  2. [PVLDB 12] GraphLab : 分布式机器学习大规模图处理系统 学习总结

    今天要讲的文章是PVLDB 2012年的一篇文章,Distributed GraphLab: A Framework for Machine Learning and Data Mining in t ...

  3. 百亿节点、毫秒级延迟,携程金融基于 NebulaGraph 的大规模图应用实践

    作者:霖雾,携程数据开发工程师,关注图数据库等领域. 0. 背景 2017 年 9 月携程金融成立,在金融和风控业务中,有多种场景需要对图关系网络进行分析和实时查询,传统关系型数据库难以保证此类场景下 ...

  4. 基于 Flink 构建大规模实时风控系统在阿里巴巴的落地

    目前 Flink 基本服务于集团的所有 BU ,在双十一峰值的计算能力达到 40 亿条每秒,计算任务达到了 3 万多个,总共使用 100 万+ Core :几乎涵盖了集团内的所有具体业务,比如:数据中 ...

  5. 【Spark深入学习 -10】基于spark构建企业级流处理系统

    ----本节内容------- 1.流式处理系统背景 1.1 技术背景 1.2 Spark技术很火 2.流式处理技术介绍 2.1流式处理技术概念 2.2流式处理应用场景 2.3流式处理系统分类 3.流 ...

  6. 使用gpu服务器搭建人脸识别系统,基于GPU的大规模人脸识别系统的设计与实现

    摘要: 近年来,随着基于深度学习的人脸识别技术的发展,成为了计算机视觉研究最热门的领域之一,被广泛的应用于公共安全.安防.金融等领域.但在实际应用场景中,人脸识别的准确率往往容易受到光线.遮挡.姿态等 ...

  7. 2022年10月 基于WPF的智能制造MES系统框架-菜单栏的设计

    文章目录 一.前言 1.什么是智能制造MES系统 2.MES系统的主要功能 3.MES系统解决的问题 二.菜单栏的设计 三.效果 一.前言 1.什么是智能制造MES系统 MES系统是一套面向制造企业车 ...

  8. 【图神经网络】图神经网络(GNN)学习笔记:基于GNN的图表示学习

    图神经网络GNN学习笔记:基于GNN的图表示学习 1. 图表示学习 2. 基于GNN的图表示学习 2.1 基于重构损失的GNN 2.2 基于对比损失的GNN 参考资料 本文主要就基于GNN的无监督图表 ...

  9. 大规模图数据匹配技术综述

    摘要 在大规模图数据上进行高效地查询.匹配是大数据分析处理的基础问题.从应用角度对图查询的图数据匹配技术的研究进展进行综述,根据图数据的不同特征以及应用的不同需求对图匹配问题分类进行介绍.同时,将重点 ...

最新文章

  1. oracle同步复制清理,Oracle数据库同步——高级复制
  2. [Swift]LeetCode206. 反转链表 | Reverse Linked List
  3. 如何用python开发游戏_手把手教你用Python完成一个控制台小游戏-阿里云开发者社区...
  4. leetcode 91. 解码方法(dp)
  5. 《OD大数据实战》MapReduce实战
  6. nginx访问本地目录一直不好使_Nginx跳转本地目录容易犯的错误
  7. 技术迭代快速。PyTorch 真的优于Tensorflow吗?
  8. 使用git-bash向码云提交项目
  9. BeagleBone Black 连接USB摄像头,并实现采集、存储及传输
  10. 分布式监控系统Zabbix--使用Grafana进行图形展示
  11. java socket第三方库_Java基于Socket实现HTTP下载客户端
  12. 源码安装Apache http server
  13. re2正则表达式引擎学习(一)
  14. js根据出生年月获取年龄
  15. 【网络游戏同步技术】游戏中的ping值计算
  16. java--案例:[Random]随机100-200的数、班级点名器、控制台输入三个数,输出最大值,或最小值?
  17. python中print是什么意思中文-python中使用print输出中文的方法
  18. 谈谈最近管理情绪和时间的心得:真的是破心中贼难
  19. 通达OA 2015 8.12版本取消注册功能介绍
  20. 2019年智能科学与产业综述论文盘点

热门文章

  1. C++ 与 JAVA的不同点
  2. Pthread多线程编程之查看Pthread版本的方法
  3. 如何预防食品被新冠病毒污染?国家卫健委权威解答来了
  4. Text模式和PDU模式短信的区别
  5. 学计算机需要用手机吗,智能手机能代替电脑吗?
  6. python多包运行_如何组织包含多个包的python项目,以便包中的每个文件仍然可以单独运行?...
  7. c++ 图片验证码识别_基于tensorflow 实现端到端的OCR:二代身份证号识别
  8. unity导出fbx模型_ARTBOOK艺书专栏:Fbx导出杂谈
  9. maven使用小技巧 optional
  10. Spring @Configuration注解及配置方法