GiraphV1.2源码阅读记录

本文探讨了Giraph中Worker与分区的关系,并通过实验验证了顶点容器内的顶点信息在计算过程中是否被实时更新。实验结果显示,顶点信息确实在计算过程中得到了实时更新。

1.关于Worker和分区号的对应关系

和Hama中不同,Giraph中一个Worker对应多个分区,而worker的ID和任务号并不像Hama中存在一一对应关系,而是通过MAp保存;


BspServiceWorker中包含workerContext对象,其中含有一个AllWorkersInfo对象,用于存放taskId<->worker映射。



2. 为了确认在计算中,顶点容器中的顶点信息是被实时修改的,在ComputeCallable类的computePartition函数中测试如下代码:

	 if( ((IntWritable)vertex.getId()).get() == 666791) {
    		 PartitionOwner owner = serviceWorker.getVertexPartitionOwner((I)new IntWritable(666791)) ;
    		 ConcurrentMap<Integer, Partition<I, V, E>> part = ((SimplePartitionStore)serviceWorker.getPartitionStore()).getPartitions() ;
    		 Partition<I, V, E> p = part.get(owner.getPartitionId()) ;
    		 Vertex v = ((SimplePartition)p).getVertex(new IntWritable(666791)) ;
    		 LOG.info("Vertex Class: " + vertex.getClass().toString() + " partition: " + p.toString() + " Worker:" +
    				 serviceWorker.getWorkerContext().getWorkerForVertex(vertex.getId()) 
    				 +" PartitionStore:" + v.toString() + " real: " + vertex.toString()) ; 
    	 }



打印结果:

INFO org.apache.giraph.graph.ComputeCallable: Vertex Class: class org.apache.giraph.graph.DefaultVertex partition: (id=7,V=70921) Worker:3

 PartitionStore:org.apache.giraph.graph.DefaultVertex@21fefd80 Vertex(id=666791,value=666791.0,#edges=4) 

 real                : org.apache.giraph.graph.DefaultVertex@21fefd80 Vertex(id=666791,value=666791.0,#edges=4)


这里对DefaultVertex中toString方法稍作修改:

  @Override
  public String toString() {
	  String str = super.toString() + " Vertex(id=" + getId() + ",value=" + getValue() +
		        ",#edges=" + getNumEdges() + ")" ;
    return str ;
//    return "Vertex(id=" + getId() + ",value=" + getValue() +
//    		        ",#edges=" + getNumEdges() + ")" ;
  }

附: Java中无法获取真实内存地址,因此判断两个对象是否同一个可以通过Object中的toString方法,即打印hashCOde来测试,即super.toString()

结论: 顶点容器中的顶点信息是被实时修改的。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值