图计算
-
专门针对图结构数据的处理
- 社交网络数据
- 传染病
- 交通事故等
-
非图结构的大数据,也可以转换成为图模型
-
很好的表达了数据之间的关联性
-
大数据计算核心:关联计算
-
图计算软件
- 基于遍历算法的、实时图数据库
- 图顶点为中心,基于消息传递批处理的并行引擎
-
BSP:整体同步并行计算模型
- 网络连接起来的处理器
- 一系列的全局超步
-
超步组件
- 局部计算
- 通讯
- 栅栏同步:等待所有处理器处理器执行完毕
Pregel
-
是谷歌公司发布的一款商业图计算产品
-
谷歌公司三大开源产品
- GFS
- MapReduce
- BigTable
-
Caffine:大规模网页索引构建
-
Dremel
- 实时交互式分析产品:实现PB级别数据
- 嵌套型结构
-
Pregel:基于BSP模型实现的并行图处理系统
图模型
- 有向图顶点
- 计算模型作为有向图作为输入
- 每个顶点都是String类型顶点ID
- 每个顶点都有一个可以修改的用户自定义值与之关联
- 每条有向边都和其源顶点关联,并记录了其目标顶点ID
- 边上有一个可修改的用户自定义值与之关联
- Pregel:采用了消息传递模型
Pregel计算过程
- 超步迭代组成
- 每个超步中,每个顶点上面都会执行用户自定义的函数
具体过程
- 算法结束由所有顶点的状态决定
- 第0个超步,所有顶点都处于活跃状态
- 顶点不需要继续执行进一步的计算时就会把自己的状态设置为“停机”
- Pregel计算框架必须根据条件判断来决定是否将其显示唤醒进入活跃状态
Pregel执行过程和容错性
- 一个大型图会被划分成许多个分区每个分区都包含了一部分顶点以及以其为起点的边
- 顶点怎么被分配到哪个分区:函数hash(ID) mod N
- 用户执行过程
- 选择集群中多台机器执行图计算任务,有一台机器被选为Master,其他机器作为Worker
- Master把图分为多个分区,把分区分配到多个Worker,一个Worker会领到一个或者多个分区
- 完成数据转载:用户输入划分为多个部分,然后Master会为每个Workder分配用户输入的一部分。所有输入都被加载后,图中所有顶点都会被标记为活跃状态。
- Master向Worker发送指令,Woker收到指令,开始运行一个超步,当超步中的所有工作都完成以后,Worker会通知Master,并把自己在下一个超步还处于活跃状态的顶点数量报告给Master
- 计算过程结束以后,Master会给所有Worker发送指令,通知每个Workder对自己的计算结果进行持久化存储
- 容错性
- 采用检查点机制实现容错,每个超步开始,Master会通知所有Worker把自己管辖的分区的状态写入到持久化存储设备
- Master会周期性地向每个Workder发送ping消息,Worker收到ping消息后会给Master发送反馈消息
- 当Worker发生故障,它所负责维护的分区地当前状态信息就会丢失
- Master检测到一个Worker发生故障“失效”后会把失效Worker所分配到地分区,重新分配到其他处于正常工作状态的Worker集合上
Worker
- 执行过程当中它的信息是保存在内存当中
- Worker会对自己管辖的分区中的每个顶点进行遍历,并调用顶点的Compute()函数
- Pregel中,更好的性能:“标志位”和输入消息队列是分开保存的
- 两份标志位和输入消息队列
- 一份是为了当前超步
- 另一份是为了下一个超步
- 保存一份顶点值和边的值
- 两份标志位和输入消息队列
- 一个顶点V在超步S接收到消息表示V将会在下一个超步S+1中处于“活跃”状态
自己机器:直接把消息放入到与目标顶点U对应的输入消息队列中
远程机器:暂时缓存到本地,当缓存中的消息数目达到一个设定好的阈值时缓存消息会被批量异步发送出去,传输到目标顶点所在Worker
Master
- 管家角色,协调Worker执行各个任务
- 维护当前处于有效状态的所有Worker的各种信息,包括每个Worker的ID和地址信息,以及每个Worker被分配的分配信息
- Master中保存这些信息的数据结构的大小,只与分区的数量有关,而与顶点和边的数量无关
- Master向所有处于有效状态的Worker发送相同的指令,然后等待Worker回应,在指定时间内某一个Worker没有回应说明这个Worker已经失效了,Master会进入恢复的模式
- 每个超步中的图计算的各种工作,会在“barrier”之前结束
- 内部运行了一个HTTP服务器来显示图计算过程的各种信息
- 图的大小
- 出度分布柱状图
- 活跃状态的顶点数量
- 当前超步的时间信息和消息流量
- 所有用户自定义Aggregator的值
Aggregator
- 执行某个超步S,每个worker会利用一个A对当前本地分区中包含的所有顶点的值进行归纳,得到一个本地的局部归约值
- 在超步S结束时,所有Worker会将所有包含局部归约值的Aggregator的值进行最后汇总得到全局值,然后提交到Master
- 在超步S+1开始时,Master会将A的全局值发送给每个Worker
应用:单源最短路径
- 参考具体算法
Hama安装和使用
-
Hama时Google Pregel的开源实现
-
Hama主要用于分布式矩阵、图、网络的计算
-
Hama是HDFS上实现的BSP计算框架,弥补Hadoop在计算能力上的不足
-
单机版
- JDK+Hadoop
- 下载文件并解压缩重命名
- 修改conf中的配置文件
- hama-env.sh:加入java的HOME路径
- hama-site.xml