You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@giraph.apache.org by Arun Kumar <to...@gmail.com> on 2014/03/21 15:20:38 UTC

Counting Triangle in giraph

Hi

i am working on giraph version1.0 and i have created a TriangleCounting
program based on some previous posts .My program runs with out any error
but it is not giving any relevant data .
for clarity i am attaching the program and the input used .

Can somebody help me in finding the issue?

*The command to invoke the program over hadoop is:*
hadoop jar
/usr/local/giraph/giraph-examples/target/giraph-examples-1.0.0-for-hadoop-1.0.2-jar-with-dependencies.jar
org.apache.giraph.GiraphRunner org.apache.giraph.examples.TriangleCounting
-vif
org.apache.giraph.io.formats.JsonLongDoubleFloatDoubleVertexInputFormat
-vip /user/hduser/inputgraph/tiny_graph.txt -of
org.apache.giraph.io.formats.IdWithValueTextOutputFormat -op
/user/hduser/output/count -w 1
*Inputdata used:*
[0,0,[[1,1],[3,3]]]
[1,0,[[0,1],[2,2],[3,1]]]
[2,0,[[1,2],[4,4]]]
[3,0,[[0,3],[1,1],[4,4]]]

*output got:*
0    0.0
2    0.0
1    0.0
3    0.0
4    0.0
*Program:*

import org.apache.giraph.edge.Edge;
import org.apache.giraph.graph.Vertex;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.FloatWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.log4j.Logger;

import java.io.IOException;

@Algorithm(
    name = "Traingle Counting in Giraph",
    description = "Return the total number of triangle and also enumerates
traingles per vertex"
)
public class TriangleCounting extends Vertex<LongWritable,
DoubleWritable,FloatWritable, DoubleWritable> {

  /** Class logger */
  private static final Logger LOG =
Logger.getLogger(TriangleCounting.class);

  @Override
  public void compute(Iterable<DoubleWritable> messages) throws IOException
{

  /** First Superstep releases messages to vertexIds() whose value is
greater than its value. Both VertexId and Message are double **/
  if (getSuperstep() == 0) {
    for (Edge<LongWritable, FloatWritable> edge:getEdges()) {
      if (edge.getTargetVertexId().compareTo(getId()) == 1) {
      double d=getId().get();
        sendMessage(edge.getTargetVertexId(),new DoubleWritable(d));
        if (LOG.isDebugEnabled()) {
          LOG.debug("Vertex " + getId() + " sent message " + getId() + " to
vertex " + edge.getTargetVertexId());
        }
        System.out.println("Vertex " + getId() + " sent message " + getId()
+ " to vertex " + edge.getTargetVertexId());
      }
    }
  }

  /** Second superstep releases messages to message.get() < vertex.getId()
< targetVertexId() **/
  if (getSuperstep() == 1) {
    for (DoubleWritable message: messages) {
        for (Edge<LongWritable, FloatWritable> edge: getEdges()) {
        double etvid=edge.getTargetVertexId().compareTo(getId()) +
getId().get();
          if (new DoubleWritable(etvid).compareTo(message) == 2) {
            sendMessage(edge.getTargetVertexId(), message);
            if (LOG.isDebugEnabled()) {
              LOG.debug("Vertex " + getId() + " sent message " + message +
" to vertex " + edge.getTargetVertexId());
            }
            System.out.println("Vertex " + getId() + " sent message " +
message + " to vertex " + edge.getTargetVertexId());
          }
        }
    }
  }
  /** Sends messages to all its neighbours, the messages it receives **/
  if (getSuperstep() == 2) {
    for (DoubleWritable message: messages) {
        sendMessageToAllEdges(message);
    }
  }

  if (getSuperstep() == 3) {
      double Value = 0.0;
      for (DoubleWritable message: messages) {
          if (getId().equals(message)) {
              Value += 1.0;
              System.out.println("Vertex " + getId() + " received message "
+ message);
          }
      }
      setValue(new DoubleWritable(Value));
  }

  voteToHalt();
  }
}