package com.thinkaurelius.faunus.mapreduce; import com.thinkaurelius.faunus.FaunusGraph; import com.thinkaurelius.faunus.FaunusPipeline; import com.thinkaurelius.faunus.FaunusVertex; import com.thinkaurelius.faunus.formats.titan.TitanOutputFormat; import com.thinkaurelius.faunus.formats.titan.cassandra.TitanCassandraOutputFormat; import com.thinkaurelius.faunus.mapreduce.transform.VerticesMap; import com.thinkaurelius.faunus.mapreduce.transform.VerticesVerticesMapReduce; import com.thinkaurelius.faunus.mapreduce.util.CountMapReduce; import junit.framework.TestCase; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.mapreduce.Reducer; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ public class FaunusCompilerTest extends TestCase { public void testGlobalConfigurations() { FaunusGraph graph = new FaunusGraph(); graph.getConf().setInt("a_property", 2); FaunusCompiler compiler = new FaunusCompiler(graph); assertEquals(compiler.getConf().getInt("a_property", -1), 2); assertEquals(compiler.getConf().getInt("b_property", -1), -1); compiler.addMap(IdentityMap.Map.class, NullWritable.class, FaunusVertex.class, new Configuration()); compiler.completeSequence(); assertEquals(compiler.jobs.get(0).getConfiguration().getInt("a_property", -1), 2); assertEquals(compiler.jobs.get(0).getConfiguration().getInt("b_property", -1), -1); assertEquals(compiler.getConf().getInt("a_property", -1), 2); assertEquals(compiler.getConf().getInt("b_property", -1), -1); } public void testJobListSize() { FaunusCompiler compiler = new FaunusCompiler(new FaunusGraph()); assertEquals(compiler.jobs.size(), 0); compiler.addMap(IdentityMap.Map.class, NullWritable.class, FaunusVertex.class, new Configuration()); assertEquals(compiler.jobs.size(), 0); compiler.addMapReduce(CountMapReduce.Map.class, null, CountMapReduce.Reduce.class, NullWritable.class, FaunusVertex.class, NullWritable.class, FaunusVertex.class, new Configuration()); assertEquals(compiler.jobs.size(), 1); compiler.addMapReduce(CountMapReduce.Map.class, null, CountMapReduce.Reduce.class, NullWritable.class, FaunusVertex.class, NullWritable.class, FaunusVertex.class, new Configuration()); assertEquals(compiler.jobs.size(), 2); } public void testJobOrder() throws Exception { FaunusCompiler compiler = new FaunusCompiler(new FaunusGraph()); assertEquals(compiler.jobs.size(), 0); compiler.addMap(IdentityMap.Map.class, NullWritable.class, FaunusVertex.class, new Configuration()); assertEquals(compiler.jobs.size(), 0); compiler.addMapReduce(CountMapReduce.Map.class, null, CountMapReduce.Reduce.class, NullWritable.class, FaunusVertex.class, NullWritable.class, FaunusVertex.class, new Configuration()); assertEquals(compiler.jobs.size(), 1); assertEquals(compiler.jobs.get(0).getMapperClass(), MapSequence.Map.class); assertEquals(compiler.jobs.get(0).getCombinerClass(), null); assertEquals(compiler.jobs.get(0).getReducerClass(), CountMapReduce.Reduce.class); } public void testJobOrder2() throws Exception { FaunusPipeline pipe = new FaunusPipeline(new FaunusGraph()); FaunusCompiler compiler = pipe.getCompiler(); assertEquals(compiler.jobs.size(), 0); pipe.V().out("knows")._(); compiler.completeSequence(); assertEquals(compiler.jobs.size(), 2); assertEquals(compiler.jobs.get(0).getMapperClass(), MapSequence.Map.class); String[] mapClasses = compiler.jobs.get(0).getConfiguration().getStrings(MapSequence.MAP_CLASSES); assertEquals(mapClasses.length, 2); assertEquals(mapClasses[0], VerticesMap.Map.class.getName()); assertEquals(mapClasses[1], VerticesVerticesMapReduce.Map.class.getName()); assertEquals(compiler.jobs.get(0).getConfiguration().getStrings(VerticesVerticesMapReduce.LABELS + "-1").length, 1); assertEquals(compiler.jobs.get(0).getConfiguration().getStrings(VerticesVerticesMapReduce.LABELS + "-1")[0], "knows"); assertEquals(compiler.jobs.get(0).getCombinerClass(), null); assertEquals(compiler.jobs.get(0).getReducerClass(), VerticesVerticesMapReduce.Reduce.class); assertEquals(compiler.jobs.get(1).getMapperClass(), MapSequence.Map.class); mapClasses = compiler.jobs.get(1).getConfiguration().getStrings(MapSequence.MAP_CLASSES); assertEquals(mapClasses.length, 1); assertEquals(mapClasses[0], IdentityMap.Map.class.getName()); assertEquals(compiler.jobs.get(1).getCombinerClass(), null); assertEquals(compiler.jobs.get(1).getReducerClass(), Reducer.class); } public void testConfigurationPersistence() throws Exception { Configuration conf = new Configuration(); conf.setInt("mapred.reduce.tasks", 2); conf.setBoolean(TitanOutputFormat.FAUNUS_GRAPH_OUTPUT_TITAN_INFER_SCHEMA, false); FaunusGraph graph = new FaunusGraph(conf); FaunusPipeline pipeline = new FaunusPipeline(graph); FaunusCompiler compiler = pipeline.getCompiler(); TitanOutputFormat outputFormat = new TitanCassandraOutputFormat(); assertEquals(graph.getConf().getInt("mapred.reduce.tasks", -1), 2); assertEquals(compiler.getConf().getInt("mapred.reduce.tasks", -1), 2); assertFalse(graph.getConf().getBoolean(TitanOutputFormat.FAUNUS_GRAPH_OUTPUT_TITAN_INFER_SCHEMA, true)); assertFalse(compiler.getConf().getBoolean(TitanOutputFormat.FAUNUS_GRAPH_OUTPUT_TITAN_INFER_SCHEMA, true)); outputFormat.addMapReduceJobs(compiler); assertEquals(compiler.jobs.size(), 1); assertEquals(compiler.jobs.get(0).getConfiguration().getInt("mapred.reduce.tasks", -1), 2); assertFalse(compiler.jobs.get(0).getConfiguration().getBoolean(TitanOutputFormat.FAUNUS_GRAPH_OUTPUT_TITAN_INFER_SCHEMA, true)); assertEquals(graph.getConf().getInt("mapred.reduce.tasks", -1), 2); assertEquals(compiler.getConf().getInt("mapred.reduce.tasks", -1), 2); compiler.addMap(IdentityMap.Map.class, NullWritable.class, FaunusVertex.class, IdentityMap.createConfiguration()); compiler.completeSequence(); assertEquals(compiler.jobs.size(), 2); assertEquals(compiler.jobs.get(0).getConfiguration().getInt("mapred.reduce.tasks", -1), 2); assertFalse(compiler.jobs.get(0).getConfiguration().getBoolean(TitanOutputFormat.FAUNUS_GRAPH_OUTPUT_TITAN_INFER_SCHEMA, true)); assertEquals(compiler.jobs.get(1).getConfiguration().getInt("mapred.reduce.tasks", -1), 0); assertFalse(compiler.jobs.get(1).getConfiguration().getBoolean(TitanOutputFormat.FAUNUS_GRAPH_OUTPUT_TITAN_INFER_SCHEMA, true)); assertEquals(graph.getConf().getInt("mapred.reduce.tasks", -1), 2); assertEquals(compiler.getConf().getInt("mapred.reduce.tasks", -1), 2); } }