Giraph中的图仅使用Edge接口和Vertex接口构造。Edge包含目标顶点的值/权重和 id。在 Giraph 的图模型中,一个顶点包含一个 ID、一个值和它所有外出的边的列表。Giraph 提供了这些接口的默认实现:DefaultVertex 和 DefaultEdge。这些接口还有其他实现
一、Edge接口
Edge 界面的类型变量如图 3.1 所示。边包含一个目标顶点 ID,它是类型变量 I ,边数据是类型变量 E 。类型 I 和 E 取决于图形类型。为加载图数据而选择/实现的 InputFormat 应该符合 edge 的类型变量。注意,我应该和在顶点中使用的类型相同,因为两者都表示一个顶点 id。下面是边接口的两种方法。
public interface Edge <I extends WritableComparable , E extends
Writable > {
I getTargetVertexId();
E getValue();
}
二、Vertex接口
图 3.2 显示了Giraph顶点。它包含一个顶点 id、顶点值和它的外边列表。清单 3.2显示了顶点接口。它接受类型变量 I 的顶点 ID,类型变量 V 的顶点值,以及Edge 类的迭代。如前一节所解释的,边包含类型 I 的目标顶点 ID 和类型 E 的边值。类型 I、V 和 E 取决于您的图形类型,应该选择/实现匹配的 InputFormat 来加载图形数据。
public interface Vertex <I extends WritableComparable ,V extends Writable , E extends Writable > extends ImmutableClassesGiraphConfigurable <I, V, E> {
void initialize(I id , V value , Iterable <Edge <I, E>> edges);
void initialize(I id , V value);
I getId();
V getValue();
void setValue(V value);
void voteToHalt();
int getNumEdges();
Iterable <Edge <I, E>> getEdges();
void setEdges( Iterable <Edge <I, E>> edges);
Iterable < MutableEdge <I, E>> getMutableEdges ();
E getEdgeValue(I targetVertexId);
void setEdgeValue(I targetVertexId , E edgeValue);
Iterable <E> getAllEdgeValues( final I targetVertexId);
void addEdge(Edge <I, E> edge);
void removeEdges(I targetVertexId);
void unwrapMutableEdges ();
void wakeUp();
boolean isHalted();
}
三、Computation 接口
Computation 接口代表了在每个 superstep 中应用到所有活顶点的计算。在 superstep 中可以有这个接口的几个实例,每个实例都在图顶点的一个分区上进行计算。注意,每个线程都有自己的计算,因此从这个类访问任何数据都是线程安全的。但是,访问全局数据(比如 WorkerContext 中的数据)不是线程安全的。此接口的对象只存在于单个 superstep 中。最重要且唯一必须编写的方法是 compute()方法。它的其他方法的使用取决于您正在实现的算法的类型。
参考书籍:《Large-Scale Graph Processing Using Apache Giraph》