Gelly: Flink Graph API
Gelly is a Graph API for Flink. It contains a set of methods and utilities which aim to simplify the development of graph analysis applications in Flink. In Gelly, graphs can be transformed and modified using high-level functions similar to the ones provided by the batch processing API. Gelly provides methods to create, transform and modify graphs, as well as a library of graph algorithms.
Using Gelly
Gelly is currently part of the libraries Maven project. All relevant classes are located in the org.apache.flink.graph package.
Add the following dependency to your pom.xml
to use Gelly.
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-gelly_2.11</artifactId>
<version>1.10.0</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-gelly-scala_2.11</artifactId>
<version>1.10.0</version>
</dependency>
Note that Gelly is not part of the binary distribution. See linking forinstructions on packaging Gelly libraries into Flink user programs.
The remaining sections provide a description of available methods and present several examples of how to use Gelly and how to mix it with the Flink DataSet API.
Running Gelly Examples
The Gelly library jars are provided in the Flink distributionin the opt directory (for versions older than Flink 1.2 these can be manually downloaded fromMaven Central). To run the Gelly examples the flink-gelly (forJava) or flink-gelly-scala (for Scala) jar must be copied to Flink’s lib directory.
cp opt/flink-gelly_*.jar lib/
cp opt/flink-gelly-scala_*.jar lib/
Gelly’s examples jar includes drivers for each of the library methods and is provided in the examples directory.After configuring and starting the cluster, list the available algorithm classes:
./bin/start-cluster.sh
./bin/flink run examples/gelly/flink-gelly-examples_*.jar
The Gelly drivers can generate graph data or read the edge list from a CSV file (each node in a cluster must have accessto the input file). The algorithm description, available inputs and outputs, and configuration are displayed when analgorithm is selected. Print usage for JaccardIndex:
./bin/flink run examples/gelly/flink-gelly-examples_*.jar --algorithm JaccardIndex
Display graph metrics for a million vertex graph:
./bin/flink run examples/gelly/flink-gelly-examples_*.jar \
--algorithm GraphMetrics --order directed \
--input RMatGraph --type integer --scale 20 --simplify directed \
--output print
The size of the graph is adjusted by the —scale and —edge_factor parameters. Thelibrary generator provides access to additional configuration to adjust thepower-law skew and random noise.
Sample social network data is provided by the Stanford Network Analysis Project.The com-lj data set is a good starter size.Run a few algorithms and monitor the job progress in Flink’s Web UI:
wget -O - http://snap.stanford.edu/data/bigdata/communities/com-lj.ungraph.txt.gz | gunzip -c > com-lj.ungraph.txt
./bin/flink run -q examples/gelly/flink-gelly-examples_*.jar \
--algorithm GraphMetrics --order undirected \
--input CSV --type integer --simplify undirected --input_filename com-lj.ungraph.txt --input_field_delimiter $'\t' \
--output print
./bin/flink run -q examples/gelly/flink-gelly-examples_*.jar \
--algorithm ClusteringCoefficient --order undirected \
--input CSV --type integer --simplify undirected --input_filename com-lj.ungraph.txt --input_field_delimiter $'\t' \
--output hash
./bin/flink run -q examples/gelly/flink-gelly-examples_*.jar \
--algorithm JaccardIndex \
--input CSV --type integer --simplify undirected --input_filename com-lj.ungraph.txt --input_field_delimiter $'\t' \
--output hash
Please submit feature requests and report issues on the user mailing listor Flink Jira. We welcome suggestions for new algorithms and features aswell as code contributions.