anchor.diff:  
   The image above demonstrates the difference between Gremlin OLTP and Gremlin OLAP. With Gremlin OLTP, the graph is walked by moving from vertex-to-vertex via incident edges. With Gremlin OLAP, all vertices are provided a VertexProgram. The programs send messages to one another according to the topological structure of the graph as a communication network (with random message passing possible). In many respects, the messages passed are like the OLTP traversers moving from vertex-to-vertex. However, all messages are moving independent of one another, in parallel.
   
  -GraphComputer and VertexProgram
  --------------------------------
  +[[vertexprogram]]
  +VertexProgram
  +-------------
   
   In Gremlin, it is possible to have the same traversal executed either using the standard OTLP-engine or have it executed using the OLAP-engine. The difference being where the query is submitted.
   
  
positive.code: </dependency>
  ----
  
  image:giraph-logo.png[width=75,float=left] link:http://giraph.apache.org[Giraph] is an Apache Foundation project focused on OLAP-based graph processing. Giraph makes use of the message-passing model of the distributed graph computing paradigm made popular by Google's Pregel. In Giraph, developers write "vertex programs" that get executed at each vertex in parallel. These programs can then communicate with one another in a bulk synchronous parallel (BSP) manner. This model aligns with TinkerPop3's `GraphComputer` API. TinkerPop3 provides an implementation of `GraphComputer` that works for Giraph called `GiraphGraphComputer`. Moreover, with TinkerPop3's MapReduce-framework, Giraph is extended to support an arbitrary number of MapReduce results to aggregate and present results. Finally, note that `GiraphGraph` also supports read-only OLTP operations (though via linear scans of HDFS serializations).
  
  IMPORTANT: image:hadoop-logo-notext.png[width=100,float=left] This section assumes that the user has a Hadoop 1.x cluster functioning. For more information on getting started with Hadoop, please see their link:http://hadoop.apache.org/docs/r1.2.1/single_node_setup.html[Single Node Setup] tutorial. Moreover, it is advisable that the reader also familiarize themselves with Giraph as well via their link:http://giraph.apache.org/quick_start.html[Getting Started] page.
  
  Installing Giraph-Gremlin
  ~~~~~~~~~~~~~~~~~~~~~~~~~
  
  To the `.bash_profile` file, add the following environmental variables (of course, be sure the directories are the respective locations on the local machine).
  
  [source,text]
  export GIRAPH_HOME=/usr/local/giraph-1.0.0
  export GIRAPH_GREMLIN_HOME=/usr/local/giraph-gremlin-3.0.0
  
  If using the Gremlin Console, it is important to install the Giraph-Gremlin plugin.
  
  [source,text]
  ----
  
negative.code: The `GiraphGraphComputer` makes use of a properties file much like any other `GraphComputer`. However, given the relationship to Hadoop which is property heavy, it is important to look at a particular properties file. The properties file below is located at `conf/giraph-kryo.properties'.
  
  [source,text]
  gremlin.inputLocation=tinkerpop-classic-vertices.gio
  giraph.vertexInputFormatClass=com.tinkerpop.gremlin.giraph.structure.io.kryo.KryoVertexInputFormat
  gremlin.outputLocation=output
  giraph.vertexOutputFormatClass=com.tinkerpop.gremlin.giraph.structure.io.kryo.KryoVertexOutputFormat
  gremlin.sideEffectOutputFormatClass=org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat
  gremlin.vertexProgram=com.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram
  gremlin.traversalVertexProgram.traversalSupplierClass=com.tinkerpop.gremlin.giraph.process.graph.example.TraversalSupplier1
  gremlin.jarsInDistributedCache=true
  gremlin.deriveComputerSideEffects=false
  giraph.minWorkers=2
  giraph.maxWorkers=2
  
  A review of the properties above are presented in the table below.
  
  [width="100%",cols="2,10",options="header"]
  |=========================================================
  |Property |Description
  |`gremlin.inputLocation` |The location of the input file(s) for Giraph to read the graph from.
  |`giraph.vertexInputFormatClass` |The format that the graph input file(s) are represented in.
  |`gremlin.outputLocation` |The location to write the computed Giraph graph to.
  |`giraph.vertexOutputFormatClass` |The format that the output file(s) should be represented in.
  |`gremlin.sideEffectOutputFormatClass` |The format of any resultant GraphComputer SideEffects.
  |`gremlin.vertexProgram` |The `VertexProgram` to distribute to all vertices in the `GiraphGraph`
  |`gremlin.traversalVertexProgram.traversalSupplierClass` |For `TraversalVertexProgram`, the location of the Gremlin traversal to use (if not using Gremlin Console).
  |`gremlin.jarsInDistributedCache` |Whether to upload the Giraph-Gremlin jars to Hadoop's distributed cache (necessary if jars are not on machines' classpaths).
  |`gremlin.deriveComputerSideEffects` |Whether or not `SideEffects` are yielded (requires an extra MapReduce job if true).
  |`giraph.minWorkers` |The minimum number of parallel workers to execute the vertices of the graph.
  |`giraph.maxWorkers` |The maximum number of parallel workers to execute the vertices of the graph.
  |=========================================================
  
  IMPORTANT: The maximum number of workers can be no larger than the number of map-slots in the Hadoop cluster minus 1. For example, if the Hadoop cluster has 4 map slots, then `giraph.maxWorkers` can not be larger than 3. One map-slot is reserved for the master compute node and all other slots can be allocated as workers to execute the `VertexProgram`s on the vertices of the graph.
  
  