package com.hadooparchitecturebook.zombie.giraph; import java.io.IOException; import java.util.Iterator; import org.apache.giraph.edge.Edge; import org.apache.giraph.graph.BasicComputation; import org.apache.giraph.graph.Vertex; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper.Context; import org.apache.log4j.Logger; public class ZombieComputation extends BasicComputation<LongWritable, Text, LongWritable, LongWritable> { private static final Logger LOG = Logger.getLogger(ZombieComputation.class); Text zombeText = new Text("Zombie"); LongWritable longIncrement = new LongWritable(1); @Override public void compute( Vertex<LongWritable, Text, LongWritable> vertex, Iterable<LongWritable> messages) throws IOException { Context context = getContext(); long superstep = getSuperstep(); if (superstep == 0) { if (vertex.getValue().toString().equals("Zombie")) { zombeText.set("Zombie." + superstep); vertex.setValue(zombeText); LongWritable newMessage = new LongWritable(); newMessage.set(superstep+1); aggregate("zombe.count",longIncrement ); for (Edge<LongWritable, LongWritable> edge : vertex.getEdges()) { this.sendMessage(edge.getTargetVertexId(), newMessage); } } } else { if (vertex.getValue().toString().equals("Human")) { Iterator<LongWritable> it = messages.iterator(); if (it.hasNext()) { zombeText.set("Zombie." + superstep); vertex.setValue(zombeText); aggregate("zombe.count",longIncrement ); LongWritable newMessage = new LongWritable(); newMessage.set(superstep+1); for (Edge<LongWritable, LongWritable> edge : vertex.getEdges()) { this.sendMessage(edge.getTargetVertexId(), newMessage); } } else { vertex.voteToHalt(); } } else { vertex.voteToHalt(); } } } }