Non classé

Migration de Blazegraph vers Amazon Neptune: idk.dev – Les meilleures astuces pour son serveur

Par Titanfall , le 25 juin 2020 - 21 minutes de lecture

[bzkshopping keyword= »Minecraft » count= »8″ template= »grid »]

Pendant la durée de vie d'une application de base de données graphique, les applications elles-mêmes n'ont que des exigences de base, à savoir un point de terminaison SPARQL standard W3C fonctionnel. Cependant, comme les bases de données graphiques sont intégrées dans des applications commerciales critiques, les entreprises et les opérations nécessitent beaucoup plus. Une infrastructure commerciale critique est non seulement nécessaire pour fonctionner, mais aussi pour être hautement accessible, sécurisée, évolutive et rentable. Ces exigences motivent le désir de passer de solutions locales ou autogérées à une solution de base de données graphique entièrement gérée comme Amazon Neptune.

Neptune est un service de base de données graphite rapide, fiable et entièrement géré qui facilite la création et l'exécution d'applications de base de données graphite critiques pour l'entreprise. Neptune est un moteur de base de données graphique haute performance construit sur mesure, optimisé pour enregistrer des milliards de relations et interroger le graphique avec une latence de quelques millisecondes. Neptune est conçu pour être hautement accessible, avec des copies en lecture seule, une récupération ponctuelle, une sauvegarde continue sur Amazon Simple Storage Service (Amazon S3) et une réplication dans les zones d'accessibilité. Neptune est sécurisé et prend en charge l'authentification AWS Identity and Access Management (IAM), les connexions client chiffrées HTTPS et le chiffrement au repos. Neptune propose également un certain nombre de types d'instances, y compris des instances à faible coût destinées au développement et aux tests, fournissant une infrastructure gérée prévisible et abordable.

Lorsque vous choisissez de migrer des solutions de base de données graphiques locales ou autonomes actuelles vers Neptune, quelle est la meilleure façon d'effectuer cette migration?

Cette publication montre comment migrer du triplestore open source Blazegraph RDF vers Neptune en procédant comme suit:

  1. Service d'infrastructure AWS. Commencez par fournir l'infrastructure AWS requise à l'aide d'un modèle AWS CloudFormation.
  2. Exportez les données de Blazegraph. Ce billet examine les deux principales méthodes d'exportation de données depuis Blazegraph: via les requêtes SPARQL CONSTRUCT ou en utilisant l'outil d'exportation Blazegraph.
  3. Importez les données dans Neptune. Chargez les fichiers de données exportés dans Neptune à l'aide de Neptune Workbench et du chargeur en bloc Neptune.

Cette publication examine également les différences dont vous devez être conscient lors de la migration entre les deux bases de données. Bien que ce message s'adresse à ceux qui migrent de Blazegraph, l'approche est généralement applicable pour la migration à partir d'autres bases de données triplest RDF.

Architecture

Examinons les éléments de base de l'architecture utilisés tout au long de cet article avant de couvrir le processus de migration. Cette architecture se compose de quatre composants principaux:

  • Instance Blazegraph – L'instance contient les données à transférer. Il peut s'agir d'une instance Amazon Elastic Compute Cloud (Amazon EC2) autogérée, d'un serveur local ou d'une installation locale.
  • Godet S3 – Vous configurez le compartiment pour charger des données dans Neptune.
  • Neptune Cluster DB – Le cluster Neptune DB possède au moins une instance d'auteur (les instances de lecture sont facultatives).
  • Établi Neptune – Vous utilisez le plan de travail pour exécuter le chargement en bloc et valider les résultats.

Le diagramme suivant résume ces ressources et illustre l'architecture de la solution.

Livraison de l'infrastructure AWS

Bien qu'il soit possible de construire manuellement l'infrastructure AWS requise via AWS Management Console ou CLI, cette publication utilise un modèle CloudFormation pour créer la plupart de l'infrastructure nécessaire.

  1. Accédez à la page à l'aide d'une pile AWS CloudFormation pour créer un cluster de base de données Neptune.
  2. Sélectionner Étage de départ dans votre région préférée.
  3. Entrez les paramètres requis (nom de pile et EC2SSHKeyPairName); Vous pouvez également définir des paramètres facultatifs pour faciliter le processus de migration:
    • À AttachBulkloadIAMRoleToNeptuneCluster, sélectionnez véritable.
      Ce paramètre vous permet de créer et d'associer le rôle IAM actuel à votre cluster pour permettre le chargement en masse des données.
    • À NotebookInstanceType, sélectionnez votre type d'instance préféré.
      Ce paramètre crée un classeur Neptune que vous utilisez pour exécuter le chargement en masse de Neptune et valider la migration.
  1. Sélectionner suivant.
  2. Spécifiez les options de pile préférées.
  3. Sélectionner suivant.
  4. Examinez vos options et cochez les deux cases pour reconnaître qu'AWS CloudFormation peut nécessiter plus d'options et sélectionnez Faire une pile comme indiqué dans l'image ci-dessous.
    La création de la pile peut prendre quelques minutes.
  5. Une fois la pile terminée, créez un point de terminaison Amazon S3 VPC.
    Vous avez maintenant un port d'extrémité. L'image suivante montre la configuration.
    Une fois le point de terminaison configuré, vous avez terminé l'affectation AWS Infrastructure et êtes prêt à exporter les données de Blazegraph.

Vue d'ensemble de la solution

Le processus d'exportation des données depuis Blazegraph comprend trois étapes:

  1. Exportez les données avec l'outil CONSTRUCT ou Blazegraph Export.
  2. Créez un compartiment S3 pour stocker les données.
  3. Téléchargez vos fichiers exportés dans le compartiment S3.

Exporte les données

La première étape consiste à exporter les données de Blazegraph dans un format compatible avec le chargeur en bloc Neptune. Pour plus d'informations sur les formats pris en charge, consultez Formats de données de chargement RDF.

Selon la façon dont les données sont stockées dans Blazegraph (salles triples ou quadruples) et le nombre de graphiques nommés utilisés, Blazegraph peut vous demander d'effectuer plusieurs fois le processus d'exportation 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 graphique nommé. Si les données sont stockées en quadruple, vous pouvez choisir d'exporter les données au format N-Quads ou d'exporter chaque graphique nommé dans un triple format. Pour cette publication, vous exportez un seul espace de noms tel que N-Quads, mais vous pouvez répéter le processus pour plusieurs espaces de noms ou formats d'exportation souhaités.

Il existe deux méthodes recommandées pour exporter des données depuis Blazegraph. Celui que vous choisissez dépend si l'application doit être en ligne et disponible pendant la migration.

S'il doit être en ligne, nous vous recommandons d'utiliser les questions SPARQL CONSTRUCT. Cette option nécessite que vous installiez, configuriez et exécutiez une instance Blazegraph avec un point de terminaison SPARQL disponible.

S'il n'est pas nécessaire que l'application soit en ligne, nous vous recommandons d'utiliser l'outil d'exportation BlazeGraph. Cette option vous oblige à télécharger Blazegraph, et le fichier de données et les fichiers de configuration doivent être disponibles, mais le serveur n'a pas besoin d'être opérationnel.

Questions sur SPARQL CONSTRUCT

SPARQL CONSTRUCT Query est une fonction de SPARQL qui renvoie un graphe RDF qui correspond à la requête spécifiée. Dans ce cas, utilisez-les pour exporter vos données un espace de noms à la fois à l'aide de la requête suivante:

CONSTRUIRE OERE indice: Indice de question: analytiquement "vrai". indice: Indice de question: constructDistinctSPO "false". ? s? p? o

Bien qu'il existe un certain nombre d'outils RDF pour exporter ces données, la façon la plus simple d'exécuter cette requête consiste à utiliser API REST point final fourni par Blazegraph. Le script suivant montre comment utiliser un script Python (3.6+) pour exporter des données en tant que N-Quads:

demandes d'importation

# Configurez l'URL ici: par ex. http: // localhost: 9999 / sparql
url = "http: // localhost: 9999 / sparql"
payload = {& # 39; query & # 39;: & # 39; CONSTRUIRE O indice: Indice de demande: analytiquement "vrai". indice: indice de demande: constructDistinctSPO "false". ? s? p? o & # 39;
# Définissez le format d'exportation sur n-quads
titres = 
& # 39; Accepter & # 39;: & # 39; text / x-nquads & # 39;

# Exécutez la requête http
réponse = demandes. request ("POST", url, headers = headers, data = payload, files = [])
# Ouvrez le fichier en mode écriture, écrivez les résultats et fermez le gestionnaire de fichiers
f = ouvert ("export.nq", "w")
f.write (response.text)
f.close ()

Si les données sont stockées sous forme de triplets, vous devez modifierJ'accepte& # 39; Paramètre d'en-tête pour exporter les données dans un format approprié (N-Triples, RDF / XML ou Turtle) en utilisant les valeurs spécifiées dans le référentiel GitHub.

Bien que cette exportation à l'aide de l'API REST soit une façon d'exporter vos données, elle nécessite un serveur en cours d'exécution et des ressources de serveur suffisantes pour résoudre ce problème supplémentaire. Ce n'est pas toujours possible, alors comment exporter vers une copie hors ligne des données?

Pour ceux qui utilisent des cas, vous pouvez utiliser l'outil d'exportation Blazegraph pour exporter les données.

Outils d'exportation Blazegraph

Blazegraph contient un outil pour exporter des données: la classe ExportKB. Cet outil facilite l'exportation des données depuis Blazegraph, mais contrairement à la méthode précédente, le serveur doit être déconnecté pendant que l'exportation est en cours. Cela en fait la méthode idéale à utiliser lorsque vous pouvez mettre l'application hors ligne pendant la migration, ou que la migration peut avoir lieu à partir d'une sauvegarde des données.

Vous exécutez l'outil via une ligne de commande Java à partir d'une machine sur laquelle Blazegraph est installé mais n'est pas en cours d'exécution. La façon la plus simple d'exécuter cette commande est de télécharger la dernière version de blazegraph.jar sur GitHub. L'exécution de cette commande nécessite plusieurs paramètres:

  • log4j.primary.configuration – L'emplacement du fichier de propriétés log4j.
  • log4j.configuration – L'emplacement du fichier de propriétés log4j.
  • production – Le répertoire de sortie pour les données exportées. Les fichiers se trouvent sous la forme d'un fichier tar.gz dans un sous-répertoire nommé par base de connaissances.
  • format – Le format de sortie souhaité suivi de l'emplacement de RWStore.properties fichier. Si vous travaillez avec un triple, vous devez changer -format paramètre à N-Triples, Tortue, ou RDF / XML.

Par exemple, si vous disposez du fichier journal Blazegraph et des fichiers de propriétés, vous pouvez exporter des données telles que des N-Quads avec le code suivant:

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

Lorsque vous avez terminé, vous verrez un message similaire au code suivant:

Exporte les Ko en N-Quads dans / home / ec2-user / temp / kb
Répertoire de sortie efficace: / home / ec2-user / temp / kb
Écriture /home/ec2-user/temp/kb/kb.properties
Tapez /home/ec2-user/temp/kb/data.nq.gz
Fini

Quelle que soit l'option que vous choisissez, vous pouvez réussir à exporter vos données Blazegraph dans un format compatible Neptune. Vous pouvez maintenant procéder à la migration de ces fichiers de données vers Amazon S3 pour préparer le chargement en masse.

Faire un seau S3

Lors de l'exportation de vos données depuis Blazegraph, l'étape suivante consiste à créer un nouveau compartiment S3. Ce compartiment contient les fichiers de données exportés depuis Blazegraph pour le chargeur en bloc Neptune à utiliser. Étant donné que le chargeur en bloc Neptune nécessite un accès à faible latence aux données sous charge, ce compartiment doit se trouver dans la même région que la cible d'instance Neptune. Hormis l'emplacement du compartiment S3, aucune configuration supplémentaire spécifique n'est requise.

Vous pouvez créer un compartiment de plusieurs manières:

  • Sur la console Amazon S3 – Pour obtenir des instructions, voir Création d'un compartiment.
  • Via AWS CLI – Pour obtenir des instructions, consultez Utilisation de commandes de haut niveau (s3) avec l'AWS CLI.
  • Programmatique à l'aide du kit AWS SDK – Le code suivant utilise le SDK Python boto3 pour créer votre compartiment S3:
    importer boto3
    
    région = & # 39;& # 39;
    bucket_name = & # 39;& # 39;
    s3_client = boto3.client (& # 39; s3 & # 39;, nom de région = région)
    location = & # 39; LocationConstraint & # 39;: region
    s3_client.create_bucket (Bucket = bucket_name, CreateBucketConfiguration = location)

Vous utilisez le compartiment S3 nouvellement créé pour charger les données dans Neptune.

Télécharger des fichiers de données sur Amazon S3

L'étape suivante consiste à télécharger les fichiers de données de votre emplacement d'exportation vers ce compartiment S3. Comme pour la création du compartiment, vous pouvez procéder de la manière suivante:

  • Sur la console Amazon S3 – Pour obtenir des instructions, voir Télécharger un objet dans un compartiment.
  • Via AWS CLI – Pour obtenir des instructions, consultez Utilisation de commandes de haut niveau (s3) avec l'AWS CLI.
  • par programme – Voir le code suivant:
    importer boto3
    
    région = & # 39;& # 39;
    bucket_name = & # 39;& # 39;
    s3 = boto3.resource (& # 39; s3 & # 39;)
    s3.meta.client.upload_file (& # 39; export.nq & # 39;, bucket_name, & # 39; export.nq & # 39;)
    

Bien que cet exemple de code ne charge qu'un seul fichier, vous devez télécharger chaque fichier dans ce compartiment S3 si vous avez exporté plusieurs fichiers.

Après avoir chargé tous les fichiers dans votre compartiment S3, vous êtes prêt pour la dernière tâche du transfert: importer des données dans Neptune.

Étant donné que vous avez exporté vos données depuis Blazegraph et les avez rendues disponibles via Amazon S3, votre prochaine étape consiste à importer les données dans Neptune. Neptune possède un chargeur en bloc qui charge les données plus rapidement et avec moins de surcharge que d'effectuer des opérations de chargement à l'aide de SPARQL. Le processus de chargement est initié par une demande à l'API de point d'extrémité du chargeur pour charger les données stockées dans le compartiment S3 identifié vers Neptune. Ce processus de chargement se déroule en trois étapes:

  1. Chargement en vrac de Neptune
  2. Chargement des données
  3. la validation des données

Le diagramme suivant illustre comment nous allons effectuer ces étapes dans l'infrastructure AWS.

Exécute le chargement en masse de Neptune

Vous commencez le processus d'importation en envoyant une demande à Neptune pour démarrer le chargement en bloc. Bien que cela soit possible via un appel direct au point de terminaison REST du chargeur, vous devez avoir accès au VPC privé sur lequel s'exécute l'instance Neptune cible. Vous pouvez configurer un hôte bastion, SSH sur cette machine, et exécuter la commande cURL, mais Neptune Workbench est une méthode plus simple.

Neptune Workbench est un ordinateur portable Jupyter préconfiguré qui est un ordinateur portable Amazon SageMaker, avec plusieurs installations magiques portables spécifiques à Neptune. Ces magies simplifient les interactions 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 masse.

Pour démarrer le processus de chargement en masse, utilisez% load magic, qui fournit une interface pour exécuter l'API du chargeur Neptune.

  1. Sélectionnez la console Neptune des cahiers.
  2. Sélectionner AWS Neptune Blaze Graph pour Neptune.
  3. Sélectionner Cahier ouvert.
    Après avoir ouvert, vous serez redirigé vers l'instance actuelle de l'ordinateur portable Jupyter, comme indiqué dans l'image ci-dessous.
    De là, vous pouvez soit sélectionner un bloc-notes existant, soit en créer un nouveau à l'aide du noyau Python 3.
  4. Ouvrez une cellule dans le bloc-notes ouvert, tapez %chargeet exécutez la cellule.
    Vous devez maintenant définir les paramètres du chargeur en bloc.
  5. À La source, entrez l'emplacement de votre fichier source (S3: // bucket_name / filename).
  6. À Format, choisissez le bon format, comme dans notre exemple nquads.
  7. À Charger ARN, entrez ARN pour IAMBulkLoad (Ces informations se trouvent sur la console IAM ci-dessous Les rôles.)
  8. Sélectionner Envoyer.

Le résultat contient le statut de la demande. Le chargement en vrac est un processus de longue durée; cette réponse ne signifie pas que le chargement est terminé, mais seulement qu'il a commencé. Ce statut est mis à jour périodiquement pour donner le dernier statut de la charge de travail jusqu'à ce que le travail soit terminé. Une fois le chargement terminé, vous serez informé de l'état du travail.

Une fois le chargement terminé, vos données sont chargées dans Neptune et vous êtes prêt à passer à la dernière étape du processus d'importation: la validation du transfert de données.

Valide la charge des données

Comme pour tout transfert de données, vous pouvez valider que les données sont correctement migrées de plusieurs manières. Celles-ci ont tendance à être spécifiques aux données que vous migrez, au niveau de confiance requis pour le transfert et à ce qui est le plus important dans le domaine en question. Dans la plupart des cas, ces travaux de validation impliquent l'exécution de requêtes qui comparent les données avant et après les données.

Pour rendre cela plus facile, les ordinateurs portables Neptune Workbench ont une magie (%% sparql) qui simplifie l'exécution des requêtes SPARQL sur le cluster Neptune. Voir le code suivant.

%% sparql

CHOISIR * O {
? s? p? o
 LIMITE 10

Cette magie spécifique à Neptune exécute des requêtes SPARQL sur l'instance Neptune associée et renvoie les résultats sous forme de tableau.

La dernière chose que vous devez étudier est toute modification d'application que vous pourriez avoir à faire en raison des différences entre Blazegraph et Neptune. Heureusement, Blazegraph et Neptune sont compatibles avec SPARQL 1.1, ce qui signifie que vous pouvez modifier la configuration de votre application pour pointer vers le nouveau point de terminaison Neptune SPARQL, et tout fonctionnera.

Cependant, comme pour toute migration de base de données, il existe plusieurs différences entre les implémentations Blazegraph et Neptune qui peuvent affecter votre capacité à migrer. Les différences majeures suivantes nécessitent des modifications des questions, de l'architecture d'application ou des deux dans le cadre du processus de migration:

  • Recherche en texte intégral – Dans Blazegraph, vous pouvez utiliser la recherche de texte intégral interne ou les fonctionnalités de recherche de texte intégral externes via une intégration avec Apache Solr. Si vous utilisez l'une de ces fonctionnalités, restez à l'affût des dernières mises à jour des fonctionnalités de recherche de texte intégral prises en charge par Neptune. Pour plus d'informations, consultez Recherche de texte intégral Amazon Neptune à l'aide d'Amazon Elasticsearch Service.
  • Conseils pour les questions – Blazegraph et Neptune étendent SPARQL en utilisant le terme astuce de requête. Lors d'une migration, vous devrez migrer tous les conseils de questions que vous utilisez. Pour plus d'informations sur les derniers conseils de requête pris en charge par Neptune, consultez Conseils de requête SPARQL.
  • inférentiel – Blazegraph prend en charge l'inférence en mode triple en tant qu'option configurable, mais ne prend pas en charge l'inférence en mode quads. Si vous avez besoin de mettre fin à votre cas, plusieurs options prospectives peuvent convenir. AWS souhaite en savoir plus sur les cas d'utilisation pour l'inférence. Vous pouvez ajouter des commentaires ou contacter l'équipe Neptune via les forums de discussion Amazon Neptune.
  • Recherche géospatiale – Blazegraph prend en charge la configuration du champ de nom qui permet la prise en charge géospatiale. Si vous utilisez cette fonctionnalité dans Blazegraph, envisagez les options dans Neptune. Vous pouvez contacter l'équipe Neptune sur les forums de discussion Amazon Neptune.
  • Locations multiples – Blazegraph a pris en charge la multi-location dans une seule base de données. Dans Neptune, les relations multi-locataires sont prises en charge soit en stockant des données dans des graphiques nommés et en utilisant des clauses NAMED pour les requêtes SPARQL, soit en créant un cluster de base de données distinct pour chaque locataire.
  • Fédération – Neptune prend actuellement en charge la fédération SPARQL 1.1 vers des emplacements disponibles pour l'instance Neptune, comme dans le VPC privé, sur des VPC ou vers des points de terminaison externes sur Internet. Selon la disposition spécifique et les points de terminaison requis de la fédération, vous pouvez avoir besoin d'une configuration réseau supplémentaire.
  • Extensions standard Blazegraph – Blazegraph incluait plusieurs extensions aux normes API SPARQL et REST. Neptune n'est compatible qu'avec les spécifications standard, vous devrez donc migrer l'utilisation des extensions.

Cependant, Neptune propose plusieurs fonctionnalités supplémentaires que Blazegraph n'offre pas:

  • Haute disponibilité et évolutivité – Neptune stocke toutes les données dans plusieurs zones d'accès pour éviter la perte de données. Neptune évolue également facilement jusqu'à 15 copies en lecture pour gérer le trafic de la base de données.
  • Sauvegarde et restauration automatiques – Neptune est configuré pour une sauvegarde automatique avec une période de sauvegarde définie.
  • Surveillance – Neptune expose un large éventail de performances et de mesures de performances à Amazon Cloudwatch. Pour plus d'informations, consultez Surveillance de Neptune à l'aide d'Amazon CloudWatch.
  • sécurité – Neptune est configuré pour crypter les données en transit et au repos. Neptune s'intègre également à AWS Key Management Service (AWS KMS) pour fournir le contrôle d'accès des clés de chiffrement et s'intègre à IAM pour fournir l'authentification et l'autorisation des utilisateurs via la signature version 4 signature des demandes.
  • contrôle des coûts – Contrairement aux instances autogérées ou EC2, qui ont des coûts fixes, Neptune permet la gestion des coûts en offrant une variété de tailles d'instances, y compris des options à faible coût plus petites visant à développer et tester des charges de travail. De plus, vous pouvez arrêter les occurrences de Neptune jusqu'à 7 jours, période pendant laquelle vous ne serez pas facturé pendant des heures dans la base de données.
  • ruisseaux – Neptune Streams simplifie l'intégration d'autres systèmes en capturant un flux dédupliqué avec les modifications apportées au graphique de consommation du système en aval.

Résumé

Ce billet a exploré le processus de migration d'une instance Blazegraph locale ou autonome vers une base de données Neptune entièrement gérée. Une migration vers Neptune satisfait non seulement aux exigences de nombreuses applications du point de vue du développement, mais répond également aux exigences opérationnelles opérationnelles des applications critiques. En outre, cette migration ouvre de nombreux avantages, notamment l'optimisation des coûts, une meilleure intégration avec les outils cloud natifs et la réduction de la charge d'exploitation.

Nous espérons que ce message vous donnera la confiance nécessaire pour commencer la migration. Si vous avez des questions, des commentaires ou d'autres commentaires, nous sommes toujours disponibles via votre gestionnaire de compte Amazon ou via les forums de discussion Amazon Neptune.


A propos de l'auteur

Dave Bechberger est sr. Architecte Graf avec l'équipe d'Amazon Neptune. Il a utilisé ses nombreuses années d'expérience de travail avec des clients pour créer des applications avec prise en charge de bases de données graphiques comme source d'inspiration pour la co-rédaction de "Graph Databases in Action" par Manning.

Click to rate this post!
[Total: 0 Average: 0]

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.