概要
現在関わっているプロダクトがJanusgraphを用いている。開発を進める中で、グラフ構造を可視化したいというニーズがあったため、Gephiを用いてグラフの可視化をしました。本記事内では、チュートリアル用のグラフデータを用いて試しているので、実際のユースケースに合わせて、その辺はうまくやって下さい。
やったこと
- Janusgraphをdocker-composeで立ち上げる
- Janusgraphサーバー(gremlin-server)とGephiを接続して、グラフを可視化する
説明しないこと
- 今回の記事では、gremlinコマンドについての説明ができていません。
gremlinについて学習したい方は、参考資料に記載しているPRACTICAL GREMLINを参考にしてください。
動作環境
- maacOS Catalina ver.10.15.3
- Gephi 0.9.2
- Janusgraph 0.5.2
Janusgraphとは
-
オープンソースのグラフDBです。
-
Apache TinkerPopというグラフDB(OLTP)とグラフ分析(OLAP)のためのグラフコンピューティングフレームワークの、グラフDB部分としても使うことができます。
-
グラフトラバーサル言語にはGremlinを用います。グラフトラバーサル言語とは、RDBでいうSQLです。
-
データの永続化に用いるバックエンドのデータベースとしては、以下のデータベースを使うことができます。(2020/11/25)
Gephiとは
正確な表現は、公式にお願いするとして、ざっくりGephiとは、グラフやネットワークを可視化するオープンソースのソフトウェアです。
公式サイトの引用はこちら。
Gephi is the leading visualization and exploration software for all kinds of graphs and networks. Gephi is open-source and free.
https://gephi.org/
手順
- Gephiをインストール
- Gephiに必要なPluginをインストール
- Gephiでの設定
- Janusgraphサーバーを起動
- 4の中でgremlinコンソールを起動する
- gremlinコンソールとGephiを接続する
- トラバーサルを流して可視化する
- Gephiで可視化結果を確認する
1. Gephiをインストール
以下ダウンロードページからGephiのインストーラーをダウンロードする。
https://gephi.org/users/download/
2. Gephiに必要なPluginをインストール
この項では、Graph Streaming API
というプラグインをインストールします。これは、Gephiで作成したワークスペースにHTTPで接続するためのプラグインです。
1.Gephiを起動したらNew Project
を選択する
2. その後、メニューバーのTools > Plugins
を選択する
3. 下記画像のようにGraph Streaming
というプラグインを検索し、インストールする
4. インストールできたらGephiの再起動を促されるので、従順に再起動してください。
3. Gephiでの設定
この項では、ポートを開いて、外部からのリクエストを待つための設定をします。
- メニューバーの
Workspace > rename
を選択し、workspace1
とかに設定してください。ここで設定したワークスペースの名前が、Janusgraphから接続する際のパスになります。 - Gephi上のどこかに下記画像のようなStreamingウィンドウが表示されているはずなので見つけてください。(なければ、メニューバーの
Window > Streaming
を選択して表示させる。)
- 次に、Streamingウィンドウの
Settings...
をクリックします。すると、接続する際に用いる設定情報の確認・変更ができます。初期設定は以下のようになっています。
- 設定を終えたら、StreamingウィンドウのMasterを選択し、
Master Server
を右クリックします。すると、Start
が表示されるため、それも選択します。 - その後、
Master Server
左側のランプがからに変われば、Gephi側の設定は終了です。
4. Janusgraphサーバーを起動
この項では、docker-composeを用いて、Janusgraphサーバーを立ち上げます。立ち上げ方は、各々のユースケースに沿った方法で立ち上げてください。
1.下記githubレポジトリを手元にcloneしてきて、使ってみるのも良いと思います。
https://github.com/JanusGraph/janusgraph-docker
5. 4の中でgremlinコンソールを起動する
この項では、gremlinコンソールを起動します。gremlinコンソールとは、gremlinコマンドを実行するための対話型シェルです。
- 4で立ち上げたJanusgraphサーバー上で、
bin/gremlin.sh
を実行する - すると、下記のグレムリンみたいなやつが標準出力に現れ、gremlinコンソールを立ち上げてくれます。
\,,,/
(o o)
-----oOOo-(3)-oOOo-----
-
gremlin>
と表示され、コマンドを入力できる状態になっていればOKです。
6. gremlinコンソールとGephiを接続する
ようやく、この項でこの記事の主目的であるGephiとの接続設定をします。ここからの操作は全てgremlinコンソール上で実行します。
参考資料はこちらです。
Gephiのプラグインをインストールします。
gremlin> :plugin use tinkerpop.gephi
Gephiに接続します。
gremlin> :remote connect tinkerpop.gephi
==>Connection to Gephi - http://localhost:8080/workspace1 with stepDelay:1000, startRGBColor:[0.0, 1.0, 0.5], colorToFade:g, colorFadeRate:0.7, startSize:10.0,sizeDecrementRate:0.33
dockerでJanusgraphを立ち上げた場合、ホストPCのlocalhostを指定する場合は、host.docker.internal
になるため、接続情報を更新します。
gremlin> :remote config host host.docker.internal
==>Connection to Gephi - http://host.docker.internal:8080/workspace1 with stepDelay:1000, startRGBColor:[0.0, 1.0, 0.5], colorToFade:g, colorFadeRate:0.7, startSize:10.0,sizeDecrementRate:0.33
今回は、TinkerPopで用意されているチュートリアル用のグラフデータを用います。(その他のチュートリアル用グラフデータ)
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> :> graph
==>tinkergraph[vertices:6 edges:6]
==>false
7. トラバーサルを流して可視化する
Gephiで可視化したいグラフ構造を作るためのトラバーサルを作成します。
Gephiでトラバーサルが実行されていくのを可視化するために、以下の設定を追加します。graph
部分は、Graph
インスタンスじゃないとダメです。
:remote config visualTraversal graph
上記コマンドにより、vg
という可視化用のTraversalSource
が生成されますので、それを使用してトラバーサルを定義していきます。
;[]
を行末につけることで、トラバーサルの繰り返しを防止します。
gremlin> traversal = vg.V().in().out("knows").has("age",gt(30)).outE("created").has("weight", gt(0.5d)).inV();[]
Gephiにトラバーサルを流します。
gremlin> :> traversal
8. Gephiで可視化結果を確認する
この段階では、まだ下記の画像のような状態かと思います。(おそらく。)
この状態だと、何が何だかわからないため、見た目を整えます。以下画像を参考に色々いじってみてください。
その他
お役立ちgremlinコマンド
- gremlinコンソールを抜ける
gremlin> :exit
- Gephiで可視化しているグラフを消去する
gremlin> :> clear