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


                                          

Reply via email to