摘要:
Graphlab是一个高级的图并行抽象,它高效直观的表现了计算的依赖性。Mapreduce的计算采用独立的记录。Graphlab采用依赖性的存储在大的分布式data-graph中的顶点中的记录。Graphlab中的计算用vertex-program表示。它能够在每个顶点上并行执行,能够和邻居顶点相互影响。
1. Software Stack:
从图中我们可以看出graphlab集群中的所有机器都是等价的,无主、从节点之分。机器间采用TCP连接。
2. Graphlab源码结构:
基础组件层:提供Graphlab数据传输、多线程管理等基础并行结构的组件模块,下 面将主要介绍其通信、数据序列化、数据交换、多线程管理四个功能模块。
Graphlab基于TCP协议的长连接在机器之间进行数据通信。在Graphla初始化阶段,所有机器建立连接,将socket数据存储在std::vector<socket_info> sock 结构中。
Graphlab使用单独的线程来接收和发送数据,其中接收或发送都可以配多个线程,默认每个线程中负责与64台机器进行通信。在接收连接中,tcp_comm基于libevent采用epoll的方式获取连接到达的通知,效率高。
抽象层:1) dc_dist_object是GraphLab对所有分布式对象的一个抽象,其目标是将分布式处理的数据对象对用户抽象成普通对象。
2) buffer_exchange是基于dc_dist_object对需要在顶点间交换的数据提供一个容器。
3) distribute_controller是基于dc_dist_object实现的一个整个分布式系统的控制器,提供了机器数据、顶点关系等全局信息。
抽象层是仿照MPI完成的RPC服务。提供异步的,多线程RPC服务。实现了机器之间的通信。
引擎层:async_consisten_engine是异步引擎,异步的执行vertex_programs,能够保持互斥。保证相邻的节点不会同时执行。
Synchronous_engine是同步引擎,同步的执行活跃的vertex_programs。
应用层:在graphlab上的应用程序。Toolkits是graphlab上实现的应用程序。
开发者主要构造图和实现相应的vertex_programs。
3. MPI和graphlab的关系: