20210214

大数据 | 大数据基础--系统之大图计算框架

亲爱的读者朋友大家晚上好,前两篇文章讲了实时计算框架的理论知识和两个实例,这篇文章简单介绍一下大图计算框架,并以pregrel为例进行较为详细的分析。

什么是大图计算?

  • 许多实际计算机问题会涉及到大型图
  • MapReduce不适合图处理
    • 并行处理需要多次迭代,这导致MapReduce的迭代,影响到了整体的性能

图算法的挑战

  • 每个顶点的所需的计算量非常少
  • 在执行过程中改变并行程度

动机

  • 替代选择
    • 为每个新算法创建分布式基础架构
    • 分布式计算系统
      • 同级间的通信开销
    • 单计算机图数据库
      • 扩展性差
    • 其他并行图计算系统
      • 没有容错机制
  • 需要一个可扩展的分布式解决方案

实例--Pergel

  • 可扩展和容错的平台
  • API具有表达任意算法的灵活性
  • 受批量同步并行模型启发
  • 以顶点为中心的计算

大图计算任务的抽象

需要解决的问题

  • 操作的数据形式和结构是什么?
  • 应用程序可以对于数据做何种操作?

需要考虑的问题

  • 适用的场景/数据是什么?
  • 面向的软硬件环境是什么?
  • 支撑程序程序之间的界面在哪里?

实例--Pergel

  • 所有的计算任务被划分成一个一个的Superstep,superstep是并行结点计算对于每个结点
    • 接受上一个superstep发出的消息
      • 执行相同的用户定义函数
      • 修改它的值或者其输出边的值
      • 将消息送到其他点(由下一个superstep接受)
      • 改变图的拓扑结构
      • 没有额外工作要做时结束迭代
    • 终止条件
      • 所有顶点同时变为非活跃状态
      • 没有信息传递
  • 图并行模式
    • 从相邻节点处获取信息
    • 更新节点的属性
    • 将信息传输给相邻节点

大图计算框架的API

需要解决的问题

  • 程序员如何基于框架编写应用程序?

需要考虑的问题

  • 面向什么样的程序员?
  • 开发的效率?
  • 程序的易读性?
  • 程序的美感?
  • 是否符合传统开发的习惯?

实例--Pergel

C++API,以 SSSP不动点类 为例

1613372659383

大图计算框架的系统架构

需要解决的问题

  • 系统有哪些模块?
  • 模块之间如何交互?

需要考虑的问题

  • 有效配合硬件
  • 扩展性高
  • 效率高
  • 扩展性好
  • 开发容易
  • 维护方便
  • 升级简单

实例--Pergel

  • Pregel系统也使用主/从模型
    • 主节点
      • 调度从节点
      • 恢复从节点的错误
    • 从节点
      • 处理自己的任务
      • 与其他从节点通信
  • 持久化的数据位于分布式存储系统(如GFS或BigTable) 中
  • 临时数据存储在本地磁盘中

大图计算框架的基本数据操作

需要解决的问题

  • 包括哪些基本数据操作?
  • 并行还是串行实现?
  • 高效实现算法?

需要考虑的问题

  • 有效支撑API
  • 容易理解
  • 扩展性高
  • 效率高

实例--Pergel--聚合

  • 从节点可以聚合它的节点报告的消息并整 合为一条消息发送
  • 减少消息流量和硬盘占用
1613372841516

大图计算框架的流程生成

需要解决的问题

  • 基本数据操作和用户自定义逻辑的步骤划分
  • 基本数据操作和用户自定义逻辑的执行顺序

需要考虑的问题

  • 可用性高
  • 效率高
  • 容易理解
  • 容易支持调试工具

大图计算框架的流程调度

需要解决的问题

  • 执行过程中如何执行操作?

需要考虑的问题

  • 可扩展性高
  • 效率高

实例--Pergel

  1. 程序的许多副本开始在机器集群上执行
  2. 主节点分割图并给每个从节点分配一个或多个部分
  3. 主节点还为每个从节点分配一个输入分区
    1. 每个从节点加载顶点并将它们标记为活动的
  4. 主节点指导每个从节点执行一个superstep
    • 每个从节点循环其活动顶点并计算每个顶点
    • 消息是异步发送的,但是在superstep结束之前送达
    • 只要任何顶点处于活动状态,或者任何消息处于传输状态,就会重复此步骤
  5. 在计算停止后,主节点可以指示每个从节点保存各自部 分的图

大图计算框架的事务处理

需要解决的问题

  • 如何保证执行的正确性

需要考虑的问题

  • 结点出错怎么办?
  • 分布式系统出现读脏写脏怎么办?

容错

  • 检查点
    • 主节点定期指示从节点将分区的状态保存到持久化存储中
      • 例如:顶点数值,边数值,信息内容
  • 错误检测
    • 定时使用“ping”信息
  • 恢复
    • 主节点将图形分区重新分配给当前可用的从节点
    • 所有工作人员都从最近可用的检查点重新加载分区状态
  • 局部恢复
    • 记录传出的信息
    • 只涉及恢复分区

总结

以上就是大图计算框架的基本理论知识以及相应的知识结构,同时介绍了一个简单的例子pregrel,下次将会更进一步地介绍另一种实现graphX以及pregrel的一个高效实现pregrelix,敬请期待~