这是微软的一个图计算平台,C#开发的,它是为了提供一个专用的图计算应用平台,包括底层的存储到上层的应用,应该是可以实现BSP模型的,文章发在SIGMOD13上,可恨的是也不开源。
以下几个也是一些BSP的实现,不过关注度不是很高,基本都是对Pregel的开源实现:
7.GoldenOrb
另一个BSP模型的java实现,是对Pregel的一个开源实现,应用在hadoop上。
官网:(要FQ)
源码:https://github.com/jzachr/goldenorb
8.Phoebus
Erlang语言实现的BSP模型,也是对Pregel的一个开源实现。
https://github.com/xslogic/phoebus
9.Rubicon
Pregel的开源实现。https://launchpad.net/rubicon
10.Signal/Collect
11.PEGASUS
在hadoop上实现的一个java版的BSP模型,发表在SIGKDD2011上。
七、Apache Hama简介
Hama概述
背景:
2008年5月Hama被视为Apache众多项目中一个被孵化的项目,作为Hadoop项目中的一个子项目,BSP模型是Hama计算的核心,并且实现了分布式的计算框架,采用这个框架可以用于矩阵计算(matrix)和面向图计算(graph)、网络计算(network)。
Hama是建立在Hadoop上的分布式并行计算模型。基于Map/Reduce 和 Bulk Synchronous的实现框架。运行环境需要关联Zookeeper、Hbase、HDFS组件。集群环境中的系统架构由BSPMaster/GroomServer(Computation Engine)、Zookeeper(Distributed Locking)、HDFS/Hbase(Storage Systems)这3大块组成。Hama中有2个主要的模型: 矩阵计算(Matrix package)和 面向图计算(Graph package)。
Hama的主要应用领域是:矩阵计算、面向图计算、PageRank、排序计算、BFS。
Hama Architecture
Hama系统架构
Apache的Hama主要由三个部分组成:BSPMaster,GroomServers和Zookeeper,下面这张图主要概述了Hama的整体系统架构,并且描述了系统模块之间的通讯与交互。Hama的集群中需要有HDFS的运行环境负责持久化存储数据(例如:job.jar),BSPMaster负责进行对Groom Server 进行任务调配,groom Server 负责进行对BSPPeers进行调用程序进行具体的调用,Zookeeper负责对Groom Server 进行失效转发。
BSPMaster(划分计算到Groom,管理Groom,类似MapReduce的JobTracker)
在Apache Hama中BSPMaster模块是系统中的一个主要角色,他主要负责的是协同各个计算节点之间的工作,每一个计算节点在其注册到master上来的时候会分配到一个唯一的ID。Master内部维护着一个计算节点列表,表明当前哪些计算节点出于alive状态,该列表中就包括每个计算节点的ID和地址信息,以及哪些计算节点上被分配到了整个计算任务的哪一部分。Master中这些信息的数据结构大小取决于整个计算任务被分成多少个partition。因此,一台普通配置的BSPMaster足够用来协调对一个大型计算。
下面我们来看看BSPMaster做了哪些工作:
维护着Groom服务器的状态。
控制在集群环境中的superstep。
维护在groom中job的工作状态信息。
分配任务、调度任务到所有的groom服务器节点。
广播所有的groom服务器执行。
管理系统节点中的失效转发。
提供用户对集群环境的管理界面。
一个BSPMaster或者多个grooms服务器是通过脚本启动的,在Groom服务器中还包含了BSPeer的实例,在启动GroomServer的时候就会启动了BSPPeer,BSPPeer是整合在GrommServer中的,GrommServer通过PRC代理与BSPmaster连接。当BSPmaster、GroomServer启动完毕以后,每个GroomServer的生命周期通过发送"心跳"信息给BSPmaster服务器,在这个"心跳"信息中包含了GrommServer服务器的状态,这些状态包含了能够处理任务的最大容量,和可用的系统内存状态,等等。
BSPMaster的绝大部分工作,如input ,output,computation,saving以及resuming from checkpoint,都将会在一个叫做barrier的地方终止。Master会在每一次操作都会发送相同的指令到所有的计算节点,然后等待从每个计算节点的回应(response)。每一次的BSP主机接收心跳消息以后,这个信息会带来了最新的groom服务器状态,BSPMaster服务器对给出一个回应的信息,BSPMaster服务器将会与groom 服务器进行确定活动的groom server空闲状态,也就是groom 服务器可资源并且对其进行任务调度和任务分配。BSPMaster与Groom Server两者之间通讯使用非常简单的FIFO(先进先出)原则对计算的任务进行分配、调度。
GroomServer