JanusGraph mit Cloud Bigtable ausführen

In dieser Anleitung erfahren Sie, wie Sie JanusGraph in Google Cloud (GCP) ausführen. JanusGraph ist eine Grafikdatenbank, die das Arbeiten mit großen Datenmengen unterstützt. Mithilfe von Grafikdatenbanken können Sie Ihre Datenentitäten und die Beziehungen zwischen ihnen modellieren und somit neue Erkenntnisse gewinnen. In der Grafikterminologie werden Entitäten als Knoten oder Eckpunkte und Beziehungen als Kanten bezeichnet. Sowohl Eckpunkte als auch Kanten können zugehörige Attribute haben.

Beispiel für eine Attributgrafik

Abbildung 1. Beispiel für eine Attributgrafik

Mit Grafikdatenbanken können Sie eine Vielzahl von Domains und Aktivitäten modellieren:

  • Soziale Netzwerke
  • Betrugsanalysen
  • Physische Netzwerke

Für neue Grafikdatenbanken erstellen Sie manchmal Millionen oder sogar Milliarden von Eckpunkten und Kanten. Wenn Sie für JanusGraph als zugrunde liegende Speicherebene Cloud Bigtable verwenden, können Sie unabhängig voneinander sowohl schnelle Abfragen ausführen als auch Ihre Speicherebene für die Größe und den Durchsatz, die bzw. den Sie benötigen, skalieren. In dieser Anleitung erfahren Sie, wie Sie mit Cloud Bigtable eine skalierbare JanusGraph-Infrastruktur bereitstellen, mit der Sie dann die in Grafikdatenbanken bestehenden Beziehungen suchen können.

JanusGraph-Deployment mit Cloud Bigtable in GKE

Abbildung 2. JanusGraph-Deployment mit Cloud Bigtable in GKE

Ziele

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

  • Compute Engine, die von GKE verwendet wird
  • Cloud Bigtable

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweis

  1. Melden Sie sich bei Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.

  2. Wählen Sie in der Cloud Console auf der Seite für die Projektauswahl ein Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Cloud Bigtable, Cloud Bigtable Admin, Compute Engine, and GKE APIs aktivieren.

    Aktivieren Sie die APIs

Wenn Sie diese Anleitung abgeschlossen haben, können Sie laufende Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie im Abschnitt Bereinigen.

Umgebung vorbereiten

In dieser Anleitung verwenden Sie Cloud Shell zum Eingeben von Befehlen. Mit Cloud Shell erhalten Sie Zugriff auf die Befehlszeile der Cloud Console. Außerdem enthält Cloud Shell das Cloud SDK und andere Tools, die Sie für die Entwicklung auf der GCP brauchen. Cloud Shell wird als Fenster unten in der Cloud Console angezeigt. Die Initialisierung kann einige Minuten dauern, das Fenster ist aber sofort sichtbar.

  1. Cloud Shell aktivieren

    Cloud Shell aktivieren

  2. Legen Sie in Cloud Shell als Standardzone für Compute Engine die Zone fest, in der Sie Ihren Cloud Bigtable-Cluster und Ihren GKE-Cluster erstellen möchten. In dieser Anleitung wird us-central1-f verwendet.

    gcloud config set compute/zone us-central1-f
  3. Erstellen Sie einen GKE-Cluster zum Bereitstellen von JanusGraph:

    gcloud container clusters create janusgraph-tutorial --machine-type n1-standard-4 \
        --scopes "https://www.googleapis.com/auth/bigtable.admin","https://www.googleapis.com/auth/bigtable.data"
    
  4. Installieren Sie Helm in der Cloud Shell-Umgebung:

    curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
    

Cloud Bigtable-Instanz erstellen

In dieser Anleitung wird der Datenbankdienst "Cloud Bigtable" als JanusGraph-Speicher-Back-End verwendet, der schnell skaliert werden kann, um Ihre Anforderungen zu erfüllen. In dieser Anleitung wird ein Entwicklungscluster mit nur einem Knoten verwendet. Dies reicht für die Anleitung aus und ist außerdem kostengünstig. Sie können Ihre Projekte in einem Entwicklungscluster starten und zu einem größeren Produktionscluster übergehen, wenn Sie so weit sind, mit Produktionsdaten arbeiten zu können. In der Cloud Bigtable-Dokumentation finden Sie ausführliche Erklärungen zu Leistung und Skalierung, mit denen Sie die richtige Clustergröße für Ihre Arbeit ermitteln können.

Erstellen Sie mithilfe der folgenden Schritte eine Cloud Bigtable-Instanz:

  1. Wechseln Sie in der Cloud Console zur Seite Instanz erstellen.

    Zur Seite "Instanz erstellen"

  2. Geben Sie im Feld Instanzname einen Namen für die Instanz an. Sie können janusgraph oder einen Namen Ihrer Wahl verwenden, der aus Kleinbuchstaben bestehen muss. Nach der Eingabe des Instanznamens werden die Instanz-ID und die Cluster-ID automatisch festgelegt.

  3. Wählen Sie als Instanztyp die Option Entwicklung aus.

  4. Wählen Sie unter Zone den Wert us-central1-f oder die Zone aus, in der Sie zuvor den GKE-Cluster erstellt haben.

  5. Klicken Sie auf Erstellen, um die Instanz zu erstellen.

Notieren Sie sich die Instanz-ID, da Sie sie in einem späteren Schritt verwenden werden.

Helm konfigurieren

Mit Helm stellen Sie Anwendungen in Ihrem Kubernetes-Cluster bereit. Nachdem Sie den Cluster erstellt haben, konfigurieren Sie Helm für das Arbeiten mit dem Cluster.

  1. Fügen Sie die folgenden Befehle in Cloud Shell ein:

    kubectl create serviceaccount tiller --namespace kube-system
    kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin \
        --serviceaccount=kube-system:tiller
    helm init --service-account=tiller
    until (timeout 7 helm version > /dev/null 2>&1); do echo "Waiting for tiller install..."; done
    

    Möglicherweise wird Ihnen mehrfach die Ausgabe Waiting for tiller install... angezeigt. Sobald sie nicht mehr angezeigt wird, können Sie Helm mit Ihrem Kubernetes-Cluster verwenden.

JanusGraph und Elasticsearch mithilfe von Helm installieren

JanusGraph verwendet nicht nur Cloud Bigtable als Speicher-Back-End, sondern auch Elasticsearch als Indexierungs-Back-End.

In diesem Abschnitt stellen Sie mithilfe eines Helm-Diagramms in Ihrem Kubernetes-Cluster JanusGraph und Elasticsearch bereit. Wenn Sie das JanusGraph-Diagramm installieren, erhalten Sie automatisch auch Elasticsearch als Abhängigkeit, was den Prozess vereinfacht.

  1. Legen Sie in Cloud Shell eine Umgebungsvariable für den Wert der Cloud Bigtable-Instanz-ID fest, die Sie zuvor notiert haben. Ersetzen Sie [YOUR_INSTANCE_ID] durch die zuvor angegebene Instanz-ID.

    export INSTANCE_ID=[YOUR_INSTANCE_ID]

    Wenn Sie beispielsweise den Standardvorschlag janusgraph für Ihre Cloud Bigtable-Instanz-ID verwendet haben, würden Sie Folgendes ausführen:

    export INSTANCE_ID=janusgraph
  2. Erstellen Sie eine Datei namens values.yaml, die die spezifische Konfiguration enthält, die Helm bei der Installation von JanusGraph verwenden soll:

    cat > values.yaml << EOF
    replicaCount: 3
    service: type: LoadBalancer serviceAnnotations: cloud.google.com/load-balancer-type: "Internal"
    elasticsearch: deploy: true
    properties: storage.backend: hbase storage.directory: null storage.hbase.ext.google.bigtable.instance.id: $INSTANCE_ID storage.hbase.ext.google.bigtable.project.id: $GOOGLE_CLOUD_PROJECT storage.hbase.ext.hbase.client.connection.impl: com.google.cloud.bigtable.hbase1_x.BigtableConnection index.search.backend: elasticsearch index.search.directory: null cache.db-cache: true cache.db-cache-clean-wait: 20 cache.db-cache-time: 180000 cache.db-cache-size: 0.5
    persistence: enabled: false EOF
  3. Stellen Sie das JanusGraph-Helm-Diagramm mithilfe der von Ihnen erstellten values.yaml-Datei bereit:

    helm install --wait --timeout 600 --name janusgraph stable/janusgraph -f values.yaml
    

    Die Installation wird erst abgeschlossen, wenn alle Ressourcen bereit sind. Dieser Vorgang kann einige Minuten dauern.

JanusGraph-Deployment prüfen

Wenn der Befehl helm install ausgeführt worden ist, wird der Abschnitt NOTES ausgegeben. Darin ist ein Einstiegsszenario beschrieben. In Cloud Shell können Sie mithilfe der Schritte im Abschnitt NOTES testen, ob Ihre JanusGraph-Umgebung funktioniert.

  1. Legen Sie eine Umgebungsvariable mit dem Namen eines Kubernetes-Pods fest, der JanusGraph ausführt:

    export POD_NAME=$(kubectl get pods --namespace default -l "app=janusgraph,release=janusgraph" -o jsonpath="{.items[0].metadata.name}")
    
  2. Stellen Sie eine Verbindung zu dem Pod her und führen Sie die Gremlin-Shell aus:

    kubectl exec -it $POD_NAME -- /janusgraph-0.2.0-hadoop2/bin/gremlin.sh
    
  3. Stellen Sie über die Gremlin-Konsole eine Verbindung zum Apache TinkerPop-Server her:

    :remote connect tinkerpop.server conf/remote.yaml session
    :remote console
    

    Die Ausgabe sieht dann ungefähr so aus:

    gremlin> :remote connect tinkerpop.server conf/remote.yaml session
    ==>Configured localhost/127.0.0.1:8182-[b08972f2-a2aa-4312-8018-bcd11bc9812c]
    gremlin> :remote console
    ==>All scripts will now be sent to Gremlin Server - [localhost/127.0.0.1:8182]-[b08972f2-a2aa-4312-8018-bcd11bc9812c] - type ':remote console' to return to local mode
    gremlin>
    
  4. Führen Sie die folgenden Gremlin-Befehle aus, um zwei Eckpunkte und eine Kante zu erstellen:

    v1 = graph.addVertex(label, 'hello')
    v2 = graph.addVertex(label, 'world')
    v1.addEdge('followedBy', v2)
    graph.tx().commit()
    

    Die Ausgabe sieht dann ungefähr so aus:

    gremlin> v1 = graph.addVertex(label, 'hello')
    ==>v[4344]
    gremlin>  v2 = graph.addVertex(label, 'world')
    ==>v[40964152]
    gremlin>  v1.addEdge('followedBy', v2)
    ==>e[17j-3co-4fmd-oe054][4344-followedBy->40964152]
    gremlin>
    
  5. Senden Sie eine Gremlin-Abfrage, um zu erfahren, wie das Label des Eckpunkts lautet, der auf die vom Eckpunkt mit dem Label hello ausgehende Kante (out) folgt:

    g.V().has(label, 'hello').out('followedBy').label()
    

    Die Abfragesyntax wird im nächsten Abschnitt erläutert. Für den Moment ist nur wichtig zu wissen, dass Ihnen das Wort "world" als Ausgabe der Abfrage angezeigt wird:

    gremlin> g.V().has(label, 'hello').out('followedBy').label()
    ==>world
    

Beispiel-Dataset laden und abfragen

Nachdem Sie JanusGraph bereitgestellt haben und über Gremlin eine Verbindung zu dieser Grafikdatenbank herstellen können, können Sie jetzt mit dem Laden und Abfragen Ihrer eigenen Daten beginnen. Damit Sie nachvollziehen können, wie dieser Prozess aussieht, laden Sie das Beispiel-Dataset im Lieferumfang von JanusGraph: die Graph of the Gods (Grafik der Götter), in der mythologische Gottheiten und ihre Standortattribute dargestellt sind.

  1. Geben Sie in der Gremlin-Shell folgenden Befehl ein:

    GraphOfTheGodsFactory.load(graph)
    

    Wenn der Befehl abgeschlossen ist, wird null zurückgegeben:

    gremlin> GraphOfTheGodsFactory.load(graph)
    ==>null
    
  2. Wenn die Beispielgrafik geladen wurde, können Sie Abfragen zum Suchen in der Grafik senden. Wenn Sie beispielsweise alle Brüder von Jupiter finden möchten, geben Sie die folgende Abfrage ein:

    g.V().has('name', 'jupiter').out('brother').values('name')
    

    Sie können diese Abfrage in die einzelnen Schritte, die durchlaufen werden, aufschlüsseln:

    Durchlaufschritt Erklärung
    g.V() Es wird mit der Erfassung von Eckpunkten begonnen.
    has('name', 'jupiter') Darin wird nach einem Eckpunkt gesucht, dessen Attribut name den Wert jupiter hat.
    out('brother') Davon ausgehend wird allen Kanten gefolgt, die mit dem Label brother versehen sind.
    values('name') Für die Eckpunkte, zu denen diese Kanten führen, wird jeweils das Attribut name abgerufen.

    Im Folgenden ist die Ausgabe der Abfrage dargestellt:

    gremlin> g.V().has('name', 'jupiter').out('brother').values('name')
    ==>neptune
    ==>pluto
    

Wenn Sie sich mit den Durchlaufabfragen, die für das Dataset "Graph of the Gods" möglich sind, näher befassen möchten, können Sie weitere Beispielabfragen aus der JanusGraph-Dokumentation nutzen.

Bereinigen

So vermeiden Sie, dass Ihrem Google Cloud Platform-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden:

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite "Ressourcen verwalten"

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen .
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.

Weitere Informationen