Ubuntu 16.04でCassandraとElasticSearchを使用してTitan Graphデータベースをセットアップする方法

前書き

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

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

前提条件

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

  • 非ルートユーザーとファイアウォールを備えた少なくとも2 GBのRAMを備えた1つのUbuntu 16.04サーバー。 これは、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [Ubuntu 16.04での初期サーバーセットアップ]に従って設定できます。

  • Oracle JDK 8がインストールされています。これは、https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-の「Oracle JDKのインストール」セクションに従って実行できます。 ubuntu-16-04 [このJavaインストール記事]。

ステップ1-Titanのダウンロード、展開、起動

Titanデータベースをダウンロードするには、https://github.com/thinkaurelius/titan/wiki/Downloads [ダウンロードページ]にアクセスしてください。 ダウンロード可能な2つのTitanディストリビューションが表示されます。 このチュートリアルでは、* Titan 1.0.0 with Hadoop 1 *が必要です。 これは安定版リリースです。 `+ wget +`でサーバーにダウンロードします:

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

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

sudo apt-get install unzip

次に、Titanを解凍します。

unzip titan-1.0.0-hadoop1.zip

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

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

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

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

OutputForking 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のステータスを確認できます。

./bin/titan.sh status

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

OutputGremlin-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を使用してグラフを照会する

Gremlinは、Graphデータベースのクエリ、分析、操作に使用される_Graph Traversal Language_です。 Titanがセットアップおよび開始されたので、Gremlinを使用してTitanからノードとエッジを作成および照会します。

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

./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コンソールは、TitanおよびGremlin固有の機能をサポートするためのいくつかのプラグインをロードします。

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

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

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

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

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

`+ 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(
...
...

グラフデータベースでは、リレーショナルデータベースのように結合やインデックスを使用してレコードを取得するのではなく、主にhttps://en.wikipedia.org/wiki/Graph_traversal[traversing]でデータをクエリします。 グラフをトラバースするには、参照変数 `+ graph`からのグラフトラバーサルソースが必要です。 次のコマンドはこれを実現します。

g = graph.traversal()

この `+ g `変数を使用してトラバーサルを実行します。 その変数を使用して、いくつかの頂点を作成しましょう。 頂点はSQLの行に似ています。 各頂点には、頂点タイプまたは「 label +」とそれに関連するプロパティがあり、SQLのフィールドに似ています。 このコマンドを実行してください。

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

この例では、それぞれラベル「+ fish 」と「 company 」のラベルを持つ2つの頂点を作成しました。 また、最初の頂点には「 name 」と「 residence 」、2番目の頂点には「 name 」と「 website 」という2つのプロパティを定義しました。 変数「 sammy」と「+ company」を使用して、これらの頂点にアクセスしましょう。

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

g.V(sammy).properties()

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

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

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

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

次に、これら2つの頂点間の関係を定義します。 これは、それらの間に `+ edge +`を作成することで実現されます。

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

これにより、ラベル「+ hasMascot 」で「 sammy」と「+ company」の間にエッジが作成され、値「+ high 」で「 status +」という名前のプロパティが作成されます。

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

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

これは、 `+ company `頂点から出て行く頂点と、それらの間のエッジに ` hasMascot `というラベルが付けられたものを返します。 逆を行い、次のようにマスコット「 sammy +」に関連付けられた会社を取得することもできます。

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

これらは、始めるためのいくつかの基本的なGremlinコマンドです。 詳細については、説明的なhttp://tinkerpop.apache.org/docs/3.0.0-incubating/[Apache Tinkerpop3 documentation]をご覧ください。

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

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

ステップ3-Titanの構成

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

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

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

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

これらの行を追加して、ストレージバックエンドとその場所を定義します。 ストレージバックエンドは `+ cassandrathrift +`に設定されており、Cassandraのhttps://wiki.apache.org/cassandra/ThriftInterface[thrift]インターフェイスでCassandraをストレージに使用していることを示しています。

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

storage.backend=
storage.hostname=

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

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

...
index.search.backend=
index.search.hostname=
index.search.elasticsearch.client-only=

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

最後に、この行を追加して、Gremlin Serverが提供するグラフのタイプを指定します。

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

...
gremlin.graph=com.thinkaurelius.titan.core.TitanFactory

`+ conf +`ディレクトリには多くの設定ファイルの例があり、参考のために調べることができます。

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

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

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/}
..

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

ここで、Titanを停止して再起動し、Titanを再起動します。

./bin/titan.sh stop
./bin/titan.sh start

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

ステップ4-Systemdを使用したTitanの管理

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

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

最初に、アプリケーションのファイルを + / etc / systemd / system`ディレクトリ内に作成し、 + .service ie`拡張子を付けます。

sudo nano /etc/systemd/system/

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

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

/etc/systemd/system/titan.service

[Unit]
Description=The Titan database
After=network.target

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

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

/etc/systemd/system/titan.service

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

まず、サービスを実行するユーザーとグループを定義します。 次に、サービスのタイプを定義します。 タイプはデフォルトで `+ simple `であると想定されます。 Titanの起動に使用する起動スクリプトは他の子プログラムを起動するため、サービスタイプを「 forking +」として指定します。

次に、「+ PATH 」環境変数、Titanの作業ディレクトリ、およびTitanを起動するために実行するコマンドを指定します。 Titanを起動するコマンドを ` ExecStart +`変数に割り当てます。

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

最後に、次のような `+ [Install] +`セクションを追加します。

/etc/systemd/system/titan.service

[Install]
WantedBy=multi-user.target

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

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

sudo systemctl start

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

sudo systemctl enable

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

sudo systemctl status

ユニットファイルの詳細については、チュートリアルhttps://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files[Systemdユニットとユニットファイルについて]を参照してください。

結論

これで、基本的なTitanセットアップがサーバーにインストールされました。 Titanのアーキテクチャをさらに詳しく知りたい場合は、http://s3.thinkaurelius.com/docs/titan/1.0.0/ [公式ドキュメント]をご覧ください。

Titanをセットアップしたので、http://tinkerpop.apache.org/docs/current/reference/ [公式ドキュメント]を参照して、Tinkerpop3とGremlinについてさらに学習する必要があります。

前の投稿:Goの遅延を理解する
次の投稿:Ubuntu 14.04でngx_pagespeedをNginxに追加する方法