作者 | 白松
注:本文为原创,引用转载需与数澜联系。
1、org.apache.giraph.bsp.CentralizedService 接口
功能 :Basic service interface shared by both CentralizedServiceMaster and CentralizedServiceWorker.
2、org.apache.giraph.bsp.CentralizedServiceMaster 接口
功能 :At most, there will be one active master at a time, but many threads can be trying to be the active master.
3、org.apache.giraph.bsp.CentralizedServiceWorker 接口
功能 :All workers should have access to this centralized service to execute the following methods.
4、org.apache.giraph.bsp.BspService 抽象类
功能:Zookeeper-based implementation of CentralizedService.
5、org.apache.giraph.master.BspServiceMaster 类
功能 :ZooKeeper-based implementation of CentralizedServiceMaster.
6、org.apache.giraph.worker.BspServiceWorker 类
功能 :ZooKeeper-based implementation of CentralizedServiceWorker.
BspServiceWorker 类有 WorkerClient 和 WorkerServer 实例,分别作为 IPC 通信的客户端和服务器端,通过 Netty 来发送数据。WorkerClient 实例实际为 NettyWorkerClient 对象,WorkerServert 实例实际为 NettyWorkerServer 对象。
NettyWorkerClient implements WorkerClient 接口,NettyWorkerServer implements WorkerServer 接口。
NettyWorkerServer 类的构造方法中创建一个 NettyServer 对象,用于底层的 IPC 的通信,还有一个 ServerData 对象,作为数据实体。ServerData 中包含该 Worker 的 partitionStore、edgeStore、incomingMessageStore、currentMessageStore、聚集值等。
NettyWorkerClient 类的构造方法中创建一个 NettyClient 对象,用于底层的 IPC 的通信,作为客户端。
7、org.apache.giraph.worker.InputSplitsCallable 抽象类,继承 Callable 接口。
功能 :用于加载顶点或边 输入 splits,每个线程都有一个 WorkerClientRequestProcessor 实例(实为 NettyWorkerClientRequestProcessor 对象),负责向远端的 worker 发送数据。
NettyWorkerClientRequestProcessor 对象用于发送的 WorkerClient 对象就是 BspServiceWorker 里面的 WorkerClient 对象。
VertexInputSplitsCallable 类中的 readInputSplit() 方法用来从 split 中读取顶点的信息,然后调用 NettyWorkerClientRequestProcessor 对象的 sendVertexRequest() 方法把顶点发送到它所属的 Partition 上。
8、org.apache.giraph.graph.ComputeCallable 类,继承 Callable 接口。
在该对象中完成“计算 - 通信 - 同步”的过程。每个线程都有一个 WorkerClientRequestProcessor 实例(实为 NettyWorkerClientRequestProcessor 对象),负责向远端的 worker 发送数据。