序章

Titan は、高度にスケーラブルなオープンソースのグラフデータベースです。 グラフデータベースは、すべてのデータがノードおよびエッジとして格納される一種のNoSQLデータベースです。 グラフデータベースは、ソーシャルネットワーキングサイトのように、データ間の関係がアプリケーションの機能の重要な部分である、高度に接続されたデータを使用するアプリケーションに適しています。 Titanは、複数のマシンに分散されている大量のデータの保存とクエリに使用されます。 Apache Cassandra、HBase、BerkeleyDBなどの利用可能なさまざまなストレージバックエンドのいずれかを使用するように構成できます。 これにより、データストアを変更する必要がある場合に、将来的にベンダーロックインを回避しやすくなります。

このチュートリアルでは、Titan1.0をインストールします。 次に、CassandraとElasticSearchを使用するようにTitanを構成します。どちらも、Titanにバンドルされています。 Cassandraは、基になるデータを保持するデータストアとして機能しますが、フリーテキスト検索エンジンであるElasticSearchを使用して、データベースで高度な検索操作を実行できます。 また、Gremlinを使用して、データベースからデータを作成およびクエリします。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • root以外のユーザーとファイアウォールを備えた2GB以上のRAMを備えた1台のUbuntu16.04サーバー。 これを設定するには、 Ubuntu16.04を使用したサーバーの初期設定に従います。
  • Oracle JDK 8がインストールされました。これは、このJavaインストール記事の「OracleJDKのインストール」セクションに従って実行できます。

ステップ1— Titanのダウンロード、解凍、起動

Titanデータベースをダウンロードするには、ダウンロードページにアクセスしてください。 ダウンロード可能な2つのTitanディストリビューションが表示されます。 このチュートリアルでは、Titan1.0.0とHadoop1が必要です。 これは安定したリリースです。 を使用してサーバーにダウンロードします wget:

  1. wget http://s3.thinkaurelius.com/downloads/titan/titan-1.0.0-hadoop1.zip

ダウンロードが完了したら、zipファイルを解凍します。 ファイルを解凍するプログラムはデフォルトではインストールされていません。 最初にインストールします。

  1. sudo apt-get install unzip

次に、Titanを解凍します。

  1. unzip titan-1.0.0-hadoop1.zip

これにより、という名前のディレクトリが作成されます titan-1.0.0-hadoop.

すべてが機能することを確認するためにTitanを起動しましょう。 に変更します titan-1.0.0-hadoop ディレクトリを作成し、シェルスクリプトを呼び出してTitanを起動します。

  1. cd titan-1.0.0-hadoop1
  2. ./bin/titan.sh start

次のような出力が表示されます。

Output
Forking Cassandra... Running `nodetool statusthrift`... OK (returned exit status 0 and printed string "running"). Forking Elasticsearch... Connecting to Elasticsearch (127.0.0.1:9300)...... OK (connected to 127.0.0.1:9300). Forking Gremlin-Server... Connecting to Gremlin-Server (127.0.0.1:8182)...... OK (connected to 127.0.0.1:8182). Run gremlin.sh to connect.

Titanは、他の多くのツールに依存しています。 そのため、Titanが起動されるたびに、Cassandra、ElasticSearch、Gremlin-Serverも一緒に起動されます。

次のコマンドを実行すると、Titanのステータスを確認できます。

  1. ./bin/titan.sh status

次の出力が表示されます。

Output
Gremlin-Server (org.apache.tinkerpop.gremlin.server.GremlinServer) is running with pid 7490 Cassandra (org.apache.cassandra.service.CassandraDaemon) is running with pid 7077 Elasticsearch (org.elasticsearch.bootstrap.Elasticsearch) is running with pid 7358

次のステップでは、グラフをクエリする方法を確認します。

ステップ2—グレムリンを使用してグラフをクエリする

Gremlin は、 Graph Traversal Language であり、グラフデータベースのクエリ、分析、および操作に使用されます。 Titanのセットアップと開始が完了したので、Gremlinを使用して、Titanからノードとエッジを作成およびクエリします。

グレムリンを使用するには、次のコマンドを発行してグレムリンコンソールを開きます。

  1. ./bin/gremlin.sh

次のような応答が表示されます。

Output
\,,,/ (o o) -----oOOo-(3)-oOOo----- plugin activated: tinkerpop.server plugin activated: tinkerpop.hadoop plugin activated: tinkerpop.utilities plugin activated: aurelius.titan plugin activated: tinkerpop.tinkergraph gremlin>

Gremlin Consoleは、TitanおよびGremlin固有の機能をサポートするためにいくつかのプラグインをロードします。

まず、グラフオブジェクトをインスタンス化します。 このオブジェクトは、現在作業中のグラフを表します。 頂点の追加、ラベルの作成、トランザクションの処理など、グラフの管理に役立つメソッドがいくつかあります。 次のコマンドを実行して、グラフオブジェクトをインスタンス化します。

  1. graph = TitanFactory.open('conf/titan-cassandra-es.properties')

次の出力が表示されます。

Output
==>standardtitangraph[cassandrathrift:[127.0.0.1]]

出力は、によって返されるオブジェクトのタイプを指定します TitanFactory.open() メソッド、これは standardtitangraph. また、グラフが使用するストレージバックエンドも示します(cassandrathrift)、およびローカルホストを介して接続されていること(127.0.0.1).

The open() メソッドは、指定されたプロパティファイルにある構成オプションを使用して、新しいTitanグラフを作成するか、既存のグラフを開きます。 構成ファイルには、使用するストレージバックエンド、キャッシュバックエンド、その他のいくつかのオプションなどの高レベルの構成オプションが含まれています。 カスタム構成ファイルを作成して、ステップ3で行うデフォルトの代わりに使用できます。

コマンドが実行されると、グラフオブジェクトがインスタンス化され、 graph 変数。 グラフオブジェクトで使用可能なすべてのプロパティとメソッドを確認するには、次のように入力します。 graph. 、続いて TAB 鍵:

gremlin> graph.
addVertex(                    assignID(                     buildTransaction()            close()                       
closeTransaction(             commit(                       compute(                      compute()                     
configuration()               containsEdgeLabel(            containsPropertyKey(          containsRelationType(         
containsVertexLabel(          edgeMultiQuery(               edgeQuery(                    edges(                        
features()                    getEdgeLabel(                 getOrCreateEdgeLabel(         getOrCreatePropertyKey(       
...
...    

グラフデータベースでは、リレーショナルデータベースのように結合とインデックスを使用してレコードを取得するのではなく、主にトラバースによってデータをクエリします。 グラフをトラバースするには、からのグラフトラバーサルソースが必要です。 graph 参照変数。 次のコマンドはこれを実現します。

  1. g = graph.traversal()

これでトラバーサルを実行します g 変数。 その変数を使用して、いくつかの頂点を作成しましょう。 頂点はSQLの行のようなものです。 各頂点には頂点タイプまたは label およびそれに関連するプロパティ。SQLのフィールドに類似しています。 次のコマンドを実行します。

  1. sammy = g.addV(label, 'fish', 'name', 'Sammy', 'residence', 'The Deep Blue Sea').next()
  2. company = g.addV(label, 'company', 'name', 'DigitalOcean', 'website', 'www.digitalocean.com').next()

この例では、ラベル付きの2つの頂点を作成しました fishcompany それぞれ。 また、2つのプロパティを定義しました。 nameresidence 最初の頂点の場合、および namewebsite 2番目の頂点。 変数を使用してこれらの頂点にアクセスしましょう sammycompany.

たとえば、最初の頂点のすべてのプロパティを一覧表示するには、次のコマンドを実行します。

  1. g.V(sammy).properties()

出力は次のようになります。

Output
==>vp[name->Sammy] ==>vp[residence->The Deep Blue Sea]

頂点に新しいプロパティを追加することもできます。 色を追加しましょう:

  1. g.V(sammy).property('color', 'blue')

次に、これら2つの頂点間の関係を定義しましょう。 これは、を作成することによって達成されます edge それらの間の。

  1. company.addEdge('hasMascot', sammy, 'status', 'high')

これにより、間にエッジが作成されます sammycompany ラベル付き hasMascot、およびという名前のプロパティ status 値で high.

それでは、会社のマスコットを入手しましょう。

  1. g.V(company).out('hasMascot')

これにより、から出て行く頂点が返されます。 company 頂点、およびそれらの間のエッジは次のようにラベル付けされます hasMascot. 逆に、マスコットに関連する会社を取得することもできます sammy このような:

  1. g.V(sammy).in('hasMascot')

これらは、始めるためのいくつかの基本的なGremlinコマンドです。 詳細については、説明的なApacheTinkerpop3ドキュメントをご覧ください。

を押してGremlinコンソールを終了します CTRL+C.

次に、Titanのカスタム構成オプションをいくつか追加しましょう。

ステップ3—Titanの構成

Titanのすべてのカスタム構成オプションを定義するために使用できる新しい構成ファイルを作成しましょう。

Titanにはプラグ可能なストレージレイヤーがあります。 Titanは、データストレージ自体を処理する代わりに、別のデータベースを使用してデータストレージを処理します。 Titanは現在、ストレージデータベースにCassandra、HBase、BerkeleyDBの3つのオプションを提供しています。 このチュートリアルでは、Cassandraをストレージエンジンとして使用します。これは、拡張性が高く、可用性が高いためです。

まず、構成ファイルを作成します。

  1. nano conf/gremlin-server/custom-titan-config.properties

これらの行を追加して、ストレージバックエンドとは何か、およびそれが使用可能な場所を定義します。 ストレージバックエンドはに設定されています cassandrathrift これは、Cassandraのthriftインターフェースを使用したストレージにCassandraを使用していることを示しています。

conf / gremlin-server / custom-titan-config.properties
storage.backend=cassandrathrift
storage.hostname=localhost

次に、これらの3行を追加して、使用する検索バックエンドを定義します。 使用します elasticsearch 検索バックエンドとして。

conf / gremlin-server / custom-titan-config.properties
...
index.search.backend=elasticsearch
index.search.hostname=localhost
index.search.elasticsearch.client-only=true

3行目は、ElasticSearchがデータを保存しないシンクライアントであることを示しています。 に設定する false データを保存する可能性のある通常のElasticSearchクラスターノードを作成しますが、現在は必要ありません。

最後に、この行を追加して、GremlinServerに提供するグラフのタイプを通知します。

conf / gremlin-server / custom-titan-config.properties
...
gremlin.graph=com.thinkaurelius.titan.core.TitanFactory

で利用可能な設定ファイルの例がいくつかあります conf 参照用に調べることができるディレクトリ。

ファイルを保存して、エディターを終了します。

この新しい構成ファイルをGremlinサーバーに追加する必要があります。 GremlinServerの構成ファイルを開きます。

  1. nano conf/gremlin-server/gremlin-server.yaml

に移動します graphs セクションとこの行を見つけます:

conf / gremlin-server / gremlin-server.yaml
..
 graph: conf/gremlin-server/titan-berkeleyje-server.properties}
..

これに置き換えます:

conf / gremlin-server / gremlin-server.yaml
..
 graph: conf/gremlin-server/custom-titan-config.properties}
..

ファイルを保存して終了します。

次に、Titanを停止して再起動し、Titanを再起動します。

  1. ./bin/titan.sh stop
  2. ./bin/titan.sh start

カスタム構成ができたので、サービスとして実行するようにTitanを構成しましょう。

ステップ4—SystemdでTitanを管理する

サーバーが起動するたびにTitanが自動的に起動することを確認する必要があります。 サーバーが誤って再起動された場合、または何らかの理由で再起動する必要があった場合は、Titanも起動する必要があります。

これを構成するには、Titan用のSystemdユニットファイルを作成して管理できるようにします。

まず、アプリケーション用のファイルを /etc/systemd/system ディレクトリと .service 拡大:

  1. sudo nano /etc/systemd/system/titan.service

ユニットファイルはセクションで構成されています。 The [Unit] セクションでは、サービスの説明やサービスの開始時期など、サービスのメタデータと依存関係を指定します。

この構成をファイルに追加します。

/etc/systemd/system/titan.service
[Unit]
Description=The Titan database
After=network.target

ネットワークターゲットに到達した後にサービスを開始するように指定します。 つまり、このサービスは、ネットワークサービスの準備ができてから開始します。

後に [Unit] セクションでは、 [Service] サービスの開始方法を指定するセクション。 これを構成ファイルに追加します。

/etc/systemd/system/titan.service
[Service]
User=sammy
Group=www-data
Type=forking
Environment="PATH=/home/sammy/titan-1.0.0-hadoop1/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
WorkingDirectory=/home/sammy/titan-1.0.0-hadoop1/
ExecStart=/home/sammy/titan-1.0.0-hadoop1/bin/titan.sh start
ExecStop=/home/sammy/titan-1.0.0-hadoop1/bin/titan.sh stop

まず、サービスを実行するユーザーとグループを定義します。 次に、サービスの種類を定義します。 タイプは simple デフォルトでは。 Titanの起動に使用している起動スクリプトは他の子プログラムを起動するため、サービスタイプを次のように指定します。 forking.

次に、 PATH 環境変数、Titanの作業ディレクトリ、およびTitanを起動するために実行するコマンド。 Titanを起動するコマンドを ExecStart 変数。

The ExecStop 変数は、サービスを停止する方法を定義します。

最後に、 [Install] 次のようなセクション:

/etc/systemd/system/titan.service
[Install]
WantedBy=multi-user.target

The Install セクションでは、サービスを有効または無効にできます。 The WantedBy ディレクティブは、というディレクトリを作成します multi-user.target/etc/systemd/system ディレクトリ。 Systemdは、このユニットファイルのシンボリックリンクをそこに作成します。 このサービスを無効にすると、このファイルがディレクトリから削除されます。

ファイルを保存し、エディターを閉じて、新しいサービスを開始します。

  1. sudo systemctl start titan

次に、このサービスを有効にして、サーバーが起動するたびにTitanが起動するようにします。

  1. sudo systemctl enable titan

次のコマンドを使用して、Titanのステータスを確認できます。

  1. sudo systemctl status titan

ユニットファイルの詳細については、チュートリアルSystemdユニットとユニットファイルについてをお読みください。

結論

これで、基本的なTitanセットアップがサーバーにインストールされました。 Titanのアーキテクチャを詳しく知りたい場合は、遠慮なく公式ドキュメントをチェックしてください。

Titanをセットアップしたので、公式ドキュメントを参照して、Tinkerpop3とGremlinについて詳しく知る必要があります。