Cyclops is called Lyra within our lab during its development. 
In the rest of this document, we will use Lyra to refer to Cyclops.

Lyra is a new vertex-oriented graph-parallel framework
for writing distributed graph analytics. It differs from existing graph 
computation framworks by synchronously computing over a distributed immutable view, 
which grants a vertex with read-only accesses to all its neighboring vertices. 
The view is provided via readonly replication of vertices for edges spanning machines during agraph cut. 
Lyra follows a centralized computation model by assigning a master vertex to update 
and propagate the value to its replicas unidirectionally in each iteration, 
which significantly reduces messages and avoid contention on replicas. 
Lyra also provides multi-core support, which aggregates messages and replicas in a single multicore machine 
and transparently decomposes each worker into multiple threads on demand for different stages of computation.

We have implemented Lyra based on an open-source Pregel clone called Hama. 
Our evaluation shows that Lyra significantly outperforms Hama and has comparable performance 
with PowerGraph (written in C++) despite the language difference, 
due to the significantly lower number of messages and avoided contention.

Lyra code is in the hama-0.6.0 directory, the hama-0.6.0-orig contains the original Hama code.

Quick Start:
1. Compile the code:
    mvn install package -Dmaven.test.skip=true

2. Setup the environment:
    Please refer to Hama installation guide. 
    https://issues.apache.org/jira/secure/attachment/12528220/ApacheHamaInstallationGuide.pdf

3. Start Lyra:
    First start HDFS
    Then run:
	cd hama-0.6.0
	bin/start-bspd.sh

4. Run an application:
E.g. Running PageRank algorithm on web google graph (the data can be access on http://snap.stanford.edu/data/)
    bin/hama jar examples/target/hama-examples-0.6.0.jar pagerank /dataset/adj-web.txt /output/pagerank/tmp 48 30 0 0.0000000001

Note:
  This command will create a PageRank graph job in the hama-example-0.6.0.jar.
  The job will be executed by 48 workers and will run at most 30 iterations.
  '0' indicates we will use simple hash partition and the last argument is the convergent error of PageRank.
  For detailed arguments information, please refer to the code. 

