Exporter des bases de données de Cloud Spanner vers Avro

Cette page explique comment exporter des bases de données Cloud Spanner à l'aide de Google Cloud Console.

Le processus utilise Dataflow et exporte les données vers un dossier dans un bucket Cloud Storage. Le dossier résultant contient un ensemble de fichiers Avro et de fichiers manifestes JSON.

Pour exporter une base de données Cloud Spanner à l'aide de l'API REST ou de l'outil de ligne de commande gcloud, commencez par effectuer les étapes décrites dans la section Avant de commencer de cette page, puis reportez-vous aux instructions détaillées figurant dans la section Cloud Spanner vers Cloud Storage Avro.

Avant de commencer

Pour exporter ou exporter une base de données Cloud Spanner, vous devez d'abord activer les API Cloud Spanner, Compute Engine et Dataflow :

Activer les API

Vous devez également disposer d'un quota suffisant, ainsi que des autorisations IAM requises.

Exigences en matière de quota

Voici, pour chaque service Google Cloud, les exigences de quota concernant les tâches d'exportation :

  • Cloud Spanner : aucun nœud supplémentaire n'est requis pour exporter une base de données, mais il peut s'avérer nécessaire d'ajouter des nœuds pour que la tâche se termine dans un délai raisonnable. Pour en savoir plus, consultez la section Optimiser les tâches.
  • Cloud Storage : pour effectuer des exportations, vous devez créer un bucket pour vos fichiers exportés, si ce n'est pas déjà fait. Vous pouvez créer un bucket dans Cloud Console, soit sur la page Cloud Storage, soit lors de la création de votre exportation sur la page Cloud Spanner. Il n'est pas nécessaire de spécifier une taille pour ce bucket.
  • Dataflow : les tâches d'exportation sont soumises aux mêmes exigences que les autres tâches Dataflow en ce qui concerne les quotas Compute Engine, aussi bien pour l'utilisation de processeurs et d'espace disque que pour le nombre d'adresses IP.
  • Compute Engine : avant d'exécuter une tâche d'exportation, vous devez définir les quotas initiaux Compute Engine utilisés par Dataflow. Ces quotas représentent le nombre maximal de ressources que vous permettez à Dataflow d'utiliser pour votre tâche. Les valeurs de départ recommandées sont les suivantes :

    • Processeurs : 200
    • Adresses IP en cours d'utilisation : 200
    • Disque persistant standard : 50 To

    En règle générale, vous n'avez pas d'autres réglages à effectuer. Dataflow gère l'autoscaling de sorte que vous n'ayez à payer que pour les ressources effectivement utilisées lors de l'exportation. S'il apparaît que votre tâche pourrait utiliser davantage de ressources, l'interface utilisateur de Dataflow affiche une icône d'avertissement, mais cela n'empêche normalement pas la tâche d'aboutir.

Exigences IAM

Pour exporter une base de données, vous devez également disposer de rôles IAM accordant des autorisations suffisantes pour utiliser tous les services impliqués dans une tâche d'exportation. Pour plus d'informations sur l'attribution de rôles et l'octroi d'autorisations, consultez la page Attribuer des rôles IAM.

Pour exporter une base de données, vous avez besoin des rôles suivants :

  • Au niveau du projet Google Cloud :
    • Lecteur Cloud Spanner
    • Administrateur Dataflow
    • Administrateur de l'espace de stockage
  • Au niveau de la base de données ou de l'instance Cloud Spanner, ou au niveau du projet Google Cloud :
    • Lecteur Cloud Spanner
    • Administrateur de bases de données Cloud Spanner (obligatoire uniquement pour les tâches d'importation)

Exporter une base de données

Une fois que vous avez satisfait aux exigences de quota et IAM décrites ci-dessus, vous pouvez exporter une base de données Cloud Spanner existante.

Pour exporter votre base de données Cloud Spanner vers un bucket Cloud Storage, procédez comme suit :

  1. Accédez à la page Instances de Cloud Spanner.

    Accéder à la page Instances

  2. Cliquez sur le nom de l'instance contenant votre base de données.

  3. Cliquez sur l'onglet Importations/Exportations, puis sur le bouton Exporter.

  4. Sous Sélectionner l'emplacement de stockage de votre exportation, cliquez sur Parcourir.

  5. Si vous ne possédez pas déjà un bucket Cloud Storage pour votre exportation :

    1. Cliquez sur Nouveau bucket Capture d'écran de l'élément d'interface utilisateur .
    2. Saisissez un nom pour ce bucket. Les noms de buckets doivent être uniques dans Cloud Storage.
    3. Sélectionnez une classe de stockage et un emplacement par défaut, puis cliquez sur Créer.
    4. Cliquez sur le bucket pour le sélectionner.

    Si vous disposez déjà d'un bucket, sélectionnez-le dans la liste initiale ou cliquez sur Rechercher Capture d'écran de l'élément d'interface utilisateur pour filtrer la liste, puis cliquez sur votre bucket pour le sélectionner.

  6. Cliquez sur Sélectionner.

  7. Sélectionnez la base de données à exporter dans le menu déroulant Sélectionner une base de données à exporter.

  8. Sélectionnez une région dans le menu déroulant Choisir une région pour la tâche d'exportation.

  9. Cochez la case située sous Confirmer les frais pour accepter la facturation de frais supplémentaires en plus des frais relatifs à vos nœuds Cloud Spanner existants.

  10. Cliquez sur Exporter.

    Cloud Console ouvre la page Détails de la base de données, qui affiche désormais une description de votre tâche d'exportation, y compris le temps écoulé :

    Capture d'écran de la tâche en cours

Lorsque la tâche se termine ou est interrompue, Cloud Console affiche un message sur la page Détails de la base de données. Si la tâche a abouti, un message tel que celui-ci apparaît :

Message de réussite de la tâche d'exportation

Si la tâche n'a pas abouti, un message d'échec apparaît :

Message d'échec de la tâche d'exportation

En cas d'échec, consultez les journaux Dataflow de cette tâche pour connaître les détails de l'erreur.

Afin d'éviter une facturation Cloud Storage pour les fichiers créés par une tâche d'exportation ayant échoué, supprimez le dossier et ses fichiers. Pour savoir comment trouver le dossier, consultez la section Afficher votre exportation dans Cloud Storage.

Afficher votre exportation dans Cloud Storage

Pour afficher le dossier contenant la base de données exportée dans Cloud Console, accédez au navigateur Cloud Storage et cliquez sur le bucket sélectionné précédemment :

Accéder au navigateur Cloud Storage

Le bucket contient maintenant un dossier dans lequel se trouve la base de données exportée. Le nom du dossier commence par l'ID de votre instance, le nom de la base de données et l'horodatage de la tâche d'exportation. Le dossier contient :

  • Un fichier spanner-export.json.
  • Un fichier TableName-manifest.json pour chaque table de la base de données que vous avez exportée.
  • Un ou plusieurs fichiers TableName.avro-#####-of-#####. Le premier nombre figurant dans l'extension .avro-#####-of-##### représente l'index du fichier Avro compté à partir de zéro, tandis que le second correspond au nombre de fichiers Avro générés pour chaque table.

    Par exemple, Songs.avro-00001-of-00002 est le deuxième des deux fichiers contenant les données de la table Songs.

Sélectionner une région pour votre tâche d'exportation

Vous pouvez être amené à choisir une région différente selon que votre instance Cloud Spanner utilise une configuration régionale ou multirégionale. Pour éviter les frais de sortie du réseau, choisissez une région qui chevauche l'emplacement de votre instance Cloud Spanner.

Configuration d'instances régionales

Si la configuration de votre instance Cloud Spanner est régionale, choisissez la même région pour votre tâche d'exportation afin de profiter de la sortie gratuite dans la même région.

Si cette région n'est pas disponible, des frais seront facturés. Consultez la tarification Cloud Spanner de sortie du réseau pour choisir la région qui générera les frais de sortie du réseau les plus bas.

Configuration d'instances multirégionales

Si la configuration de votre instance Cloud Spanner est multirégionale, choisissez l'une des régions qui constituent cette configuration afin de profiter de la sortie gratuite dans la même région.

Si aucune région en chevauchement n'est disponible, des frais de sortie seront facturés. Consultez la tarification Cloud Spanner de sortie du réseau pour choisir la région qui générera les frais de sortie du réseau les plus bas.

Afficher ou dépanner des tâches dans l'interface utilisateur de Dataflow

Après avoir démarré une tâche d'exportation, vous pouvez en afficher les détails, y compris les journaux, dans la section Dataflow de Cloud Console.

Afficher les détails d'une tâche Dataflow

Pour afficher les détails d'une tâche en cours d'exécution :

  1. Accédez à la page Détails de la base de données correspondant à la base de données.
  2. Cliquez sur View job details in Dataflow (Afficher les détails de la tâche dans Dataflow) dans le message d'état de la tâche :

    Message d'état de la tâche en cours

    Cloud Console affiche les détails de la tâche Dataflow.

Pour afficher une tâche que vous avez exécutée récemment :

  1. Accédez à la page Détails de la base de données correspondant à la base de données.
  2. Cliquez sur l'onglet Importations/Exportations.
  3. Cliquez sur le nom de votre tâche dans la liste.

    Cloud Console affiche les détails de la tâche Dataflow.

Pour afficher une tâche que vous avez exécutée il y a plus d'une semaine :

  1. Accédez à la page des tâches Dataflow dans Cloud Console.

    Accéder à la page Tâches

  2. Recherchez votre tâche dans la liste, puis cliquez sur son nom.

    Cloud Console affiche les détails de la tâche Dataflow.

Afficher les journaux Dataflow correspondant à votre tâche

Pour afficher les journaux d'une tâche Dataflow, accédez à la page des détails de la tâche comme décrit ci-dessus, puis cliquez sur Journaux à droite du nom de la tâche.

Si une tâche échoue, recherchez les erreurs dans les journaux. Si des erreurs ont été enregistrées, leur nombre s'affiche à côté du bouton Logs (Journaux) :

Exemple de nombre d'erreurs affiché à côté du bouton

Pour afficher les erreurs relatives à une tâche :

  1. Cliquez sur le nombre d'erreurs affiché à côté du bouton Logs (Journaux).

    Cloud Console affiche les journaux de la tâche. Vous devrez éventuellement faire défiler l'affichage pour voir les erreurs.

  2. Repérez les entrées signalées par l'icône d'erreur Icône .

  3. Cliquez sur une entrée de journal pour développer son contenu.

Pour en savoir plus sur le dépannage lié aux tâches Dataflow, consultez la page Résoudre les problèmes liés à votre pipeline.

Dépanner les tâches d'exportation ayant échoué

Si les erreurs suivantes s'affichent dans les journaux de vos tâches :

com.google.cloud.spanner.SpannerException: NOT_FOUND: Session not found

--or--

com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED: Deadline expired before operation could complete.

Dans Cloud Console, vérifiez la latence en lecture de 99 % dans l'onglet Monitoring de Cloud Spanner. Si elle affiche des valeurs élevées (plusieurs secondes), cela signifie que l'instance est surchargée, ce qui entraîne l'expiration et l'échec de la lecture.

Cette latence élevée peut s'expliquer notamment par le fait que la tâche Dataflow s'exécute à l'aide d'un trop grand nombre de nœuds de calcul, ce qui surcharge l'instance Cloud Spanner.

Pour spécifier une limite du nombre de nœuds de calcul Dataflow, au lieu d'utiliser l'onglet "Importations/Exportations" de la page des détails de l'instance de votre base de données Cloud Spanner dans Cloud Console, vous devez démarrer l'exportation à l'aide du Modèle Cloud Spanner vers Cloud Storage Avro Dataflow et spécifier le nombre maximal de nœuds de calcul comme décrit ci-dessous :
  • Si vous utilisez la console Dataflow, le paramètre Nombre maximal de nœuds de calcul se trouve dans la section Paramètres facultatifs de la page Créer une tâche à partir d'un modèle.

  • Si vous utilisez gcloud, spécifiez l'argument max-workers. Exemple :

    gcloud dataflow jobs run my-export-job \
    --gcs-location='gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro' \
    --region=us-central1 \
    --parameters='instanceId=test-instance,databaseId=example-db,outputDir=gs://my-gcs-bucket' \
    --max-workers=10
    

Le nombre maximal de nœuds de calcul dépend fortement de la taille des données. Idéalement, l'utilisation totale du processeur associée à Spanner doit être comprise entre 70 % et 90 %. Cela permet d'obtenir un bon équilibre entre l'efficacité de Spanner et l'exécution d'une tâche sans erreur.

Pour atteindre cet objectif d'utilisation dans la majorité des schémas/scénarios, nous recommandons un nombre maximal de processeurs virtuels de nœud de calcul compris entre 4 et 6 fois le nombre de nœuds Spanner.

Par exemple, pour une instance Spanner à 10 nœuds utilisant des nœuds de calcul n1-standard-2, vous devez définir un nombre maximal de nœuds de calcul sur 25, ce qui donne 50 processeurs virtuels.

Optimiser les tâches d'exportation lentes

Si vous avez adopté les paramètres initiaux suggérés plus haut, vous n'avez en principe aucun autre réglage à effectuer. Voici toutefois quelques possibilités d'optimisation supplémentaires à envisager si l'exécution de votre tâche est lente :

  • Optimisez l'emplacement de la tâche et des données : exécutez la tâche Dataflow dans la même région que celle où se trouvent votre instance Cloud Spanner et votre bucket Cloud Storage.

  • Veillez à ce que les ressources Dataflow soient suffisantes : si les ressources de votre tâche Dataflow sont limitées par certains quotas Compute Engine correspondants, la page Dataflow associée à cette tâche dans Google Cloud Console affiche une icône d'avertissement Icône Avertissement ainsi qu'un message de journalisation :

    Capture d'écran de l'avertissement de limite de quota

    Dans ce cas, l'augmentation des quotas en termes de processeurs, d'adresses IP en cours d'utilisation et de disques persistants standards peut accélérer l'exécution de votre tâche, mais également augmenter les frais facturés pour Compute Engine.

  • Vérifiez l'utilisation du processeur associée à Cloud Spanner : si vous constatez qu'une instance présente un taux d'utilisation du processeur supérieur à 65 %, vous pouvez augmenter le nombre de nœuds configurés dans cette instance. Les nœuds supplémentaires ajoutent des ressources à Cloud Spanner, ce qui devrait accélérer l'exécution de la tâche, mais risque aussi d'entraîner la facturation de frais supplémentaires.

Facteurs qui influent sur les performances des tâches d'exportation

Plusieurs facteurs influent sur le temps nécessaire pour mener à bien une tâche d'exportation.

  • Taille de la base de données Cloud Spanner : le temps de traitement et les ressources requises augmentent avec la quantité de données à traiter.

  • Schéma de base de données Cloud Spanner : le nombre de tables, la taille des lignes, le nombre d'index secondaires et le nombre de clés étrangères influencent le temps d'exécution d'une tâche d'exportation.

  • Emplacement des données : les données sont transférées de Cloud Spanner à Cloud Storage via Dataflow. Dans l'idéal, ces trois composants doivent se trouver dans la même région. Dans le cas contraire, le déplacement des données entre les régions ralentit l'exécution de la tâche.

  • Nombre de nœuds de calcul Dataflow : Dataflow met en œuvre l'autoscaling pour décider du nombre de nœuds de calcul affectés à une tâche en fonction de la quantité de travail à effectuer. Le nombre de nœuds de calcul sera toutefois limité par les quotas en matière de processeurs, d'adresses IP en cours d'utilisation et de disques persistants standards. L'interface utilisateur de Dataflow affiche une icône d'avertissement lorsque des limites de quota sont atteintes. Dans ce cas, la progression est ralentie, mais la tâche doit néanmoins aboutir.

  • Charge existante sur Cloud Spanner : une tâche d'exportation ajoute généralement une faible charge sur une instance Cloud Spanner. Si cette instance présentait déjà une charge importante, l'exécution de la tâche est ralentie.

  • Nombre de nœuds Cloud Spanner : si l'instance présente un taux d'utilisation du processeur supérieur à 65 %, l'exécution de la tâche est ralentie.