So richten Sie die Titan Graph-Datenbank mit Cassandra und ElasticSearch unter Ubuntu 16.04 ein

Einführung

Titan ist eine Open-Source-Graphendatenbank, die hoch skalierbar ist. Eine Diagrammdatenbank ist eine Art NoSQL-Datenbank, in der alle Daten alsnodes undedges gespeichert werden. Eine Grafikdatenbank eignet sich für Anwendungen, die stark vernetzte Daten verwenden, wobei die Beziehung zwischen Daten ein wichtiger Bestandteil der Funktionalität der Anwendung ist, z. B. eine Website für soziale Netzwerke. Titan wird zum Speichern und Abfragen großer Datenmengen verwendet, die auf mehrere Maschinen verteilt sind. Es kann so konfiguriert werden, dass die verschiedenen verfügbaren Speicher-Backends wie Apache Cassandra, HBase und BerkeleyDB verwendet werden. Auf diese Weise können Sie in Zukunft eine Lieferantenbindung vermeiden, wenn Sie den Datenspeicher ändern müssen.

In diesem Tutorial installieren Sie Titan 1.0. Anschließend konfigurieren Sie Titan für die Verwendung von Cassandra und ElasticSearch, die beide im Lieferumfang von Titan enthalten sind. Cassandra fungiert als Datenspeicher, in dem die zugrunde liegenden Daten gespeichert sind, während ElasticSearch, eine Freitextsuchmaschine, für einige komplexe Suchvorgänge in der Datenbank verwendet werden kann. Sie werden auch Daten aus der Datenbank mit Gremlin erstellen und abfragen.

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie:

[[Schritt-1 - Herunterladen-Auspacken und Starten von Titan]] == Schritt 1 - Herunterladen, Auspacken und Starten von Titan

Um die Titan-Datenbank herunterzuladen, gehen Sie zutheir downloads page. Sie sehen zwei Titan-Distributionen zum Download. Für dieses Tutorial möchten wirTitan 1.0.0 with Hadoop 1. Dies ist die stabile Version. Laden Sie es mitwget auf Ihren Server herunter:

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

Sobald der Download abgeschlossen ist, entpacken Sie die Zip-Datei. Das Programm zum Entpacken von Dateien ist standardmäßig nicht installiert. Installiere es zuerst:

sudo apt-get install unzip

Dann entpacke Titan:

unzip titan-1.0.0-hadoop1.zip

Dadurch wird ein Verzeichnis mit dem Namentitan-1.0.0-hadoop erstellt.

Starten wir Titan, um sicherzustellen, dass alles funktioniert. Wechseln Sie in das Verzeichnistitan-1.0.0-hadoopund rufen Sie das Shell-Skript auf, um Titan zu starten.

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

Sie sehen eine Ausgabe ähnlich der folgenden:

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 ist auf eine Reihe anderer Tools angewiesen, um funktionieren zu können. Bei jedem Start von Titan werden also auch Cassandra, ElasticSearch und Gremlin-Server gestartet.

Sie können den Status des Titans überprüfen, indem Sie den folgenden Befehl ausführen.

./bin/titan.sh status

Sie sehen diese Ausgabe:

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

Im nächsten Schritt sehen Sie, wie Sie das Diagramm abfragen.

[[Schritt-2 - Abfragen des Diagramms mit Gremlin]] == Schritt 2 - Abfragen des Diagramms mit Gremlin

Gremlin ist einGraph Traversal Language, mit dem Graph-Datenbanken abgefragt, analysiert und bearbeitet werden. Nachdem Titan eingerichtet und gestartet wurde, werden Sie Gremlin verwenden, um Knoten und Kanten in Titan zu erstellen und abzufragen.

Um Gremlin zu verwenden, öffnen Sie die Gremlin-Konsole, indem Sie den folgenden Befehl eingeben.

./bin/gremlin.sh

Sie werden eine Antwort ähnlich der folgenden sehen:

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>

Die Gremlin-Konsole lädt mehrere Plugins, um titan- und gremlinspezifische Funktionen zu unterstützen.

Instanziieren Sie zunächst das Diagrammobjekt. Dieses Objekt stellt das Diagramm dar, an dem wir gerade arbeiten. Es gibt eine Reihe von Methoden, mit denen das Diagramm verwaltet werden kann, z. B. das Hinzufügen von Scheitelpunkten, das Erstellen von Beschriftungen und das Behandeln von Transaktionen. Führen Sie diesen Befehl aus, um das Diagrammobjekt zu instanziieren:

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

Sie sehen diese Ausgabe:

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

Die Ausgabe gibt den Objekttyp an, der von derTitanFactory.open()-Methode zurückgegeben wird, nämlichstandardtitangraph. Es gibt auch an, welches Speicher-Backend der Graph verwendet (cassandrathrift) und mit welchem ​​über localhost (127.0.0.1) verbunden ist.

Die Methodeopen()erstellt ein neues Titan-Diagramm oder öffnet ein vorhandenes mithilfe der Konfigurationsoptionen in der angegebenen Eigenschaftendatei. Die Konfigurationsdatei enthält die allgemeinen Konfigurationsoptionen wie das zu verwendende Speicher-Backend, das Caching-Backend und einige andere Optionen. Sie können eine benutzerdefinierte Konfigurationsdatei erstellen und diese anstelle der Standardeinstellungen verwenden, die Sie in Schritt 3 ausführen.

Sobald der Befehl ausgeführt wurde, wird das Diagrammobjekt instanziiert und in der Variablengraph gespeichert. Geben Siegraph. gefolgt vom SchlüsselTAB ein, um alle verfügbaren Eigenschaften und Methoden für das Diagrammobjekt anzuzeigen.

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

In Diagrammdatenbanken fragen Sie die Daten meistens nachtraversingab, anstatt wie in relationalen Datenbanken Datensätze mit Verknüpfungen und Indizes abzurufen. Um einen Graphen zu durchlaufen, benötigen wir eine Diagrammdurchlaufquelle aus der Referenzvariablengraph. Der folgende Befehl erreicht dies.

g = graph.traversal()

Sie führen die Durchquerungen mit dieserg-Variablen durch. Lassen Sie uns mit dieser Variablen ein paar Eckpunkte erstellen. Scheitelpunkte sind wie Zeilen in SQL. Jeder Scheitelpunkt hat einen Scheitelpunkttyp oderlabel und die zugehörigen Eigenschaften, analog zu Feldern in SQL. Führen Sie diesen Befehl aus:

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()

In diesem Beispiel haben wir zwei Scheitelpunkte mit den Bezeichnungenfish undcompany erstellt. Wir haben auch zwei Eigenschaften definiert, nämlichname undresidence für den ersten Scheitelpunkt undname undwebsite für den zweiten Scheitelpunkt. Greifen wir nun mit den Variablensammy undcompany auf diese Eckpunkte zu.

Führen Sie beispielsweise den folgenden Befehl aus, um alle Eigenschaften des ersten Scheitelpunkts aufzulisten:

g.V(sammy).properties()

Die Ausgabe sieht ungefähr so ​​aus:

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

Sie können dem Scheitelpunkt auch eine neue Eigenschaft hinzufügen. Fügen wir eine Farbe hinzu:

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

Definieren wir nun eine Beziehung zwischen diesen beiden Eckpunkten. Dies wird erreicht, indem einedge zwischen ihnen erstellt wird.

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

Dies erzeugt eine Kante zwischensammy undcompany mit der BezeichnunghasMascot und eine Eigenschaft mit dem Namenstatus mit dem Werthigh.

Kommen wir nun zum Maskottchen des Unternehmens:

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

Dies gibt die ausgehenden Scheitelpunkte vom Scheitelpunktcompany und die Kante zwischen ihnen alshasMascot zurück. Wir können auch das Gegenteil tun und die Firma mit dem Maskottchensammywie folgt in Verbindung bringen:

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

Dies sind ein paar grundlegende Gremlin-Befehle, mit denen Sie beginnen können. Weitere Informationen finden Sie in den beschreibendenApache Tinkerpop3 documentation.

Verlassen Sie die Gremlin-Konsole, indem SieCTRL+C drücken.

Fügen wir nun einige benutzerdefinierte Konfigurationsoptionen für Titan hinzu.

[[Schritt-3 - Konfigurieren von Titan]] == Schritt 3 - Konfigurieren von Titan

Erstellen wir eine neue Konfigurationsdatei, mit der Sie alle Ihre benutzerdefinierten Konfigurationsoptionen für Titan definieren können.

Titan hat eine steckbare Speicherschicht; Anstatt den Datenspeicher selbst zu verwalten, verwendet Titan eine andere Datenbank, um ihn zu verwalten. Titan bietet derzeit drei Optionen für die Speicherdatenbank: Cassandra, HBase und BerkeleyDB. In diesem Lernprogramm wird Cassandra als Speicher-Engine verwendet, da sie hochgradig skalierbar und hochverfügbar ist.

Erstellen Sie zuerst die Konfigurationsdatei:

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

Fügen Sie diese Zeilen hinzu, um zu definieren, was das Speicher-Backend ist und wo es verfügbar ist. Das Speicher-Backend ist aufcassandrathrift eingestellt, was besagt, dass wir Cassandra für die Speicherung mit derthrift-Schnittstelle für Cassandra verwenden:

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

storage.backend=cassandrathrift
storage.hostname=localhost

Fügen Sie dann diese drei Zeilen hinzu, um zu definieren, welches Such-Backend verwendet werden soll. Wir verwendenelasticsearch als Such-Backend.

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

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

Die dritte Zeile zeigt an, dass ElasticSearch ein Thin Client ist, der keine Daten speichert. Wenn Siefalse festlegen, wird ein regulärer ElasticSearch-Clusterknoten erstellt, in dem möglicherweise Daten gespeichert werden, die wir jetzt nicht möchten.

Fügen Sie abschließend diese Zeile hinzu, um Gremlin Server mitzuteilen, welche Art von Diagramm bereitgestellt werden soll.

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

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

Im Verzeichnisconf stehen eine Reihe von Beispielkonfigurationsdateien zur Verfügung, in denen Sie nachschlagen können.

Speichern Sie die Datei und beenden Sie den Editor.

Wir müssen diese neue Konfigurationsdatei zum Gremlin-Server hinzufügen. Öffnen Sie die Konfigurationsdatei des Gremlin Servers.

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

Navigieren Sie zum Abschnittgraphs und suchen Sie diese Zeile:

conf/gremlin-server/gremlin-server.yaml

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

Ersetzen Sie es mit diesem:

conf/gremlin-server/gremlin-server.yaml

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

Speichern und schließen Sie die Datei.

Starten Sie nun Titan neu, indem Sie Titan stoppen und erneut starten.

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

Nachdem wir eine benutzerdefinierte Konfiguration haben, konfigurieren wir Titan so, dass es als Dienst ausgeführt wird.

[[Schritt 4 - Verwalten von Titan mit Systemd]] == Schritt 4 - Verwalten von Titan mit Systemd

Wir sollten sicherstellen, dass Titan jedes Mal automatisch startet, wenn unser Server hochfährt. Wenn unser Server versehentlich neu gestartet wurde oder aus irgendeinem Grund neu gestartet werden musste, möchten wir, dass auch Titan startet.

Um dies zu konfigurieren, erstellen wir eine Systemd-Unit-Datei für Titan, damit wir sie verwalten können.

Zu Beginn erstellen wir eine Datei für unsere Anwendung im Verzeichnis/etc/systemd/system mit der Erweiterung.service:

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

Eine Unit-Datei besteht aus Abschnitten. Der Abschnitt[Unit] gibt die Metadaten und Abhängigkeiten unseres Dienstes an, einschließlich einer Beschreibung unseres Dienstes und des Zeitpunkts, zu dem unser Dienst gestartet werden soll.

Fügen Sie diese Konfiguration zur Datei hinzu:

/etc/systemd/system/titan.service

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

Wir geben an, dass der Dienstaftertarten soll, wenn das Netzwerkziel erreicht wurde. Mit anderen Worten, wir starten diesen Dienst erst, nachdem die Netzwerkdienste bereit sind.

Nach dem Abschnitt[Unit] definieren wir den Abschnitt[Service], in dem wir angeben, wie der Dienst gestartet werden soll. Fügen Sie dies zur Konfigurationsdatei hinzu:

/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

Wir definieren zuerst den Benutzer und die Gruppe, unter denen der Dienst ausgeführt wird. Dann definieren wir die Art der Dienstleistung, die es sein wird. Der Typ wird standardmäßig alssimple angenommen. Da das Startskript, mit dem wir Titan starten, andere untergeordnete Programme startet, geben wir den Diensttyp alsforking an.

Anschließend geben wir die UmgebungsvariablePATH, das Arbeitsverzeichnis von Titan und den Befehl zum Starten von Titan an. Wir weisen der VariablenExecStartden Befehl zum Starten von Titan zu.

Die VariablenExecStopdefinieren, wie der Dienst gestoppt werden soll.

Schließlich fügen wir den Abschnitt[Install] hinzu, der folgendermaßen aussieht:

/etc/systemd/system/titan.service

[Install]
WantedBy=multi-user.target

Im AbschnittInstall können Sie den Dienst aktivieren und deaktivieren. Die DirektiveWantedBy erstellt ein Verzeichnis mit dem Namenmulti-user.target im Verzeichnis/etc/systemd/system. Systemd erstellt dort eine symbolische Verknüpfung dieser Gerätedatei. Durch Deaktivieren dieses Dienstes wird diese Datei aus dem Verzeichnis entfernt.

Speichern Sie die Datei, schließen Sie den Editor und starten Sie den neuen Dienst:

sudo systemctl start titan

Aktivieren Sie dann diesen Dienst, sodass Titan bei jedem Start des Servers Folgendes startet:

sudo systemctl enable titan

Sie können den Status von Titan mit dem folgenden Befehl überprüfen:

sudo systemctl status titan

Weitere Informationen zu Unit-Dateien finden Sie im TutorialUnderstanding Systemd Units and Unit files.

Fazit

Sie haben jetzt ein grundlegendes Titan-Setup auf Ihrem Server installiert. Wenn Sie einen tieferen Einblick in die Architektur von Titan erhalten möchten, zögern Sie nicht, derenofficial documentation zu überprüfen.

Nachdem Sie Titan eingerichtet haben, sollten Sie mehr über Tinkerpop3 und Gremlin erfahren, indem Sie sich dieofficial documentationansehen.