Migration von Blazegraph zu Amazon Neptune - Amazon Neptune

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Migration von Blazegraph zu Amazon Neptune

Wenn Sie einen Graphen im Open-Source-Blazegraph-RDF-Triplestore haben, können Sie mithilfe der folgenden Schritte zu Ihren Graph-Daten in Amazon Neptune migrieren:

  • Bereitstellen der AWS-Infrastruktur. Stellen Sie zunächst die erforderliche Neptune-Infrastruktur mithilfe einer AWS-CloudFormation-Vorlage bereit (siehe DB-Cluster erstellen).

  • Exportieren von Daten aus Blazegraph. Es gibt zwei Hauptmethoden für den Export von Daten aus Blazegraph, nämlich die Verwendung von SPARQL CONSTRUCT-Abfragen oder die Verwendung des Blazegraph-Export-Dienstprogramms.

  • Importieren der Daten in Neptune. Anschließend können Sie die exportierten Datendateien mit der Neptune-Workbench und Neptune-Massen-Loader in Neptune laden.

Diese Vorgehensweise ist auch generell für die Migration von anderen RDF-Triplestore-Datenbanken anwendbar.

Kompatibilität von Blazegraph mit Neptune

Bevor Sie Ihre Grafikdaten zu Neptune migrieren, sollten Sie sich einiger signifikanter Unterschiede zwischen Blazegraph und Neptune bewusst sein. Diese Unterschiede können Änderungen an den Abfragen, der Anwendungsarchitektur oder beidem erfordern oder die Migration sogar unmöglich machen:

  • Full-text search – In Blazegraph können Sie entweder die interne Volltextsuche oder externe Volltextsuchfunktionen über eine Integration mit Apache Solr verwenden. Wenn Sie eines dieser Features verwenden, bleiben Sie bei den neuesten Updates der von Neptune unterstützten Volltextsuch-Features auf dem Laufenden. Siehe Neptun-Volltextsuche.

  • Query hints – Sowohl Blazegraph als auch Neptune erweitern SPARQL mithilfe des Konzepts der Abfragehinweise. Während einer Migration müssen Sie alle von Ihnen verwendeten Abfragehinweise migrieren. Hinweise zu den neuesten Abfragehinweisen, die Neptune unterstützt, finden Sie unter SPARQLHinweise zur Abfrage.

  • Inferenz – Blazegraph unterstützt Inferenz als konfigurierbare Option im Triple-Modus, aber nicht im Quads-Modus. Neptune unterstützt derzeit noch keine Inferenz.

  • Geospatiale Suche – Blazegraph unterstützt die Konfiguration von Namespaces, die Geodatenunterstützung ermöglichen. Dieses Feature ist in Neptune noch nicht verfügbar.

  • Mehrmandantenfähigkeit – Blazegraph unterstützt die Mehrmandantenfähigkeit innerhalb einer einzigen Datenbank. In Neptune wird die Multi-Tenancy entweder durch das Speichern von Daten in benannten Graphen und die Verwendung der USING NAMED-Klauseln für SPARQL-Abfragen oder durch die Erstellung eines separaten Datenbank-Clusters für jeden Mandanten unterstützt.

  • Verbund – Neptune unterstützt derzeit den SPARQL 1.1-Verbund zu Speicherorten, auf die die Neptune-Instance zugreifen kann, z. B. innerhalb der privaten VPC, über VPCs hinweg oder für externe Internet-Endpunkte. Abhängig von der spezifischen Konfiguration und den erforderlichen Verbundendpunkten benötigen Sie möglicherweise eine zusätzliche Netzwerkkonfiguration.

  • Blazegraph-Standarderweiterungen – Blazegraph enthält mehrere Erweiterungen sowohl der SPARQL- als auch der REST-API-Standards, wohingegen Neptune nur mit den Standardspezifikationen selbst kompatibel ist. Dies kann Änderungen an Ihrer Anwendung erfordern oder die Migration erschweren.

Bereitstellen der AWS-Infrastruktur für Neptune

Sie können die erforderliche AWS-Infrastruktur zwar manuell über die AWS Management Console oder AWS CLI erstellen, es ist jedoch häufig praktischer, stattdessen eine CloudFormation-Vorlage zu verwenden, wie unten beschrieben:

Bereitstellung von Neptune mithilfe einer CloudFormation-Vorlage:
  1. Navigieren Sie zu Unter Verwendung eines AWS CloudFormation Stack zum Erstellen eines Neptune-DB-Clusters.

  2. Wählen Sie Stack starten in Ihrer bevorzugten Region.

  3. Stellen Sie die erforderlichen Parameter ein (Stackname und EC2SSHKeyPairName). Stellen Sie außerdem die folgenden optionalen Parameter ein, um den Migrationsprozess zu vereinfachen:

    • Setzen Sie AttachBulkloadIAMRoleToNeptuneCluster auf „true“. Dieser Parameter ermöglicht das Erstellen und Anfügen der entsprechenden IAM-Rolle an Ihren Cluster, um das Massenladen von Daten zu ermöglichen.

    • Stellen Sie NotebookInstanceType auf Ihren bevorzugten Instance-Typ ein. Dieser Parameter erstellt ein Neptune-Workbook, mit dem Sie den Massenladevorgang zu Neptune ausführen und die Migration validieren.

  4. Wählen Sie Next (Weiter).

  5. Legen Sie alle anderen gewünschten Stack-Optionen fest.

  6. Wählen Sie Next (Weiter).

  7. Überprüfen Sie Ihre Optionen und markieren Sie beide Kontrollkästchen, um zu bestätigen, dass AWS CloudFormation möglicherweise zusätzliche Funktionen benötigt.

  8. Wählen Sie Stack erstellen aus.

Der Vorgang der Stack-Erstellung kann einige Minuten dauern.

Exportieren von Daten aus Blazegraph

Der nächste Schritt besteht darin, Daten aus Blazegraph in einem Format zu exportieren, das mit dem Neptune Bulk Loader kompatibel ist.

Je nachdem, wie die Daten in Blazegraph gespeichert sind (Tripel oder Quads) und wie viele benannte Graphen verwendet werden, verlangt Blazegraph möglicherweise, dass Sie den Exportvorgang mehrmals durchführen und mehrere Datendateien generieren:

  • Wenn die Daten als Tripel gespeichert sind , müssen Sie für jeden benannten Graphen einen Export ausführen.

  • Wenn die Daten als Quads gespeichert sind, können Sie wählen, ob Sie die Daten entweder im N-Quads-Format oder jeden benannten Graphen im Triple-Format exportieren möchten.

Im Folgenden wird davon ausgegangen, dass Sie einen einzelnen Namespace als N-Quads exportieren. Sie können den Vorgang jedoch für weitere Namespaces oder gewünschte Exportformate wiederholen.

Wenn Blazegraph während der Migration online und verfügbar sein soll, verwenden Sie SPARQL CONSTRUCT-Abfragen. Dies erfordert, dass Sie eine Blazegraph-Instance mit einem zugänglichen SPARQL-Endpunkt installieren, konfigurieren und ausführen.

Wenn Blazegraph nicht online sein muss, verwenden Sie das BlazeGraph Export-Hilfsprogramm. Dazu müssen Sie Blazegraph herunterladen und die Datendatei und die Konfigurationsdateien müssen zugänglich sein, der Server muss jedoch nicht ausgeführt werden.

Exportieren von Daten aus Blazegraph mit SPARQL CONSTRUCT

SPARQL CONSTRUCT ist ein Feature von SPARQL, das einen RDF-Graphen zurückgibt, der der angegebenen Abfragevorlage entspricht. In diesem Anwendungsfall verwenden Sie dies, um Ihre Daten mit einem Namespace nach dem anderen zu exportieren, indem Sie eine Abfrage wie die folgende verwenden:

CONSTRUCT WHERE { hint:Query hint:analytic "true" . hint:Query hint:constructDistinctSPO "false" . ?s ?p ?o }

Es gibt zwar andere RDF-Tools, um diese Daten zu exportieren, aber die einfachste Methode zur Durchführung dieser Abfrage besteht darin, den von Blazegraph bereitgestellten REST-API-Endpunkt zu verwenden. Das folgende Skript demonstriert, wie ein Python-Skript (3.6+) verwendet wird, um Daten als N-Quads zu exportieren:

import requests # Configure the URL here: e.g. http://localhost:9999/sparql url = "http://localhost:9999/sparql" payload = {'query': 'CONSTRUCT WHERE { hint:Query hint:analytic "true" . hint:Query hint:constructDistinctSPO "false" . ?s ?p ?o }'} # Set the export format to be n-quads headers = { 'Accept': 'text/x-nquads' } # Run the http request response = requests.request("POST", url, headers=headers, data = payload, files = []) #open the file in write mode, write the results, and close the file handler f = open("export.nq", "w") f.write(response.text) f.close()

Wenn die Daten als Tripel gespeichert werden, müssen Sie den Accept-Header-Parameter ändern, um Daten in einem geeigneten Format (N-Tripel, RDF/XML oder Turtle) unter Verwendung der im Blazegraph-GitHub-Repository angegebenen Werte zu exportieren.

Verwenden des Blazegraph-Exportprogramms zum Exportieren von Daten

Blazegraph enthält eine Hilfsmethode zum Exportieren von Daten, nämlich die Klasse ExportKB. ExportKB ermöglicht das Exportieren von Daten aus Blazegraph, erfordert jedoch im Gegensatz zur vorherigen Methode, dass der Server offline ist, während der Export ausgeführt wird. Dadurch ist dies die ideale Methode, wenn Sie Blazegraph während der Migration offline schalten können oder die Migration anhand einer Sicherungskopie der Daten erfolgen kann.

Sie führen das Hilfsprogramm über eine Java-Befehlszeile auf einem Computer aus, auf dem Blazegraph installiert ist, aber nicht ausgeführt wird. Der einfachste Weg, diesen Befehl auszuführen, besteht darin, die neueste Version von blazegraph.jar auf GitHub herunterzuladen. Für die Ausführung dieses Befehls sind mehrere Parameter erforderlich:

  • log4j.primary.configuration – Der Speicherort der log4j-Eigenschaftendatei.

  • log4j.configuration – Der Speicherort der log4j-Eigenschaftendatei.

  • output – Das Ausgabeverzeichnis für die exportierten Daten. Die Dateien befinden sich als tar.gz in einem Unterverzeichnis, das so benannt ist wie in der Wissensdatenbank dokumentiert.

  • format – Das gewünschte Ausgabeformat, gefolgt vom Speicherort der RWStore.properties-Datei. Wenn Sie mit Tripeln arbeiten, müssen Sie den -format-Parameter auf N-Triples, Turtle oder RDF/XML ändern.

Wenn Sie beispielsweise über die Blazegraph-Journaldatei und Eigenschaftendateien verfügen, exportieren Sie Daten mit dem folgenden Code als N-Quads:

java -cp blazegraph.jar \ com.bigdata.rdf.sail.ExportKB \ -outdir ~/temp/ \ -format N-Quads \ ./RWStore.properties

Wenn der Export erfolgreich ausgeführt wurde, wird eine Ausgabe wie diese angezeigt:

Exporting kb as N-Quads on /home/ec2-user/temp/kb Effective output directory: /home/ec2-user/temp/kb Writing /home/ec2-user/temp/kb/kb.properties Writing /home/ec2-user/temp/kb/data.nq.gz Done

Erstellen Sie einen Amazon-Simple-Storage-Service- (Amazon S3) Bucket und kopieren Sie die exportierten Daten hinein

Nachdem Sie Ihre Daten aus Blazegraph exportiert haben, erstellen Sie einen Amazon-Simple-Storage-Service- (Amazon S3) Bucket in derselben Region wie der Ziel-Neptune-DB-Cluster, aus dem der Neptune-Bulk-Loader die Daten importieren kann.

Anweisungen zum Erstellen eines Amazon-S3-Buckets finden Sie unter Wie erstelle ich einen S3-Bucket? im Amazon-Simple-Storage-Service-Benutzerhandbuch und unter Beispiele für die Erstellung eines Buckets im Amazon-Simple-Storage-Service-Benutzerhandbuch.

Anweisungen zum Kopieren der Datendateien, die Sie in den neuen Amazon-S3-Bucket exportiert haben, finden Sie unter Hochladen eines Objekts in einen Bucket im Amazon-Simple-Storage-Service-Benutzerhandbuch oder unter Verwenden von High-Level-Befehlen (s3) mit der AWS-CLI. Sie können auch Python-Code wie den folgenden verwenden, um die Dateien einzeln zu kopieren:

import boto3 region = 'region name' bucket_name = 'bucket name' s3 = boto3.resource('s3') s3.meta.client.upload_file('export.nq', bucket_name, 'export.nq')

Verwenden des Neptune Bulk Loader, um die Daten in Neptune zu importieren

Nachdem Sie Ihre Daten aus Blazegraph exportiert und in einen Amazon-S3-Bucket kopiert haben, können Sie die Daten in Neptune importieren. Neptune verfügt über einen Bulk-Loader, der Daten schneller und mit weniger Overhead lädt als Ladevorgänge mit SPARQL. Der Bulk-Loader-Prozess wird durch einen Aufruf der Loader-Endpunkt-API gestartet, um Daten, die im identifizierten S3-Bucket gespeichert sind, in Neptune zu laden.

Sie könnten dies zwar mit einem direkten Aufruf des REST-Endpunkts des Loaders tun, Sie müssen jedoch Zugriff auf die private VPC haben, in der die Neptune-Ziel-Instance ausgeführt wird. Sie könnten einen Bastion-Host einrichten, eine SSH-Verbindung zu diesem Computer herstellen und den cURL-Befehl ausführen, aber die Verwendung der Neptune Workbench ist einfacher.

Neptune Workbench ist ein vorkonfiguriertes Jupyter-Notebook, das als Amazon-SageMaker-Notebook läuft und auf dem mehrere für Neptune spezifische Notebook-Magics installiert sind. Diese Magics vereinfachen gängige Neptune-Operationen wie das Überprüfen des Clusterstatus, das Ausführen von SPARQL- und Gremlin-Traversalen und das Ausführen eines Massenladevorgangs.

Um den Massenladevorgang zu starten, verwenden Sie das %load-Magic, das eine Schnittstelle bietet, über die Neptune-Loader-Befehl ausgeführt werden kann:

  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon-Neptune-Konsole unter https://console.aws.amazon.com/neptune/home.

  2. Wählen Sie aws-neptune-blazegraph-to-neptune aus.

  3. Wählen Sie Notebook öffnen.

  4. Wählen Sie in der laufenden Instance von Jupyter entweder ein vorhandenes Notebook aus oder erstellen Sie ein neues mit dem Python-3-Kernel.

  5. Öffnen Sie in Ihrem Notebook eine Zelle, geben Sie %load ein und führen Sie die Zelle aus.

  6. Stellen Sie die Parameter für den Bulk-Loader ein:

    1. Geben Sie unter Quelle den Speicherort einer zu importierenden Quelldatei ein: s3://{bucket_name}/{file_name}.

    2. Wählen Sie für Format das entsprechende Format aus, in diesem Beispiel nquads.

    3. Geben Sie für ARN laden den ARN für die IAMBulkLoad-Rolle ein (diese Information befindet sich in der IAM-Konsole unter Rollen).

  7. Wählen Sie Absenden aus.

Das Ergebnis enthält den Status der Anforderung. Bei Massenladevorgängen handelt es sich häufig um Prozesse mit langer Laufzeit. Die Antwort bedeutet also nicht, dass der Ladevorgang abgeschlossen ist, sondern nur, dass er begonnen hat. Diese Statusinformationen werden regelmäßig aktualisiert, bis gemeldet wird, dass der Auftrag abgeschlossen ist.

Anmerkung

Diese Informationen sind auch im Blog-Beitrag Der Weg in die Cloud: Migration von Blazegraph zu Amazon Neptune verfügbar.