Hello!!
i have realized a project with Giraph and i wanted to do a feedback about some
problems i encountred.In one of my giraph Jobs, i wanted to construct a graph
before making the processing on it. this graph is composed of vertices with an
id composed of two integers
import java.io.DataInput;import java.io.DataOutput;import java.io.IOException;
import org.apache.hadoop.io.WritableComparable;
/** * This Class will identify a unique Node in the Graph. It represents an
alignement * configuration (one point from each signal) * @author cjaber
*/public class NodeKey implements WritableComparable<NodeKey>{
private int _x; private int _y;
public int get_x() { return _x; }
public int get_y() { return _y; }
public NodeKey() { this._x = 0; this._y = 0;
}
public NodeKey(int _x, int _y) { this._x = _x;
this._y = _y; } public NodeKey(NodeKey key) { this._x
= key.get_x(); this._y = key.get_y(); }
@Override public void readFields(DataInput input) throws
IOException { _x=input.readInt(); _y=input.readInt();
}
@Override public void write(DataOutput output) throws IOException
{ output.writeInt(_x); output.writeInt(_y);
}
@Override public int compareTo(NodeKey otherkey) {
int ret=this._x-otherkey._x; if(ret == 0){
return this._y-otherkey._y; }else{ return
ret; }
}
@Override public String toString() { return
"("+_x+"|"+_y+")"; }
public boolean isSource() { // TODO Auto-generated method
stub return (_x==0) && (_y==0); }
@Override public boolean equals(Object obj) { if
(!(obj instanceof NodeKey))return false; NodeKey other =
(NodeKey)obj;
return (this._x==other._x) && (this._y==other._y); }
}my compute function doing changes to the graph:
@Override public void compute(Iterable<NodeMessage> messages)
throws IOException {
int currentId[]= {getId().get_x,getId().get_y};
System.out.println("("+currentId[0]+"|"+currentId[1]+")"+": I'm
in the superstep "+getSuperstep());
if(getSuperstep() == currentId[0] && getSuperstep() <
10){ addVertexRequest(new
NodeKey(currentId[0]+1,currentId[1]+1),new NodeValue()); }else{
voteToHalt(); }}
but when launching this with more than one worker it throws null pointer
exception:
java.lang.IllegalStateException: run: Caught an unrecoverable exception null
at org.apache.giraph.graph.GraphMapper.run(GraphMapper.java:102) at
org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764) at
org.apache.hadoop.mapred.MapTask.run(MapTask.java:364) at
org.apache.hadoop.mapred.Child$4.run(Child.java:255) at
java.security.AccessController.doPrivileged(Native Method) at
javax.security.auth.Subject.doAs(Subject.java:415) at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
at org.apache.hadoop.mapred.Child.main(Child.java:249)Caused by:
java.lang.NullPointerException at
org.apache.giraph.comm.netty.NettyWorkerServer.resolveMutations(NettyWorkerServer.java:201)
at
org.apache.giraph.comm.netty.NettyWorkerServer.prepareSuperstep(NettyWorkerServer.java:152)
at
org.apache.giraph.worker.BspServiceWorker.startSuperstep(BspServiceWorker.java:677)
at
org.apache.giraph.graph.GraphTaskManager.execute(GraphTaskManager.java:249) at
org.apache.giraph.graph.GraphMapper.run(GraphMapper.java:92) ... 7 more
i had to use a longwritable to replace NodeKey combining x and y of the
NodeKey class
So does giraph works with writables as vertex id in giraph ? if yes does i
missed something?
Chadi