Tutoriel : Migrer vos données vers un compte d'API pour Cassandra

S’APPLIQUE À : Cassandra

Si vous êtes développeur, vous avez peut-être des charges de travail Cassandra exécutées localement ou dans le cloud que vous aimeriez faire migrer vers Azure. Vous pouvez migrer de telles charges de travail vers un compte d’API pour Cassandra dans Azure Cosmos DB. Ce tutoriel fournit des instructions sur les différentes options permettant de migrer des données Apache Cassandra vers le compte d’API pour Cassandra dans Azure Cosmos DB.

Ce tutoriel décrit les tâches suivantes :

  • Planifier la migration
  • Prérequis pour la migration
  • Migrer des données à l'aide de la commande cqlshCOPY
  • Migrer des données à l’aide de Spark

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

Prérequis pour la migration

  • Estimer vos besoins en débit : avant de migrer des données vers le compte d’API pour Cassandra dans Azure Cosmos DB, vous devez estimer les besoins en débit de votre charge de travail. D'une façon générale, commencez par le débit moyen nécessaire pour les opérations CRUD, puis incluez le débit supplémentaire nécessaire pour les opérations ETL (Extract Transform Load) ou entraînant une charge ponctuelle importante. Vous avez besoin des informations suivantes pour planifier la migration :

    • Taille des données existantes ou estimation de la taille des données : Définit la taille minimale de la base de données et le débit requis. Si vous estimez la taille des données pour une nouvelle application, vous pouvez supposer que les données sont uniformément réparties sur les lignes, et estimer la valeur en multipliant par la taille des données.

    • Débit nécessaire : débit approximatif des opérations de lecture (interroger/obtenir) et d'écriture (mettre à jour/supprimer/insérer). Cette valeur est nécessaire pour calculer les unités de requête nécessaires, ainsi que la taille des données à l'état stable.

    • Le schéma : connectez-vous à votre cluster Cassandra existant via cqlsh et exportez le schéma depuis Cassandra :

      cqlsh [IP] "-e DESC SCHEMA" > orig_schema.cql
      

      Après avoir identifié les exigences de votre charge de travail existante, créez un compte, une base de données et des conteneurs Azure Cosmos DB conformément aux spécifications établies en matière de débit.

    • Déterminer le coût en unités de requête pour une opération : vous pouvez déterminer les unités de requête avec n’importe quel kit SDK pris en charge par l’API pour Cassandra. Cet exemple montre la version .NET pour obtenir les frais de RU.

      var tableInsertStatement = table.Insert(sampleEntity);
      var insertResult = await tableInsertStatement.ExecuteAsync();
      
      foreach (string key in insertResult.Info.IncomingPayload)
        {
           byte[] valueInBytes = customPayload[key];
           double value = Encoding.UTF8.GetString(valueInBytes);
           Console.WriteLine($"CustomPayload:  {key}: {value}");
        }
      
  • Allouer le débit requis : Azure Cosmos DB peut procéder à la mise à l'échelle automatique du stockage et du débit au fil de l'accroissement de vos besoins. Vous pouvez estimer vos besoins en débit en utilisant le calculateur d’unités de requête d’Azure Cosmos DB.

  • Créer des tables sur le compte d'API pour Cassandra : avant d'entamer la migration des données, créez toutes vos tables à partir du portail Azure ou de cqlsh. Si vous migrez vers un compte Azure Cosmos DB qui dispose d'un débit de niveau base de données, veillez à fournir une clé de partition au moment de la création des conteneurs.

  • Augmenter le débit : la durée de la migration de vos données dépend de la quantité de débit que vous avez provisionnée pour les tables dans Azure Cosmos DB. Augmentez le débit pendant la durée de la migration. Si le débit est plus élevé, vous pouvez éviter la limitation de débit et procéder à une migration plus rapide. Une fois que vous avez effectué la migration, diminuez le débit pour réduire les coûts. Nous vous recommandons également de disposer d'un compte Azure Cosmos DB dans la même région que votre base de données source.

  • Activer TLS : Azure Cosmos DB obéit à des normes et à des exigences strictes en matière de sécurité. Veillez à activer TLS lorsque vous interagissez avec votre compte. Quand vous utilisez CQL avec SSH, vous pouvez fournir des informations sur TLS.

Options pour migrer des données

Vous pouvez déplacer des données depuis des charges de travail Cassandra existantes vers Azure Cosmos DB à l'aide de la commande cqlshCOPY ou en utilisant Spark.

Migrer des données à l'aide de la commande cqlsh COPY

Utilisez la commande CQL COPY pour copier des données locales vers le compte d'API pour Cassandra dans Azure Cosmos DB.

Avertissement

Utilisez la copie CQL uniquement pour migrer de petits jeux de données. Pour déplacer des jeux de données volumineux, migrez les données à l’aide de Spark.

  1. Pour être certain que votre fichier csv contient la structure de fichiers adéquate, utilisez la commande COPY TO pour exporter les données directement de votre table Cassandra source dans un fichier csv (assurez-vous que cqlsh est connecté à la table source à l’aide des informations d’identification appropriées) :

    COPY exampleks.tablename TO 'data.csv' WITH HEADER = TRUE;   
    
  2. À présent, récupérez les informations de la chaîne de connexion de votre compte d’API pour Cassandra :

    • Connectez-vous au portail Azure et accédez à votre compte Azure Cosmos DB.

    • Ouvrez le volet Chaîne de connexion. Vous y trouverez toutes les informations dont vous avez besoin pour vous connecter à votre compte d'API pour Cassandra depuis cqlsh.

  3. Connectez-vous à cqlsh en utilisant les informations de connexion du portail.

  4. Utilisez la commande CQLCOPY FROM pour copier data.csv (toujours situé dans le répertoire racine de l’utilisateur où cqlsh est installé) :

    COPY exampleks.tablename FROM 'data.csv' WITH HEADER = TRUE;
    

Notes

L’API pour Cassandra prend en charge le protocole version 4, fourni avec Cassandra 3.11. Il peut y avoir des problèmes liés à l’utilisation de versions de protocole ultérieures avec notre API. COPY FROM avec la version de protocole ultérieure peut générer une boucle et retourner des lignes en double. Ajoutez la version de protocole à la commande cqlsh.

cqlsh <USERNAME>.cassandra.cosmos.azure.com 10350 -u <USERNAME> -p <PASSWORD> --ssl --protocol-version=4
Ajouter des options de limitation du débit à la commande CQL Copy

La commande COPY dans cqlsh prend en charge différents paramètres pour contrôler le taux d’ingestion de documents dans Azure Cosmos DB.

La configuration par défaut de la commande COPY tente d’ingérer des données à un rythme très rapide et ne tient pas compte du comportement de limitation de débit de Cosmos DB. Vous devez réduire le CHUNKSIZE ou INGESTRATE en fonction du débit configuré sur la collection.

Nous recommandons la configuration ci-dessous (au minimum) pour une collection à 20 000 RU si la taille du document ou de l’enregistrement est de 1 Ko.

  • CHUNKSIZE = 100
  • INGESTRATE = 500
  • MAXATTEMPTS = 10
Exemple de commandes
  • Copie de données de l’API pour Cassandra vers un fichier csv local
COPY standard1 (key, "C0", "C1", "C2", "C3", "C4") TO 'backup.csv' WITH PAGESIZE=100 AND MAXREQUESTS=1 ;
  • Copie de données d’un fichier csv local vers l’API pour Cassandra
COPY standard2 (key, "C0", "C1", "C2", "C3", "C4") FROM 'backup.csv' WITH CHUNKSIZE=100 AND INGESTRATE=100 AND MAXATTEMPTS=10;

Important

Seule la version open source Apache Cassandra de CQLSH COPY est prise en charge. Les versions Datastax Enterprise (DSE) de CQLSH peuvent rencontrer des erreurs.

Migrer des données à l’aide de Spark

Effectuez les étapes suivantes pour migrer des données vers le compte d’API pour Cassandra avec Spark :

  1. Approvisionnez un cluster Azure Databricks ou un cluster HDInsight.

  2. Déplacez les données vers le point de terminaison de l'API pour Cassandra de destination. Reportez-vous à ce Guide de procédures pour la migration avec Azure Databricks.

La migration de données par le biais de tâches Spark est une solution recommandée si vos données se trouvent dans un cluster existant dans des machines virtuelles Azure ou dans un autre cloud. Pour ce faire, vous devez configurer Spark en tant qu'intermédiaire pour une ingestion ponctuelle ou régulière. Vous pouvez accélérer cette migration avec une connectivité Azure ExpressRoute entre votre environnement local et Azure.

Migration dynamique

Lorsqu’une migration sans temps d’arrêt à partir d’un cluster Apache Cassandra natif est requise, nous vous recommandons de configurer la double écriture et une charge de données en bloc distincte pour migrer les données historiques. L’implémentation de ce modèle est plus simple en fournissant un proxy open source à double écriture permettant de modifier au minimum le code d’application. Jetez un coup d’œil à notre article sur la migration en direct à l’aide d’un proxy à double écriture et d’Apache Spark pour plus d’informations sur l’implémentation de ce modèle.

Nettoyer les ressources

Dès que vous n'en avez plus besoin, vous pouvez supprimer le groupe de ressources, le compte Azure Cosmos DB et toutes les ressources associées. Pour cela, sélectionnez le groupe de ressources de la machine virtuelle, sélectionnez Supprimer, puis confirmez le nom du groupe de ressources à supprimer.

Étapes suivantes

Dans ce tutoriel, vous avez appris à migrer vos données vers un compte d'API pour Cassandra dans Azure Cosmos DB. Vous pouvez maintenant découvrir d'autres concepts d'Azure Cosmos DB :