Migration de Blazegraph vers Amazon Neptune - Amazon Neptune

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Migration de Blazegraph vers Amazon Neptune

Si vous avez un graphique dans l'open sourceBlazegraphRDF triplestore, vous pouvez migrer les données de votre graphe vers Amazon Neptune en suivant les étapes suivantes :

  • approvisionnementAWSinfrastructure. Commencez par provisionner l'infrastructure Neptune requise à l'aide d'unAWS CloudFormation modèle (voirCréer un cluster de bases de données).

  • Exporter les données à partir de Blazegraph. Il existe deux méthodes principales pour exporter des données de Blazegraph, à savoir l'utilisation de requêtes SPARQL CONSTRUCT ou l'utilitaire Blazegraph Export.

  • Importez les données vers Neptune. Vous pouvez ensuite charger les fichiers de données exportés dans Neptune à l'aide duÉtabli NeptuneetChargeur en vrac Neptune.

Cette approche est également généralement applicable à la migration à partir d'autres bases de données RDF triplestore.

Compatibilité entre Blazegraph et Neptune

Avant de migrer vos données graphiques vers Neptune, il existe plusieurs différences importantes entre Blazegraph et Neptune dont vous devez être conscient. Ces différences peuvent nécessiter des modifications des requêtes, de l'architecture de l'application ou des deux, voire rendre la migration peu pratique :

  • Full-text search— Dans Blazegraph, vous pouvez utiliser la recherche en texte intégral interne ou les fonctionnalités de recherche en texte intégral externes grâce à une intégration avec Apache Solr. Si vous utilisez l'une de ces fonctionnalités, restez informé des dernières mises à jour concernant les fonctionnalités de recherche en texte intégral prises en charge par Neptune. Consultez Recherche en texte intégral Neptune.

  • Query hints— Blazegraph et Neptune étendent SPARQL en utilisant le concept d'indices de requête. Au cours d'une migration, vous devez migrer tous les conseils de requête que vous utilisez. Pour en savoir plus sur les derniers conseils de requête pris en charge par Neptune, consultezIndicateurs d'une requête.

  • Inférence— Blazegraph prend en charge l'inférence en tant qu'option configurable en mode triples, mais pas en mode quads. Neptune ne prend pas encore en charge l'inférence.

  • Recherche géospatiale— Blazegraph prend en charge la configuration des espaces de noms qui permettent la prise en charge géospatiale. Cette fonctionnalité n'est pas encore disponible dans Neptune.

  • multilocataire— Blazegraph prend en charge la mutualisation au sein d'une seule base de données. Dans Neptune, la mutualisation est prise en charge soit en stockant les données dans des graphes nommés et en utilisant les clauses USING NAMED pour les requêtes SPARQL, soit en créant un cluster de bases de données distinct pour chaque tenant.

  • Fédération— Neptune prend actuellement en charge la fédération SPARQL 1.1 vers des emplacements accessibles à l'instance Neptune, tels que dans le VPC privé, entre VPC ou vers des points de terminaison Internet externes. Selon la configuration spécifique et les points de terminaison de fédération requis, vous pouvez avoir besoin d'une configuration réseau supplémentaire.

  • Extensions des normes Blazegraph— Blazegraph inclut plusieurs extensions des normes API SPARQL et REST, tandis que Neptune n'est compatible qu'avec les spécifications des normes elles-mêmes. Cela peut nécessiter des modifications de votre application ou rendre la migration difficile.

AllouéAWSinfrastructure pour Neptune

Bien que vous puissiez construire leAWSl'infrastructure manuellement via leAWS Management ConsoleouAWS CLI, il est souvent plus pratique d'utiliser un CloudFormation modèle à la place, comme décrit ci-dessous :

Provisioning de Neptune en utilisant un CloudFormation modèle :

  1. Accédez à Utilisation d'unAWS CloudFormationStack pour créer un cluster de base de données Neptune.

  2. ChoisissezLancement de la piledans la région de votre choix.

  3. Définissez les paramètres requis (nom de la pile etEC2SSHKeyPairName). Définissez également les paramètres facultatifs suivants pour faciliter le processus de migration :

    • Définissez AttachBulkloadIAMRoleToNeptuneCluster sur true. Ce paramètre permet de créer et d'attacher le rôle IAM approprié à votre cluster pour permettre le chargement en bloc des données.

    • DéfinirNotebookInstanceTypevers le type d'instance de votre choix. Ce paramètre crée un classeur Neptune que vous utilisez pour exécuter le chargement en bloc dans Neptune et valider la migration.

  4. Sélectionnez Suivant.

  5. Définissez toutes les autres options de pile souhaitées.

  6. Sélectionnez Suivant.

  7. Passez en revue vos options et cochez les deux cases pour confirmer queAWS CloudFormation peuvent nécessiter des fonctionnalités supplémentaires.

  8. Sélectionnez Créer une pile.

Le processus de création de la pile peut prendre quelques minutes.

Exportation de données à partir de Blazegraph

La prochaine étape consiste à exporter les données de Blazegraph dans unformat compatible avec le chargeur en vrac Neptune.

Selon la manière dont les données sont stockées dans Blazegraph (triples ou quads) et le nombre de graphiques nommés utilisés, Blazegraph peut vous demander d'effectuer le processus d'exportation plusieurs fois et de générer plusieurs fichiers de données :

  • Si les données sont stockées sous forme de triplets, vous devez exécuter une exportation pour chaque graphe nommé.

  • Si les données sont stockées sous forme de quadriceps, vous pouvez choisir d'exporter les données au format N-Quads ou d'exporter chaque graphe nommé dans un format triples.

Nous supposons ci-dessous que vous exportez un seul espace de noms en tant que N-Quads, mais vous pouvez répéter le processus pour les espaces de noms supplémentaires ou les formats d'exportation souhaités.

Si vous souhaitez que Blazegraph soit en ligne et disponible pendant la migration, utilisez les requêtes SPARQL CONSTRUCT. Pour ce faire, vous devez installer, configurer et exécuter une instance de Blazegraph avec un point de terminaison SPARQL accessible.

Si vous n'avez pas besoin de Blazegraph pour être en ligne, utilisezle BlazeGraphUtilitaire d'exportation. Pour ce faire, vous devez télécharger Blazegraph, et le fichier de données et les fichiers de configuration doivent être accessibles, mais le serveur n'a pas besoin d'être en cours d'exécution.

Exporter des données depuis Blazegraph à l'aide de SPARQL

SPARQL CONSTRUCT est une fonctionnalité de SPARQL qui renvoie un graphe RDF correspondant au modèle de requête spécifié. Dans ce cas d'utilisation, vous l'utilisez pour exporter vos données un espace de noms à la fois, à l'aide d'une requête telle que la suivante :

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

Bien que d'autres outils RDF existent pour exporter ces données, le moyen le plus simple d'exécuter cette requête consiste à utiliser le point de terminaison de l'API REST fourni par Blazegraph. Le script suivant montre comment utiliser un script Python (3.6+) pour exporter des données sous forme de N-Quads :

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

Si les données sont stockées sous forme de triplets, vous devez modifier leAcceptpour exporter les données dans un format approprié (N-Triples, RDF/XML ou Turtle) à l'aide des valeurs spécifiées dans leBlazegraph GitHub repo.

Utilisation de l'utilitaire d'exportation Blazegraph pour exporter des données

Blazegraph contient une méthode utilitaire pour exporter des données, à savoir leExportKBclasse.ExportKBfacilite l'exportation des données depuis Blazegraph, mais contrairement à la méthode précédente, nécessite que le serveur soit hors ligne pendant l'exécution de l'exportation. C'est donc la méthode idéale à utiliser lorsque vous pouvez mettre Blazegraph hors ligne pendant la migration, ou lorsque la migration peut se faire à partir d'une sauvegarde des données.

Vous exécutez l'utilitaire à partir d'une ligne de commande Java sur une machine sur laquelle Blazegraph est installé mais qui n'est pas en cours d'exécution. Le moyen le plus simple d'exécuter cette commande est de télécharger la dernière versionblazegraph.jarversion située sur GitHub. L'exécution de cette commande nécessite plusieurs paramètres :

  • log4j.primary.configuration— Emplacement du fichier de propriétés log4j.

  • log4j.configuration— Emplacement du fichier de propriétés log4j.

  • output: répertoire de sortie des données exportées. Les fichiers se trouvent en tant quetar.gzdans un sous-répertoire nommé tel que documenté dans la base de connaissances.

  • format— Le format de sortie souhaité suivi de l'emplacement duRWStore.propertiesdans le fichier. Si vous utilisez des triples, vous devez modifier le-formatparamètre versN-Triples,Turtle, ouRDF/XML.

Par exemple, si vous disposez du fichier journal Blazegraph et des fichiers de propriétés, exportez les données au format N-Quads en utilisant le code suivant :

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

Si l'exportation s'exécute correctement, vous obtenez une sortie similaire à ce qui suit :

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

Créez un compartiment Amazon S3 (Amazon S3) et copiez-y les données exportées et copiez-y les données exportées

Une fois que vous avez exporté vos données depuis Blazegraph, créez un compartiment Amazon Simple Storage Service (Amazon S3) dans la même région que le cluster de bases de données Neptune cible pour le chargeur en vrac Neptune à utiliser pour importer les données depuis.

Pour obtenir des instructions sur la façon de créer un compartiment Amazon S3, consultezComment créer un compartiment S3 ?dans leManuel de l'utilisateur Amazon S3 Storage Service, etExemples de créations de compartimentsdans leManuel de l'utilisateur Amazon S3 Storage Service.

Pour obtenir des instructions sur la façon de copier les fichiers de données que vous avez exportés dans le nouveau compartiment Amazon S3, consultezChargement d'un objet dans un compartimentdans leManuel de l'utilisateur Amazon S3 Storage Service, ouUtilisation des commandes de haut niveau (S3) avec l'AWSCLI. Vous pouvez également utiliser du code Python comme suit pour copier les fichiers un par un :

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

Utilisez le chargeur groupé Neptune pour importer les données dans Neptune

Après avoir exporté vos données de Blazegraph et les avoir copiées dans un compartiment Amazon S3, vous êtes prêt à importer les données dans Neptune. Neptune dispose d'un chargeur en masse qui charge les données plus rapidement et avec moins de frais généraux que les opérations de chargement à l'aide de SPARQL. Le processus de chargement en bloc est lancé par un appel à l'API du point de terminaison du chargeur pour charger les données stockées dans le compartiment S3 identifié dans Neptune.

Bien que vous puissiez le faire en appelant directement le point de terminaison REST du chargeur, vous devez avoir accès au VPC privé dans lequel l'instance cible de Neptune s'exécute. Vous pouvez configurer un hôte bastion, SSH sur cette machine, et exécuter la commande cURL, mais en utilisantÉtabli Neptunec'est plus facile.

Neptune Workbench est un bloc-notes Jupyter préconfiguré fonctionnant en tant qu'Amazon SageMakerportable, avec plusieurs magies d'ordinateurs portables spécifiques à Neptune installées. Ces fonctionnalités simplifient les opérations Neptune courantes telles que la vérification de l'état du cluster, l'exécution de traversées SPARQL et Gremlin et l'exécution d'une opération de chargement en bloc.

Pour démarrer le processus de chargement en bloc, utilisez le%loadmagic, qui fournit une interface pour exécuter leCommande Neptune Loader :

  1. Connectez-vous à la consoleAWSManagement Console et ouvrez la console Amazon Neptune à l'adressehttps://console.aws.amazon.com/neptune/home.

  2. Tâche de sélectionaws-neptune-blazegraph-to-neptune.

  3. ChoisissezOuvrir le bloc-notes.

  4. Dans l'instance en cours d'exécution de Jupyter, sélectionnez un bloc-notes existant ou créez-en un nouveau à l'aide du noyau Python 3.

  5. Dans votre bloc-notes, ouvrez une cellule, entrez%load, et lancez la cellule.

  6. Définissez les paramètres du chargeur en vrac :

    1. PourSource, entrez l'emplacement du fichier source à importer :s3://{bucket_name}/{file_name}.

    2. PourFormat, choisissez le format approprié, qui dans cet exemple estnquads.

    3. PourCharger l'ARN, saisissez l'ARN duIAMBulkLoadrôle (ces informations se trouvent sur la console IAM sousRôles).

  7. Sélectionnez Envoyer.

Le résultat contient le statut de la requête. Les chargements en vrac sont souvent des processus de longue durée, de sorte que la réponse ne signifie pas que le chargement est terminé, mais seulement qu'il a commencé. Ces informations d'état sont mises à jour périodiquement jusqu'à ce qu'elles indiquent que la tâche est terminée.

Note

Ces informations sont également disponibles dans le billet de blog,Migration vers le cloud : Migration de Blazegraph vers Amazon Neptune.