Effectuer la migration d’un cluster Apache HBase vers une nouvelle version

Cet article explique comment mettre à jour un cluster Apache HBase sur Azure HDInsight vers une version plus récente.

Cet article vaut uniquement si vous utilisez le même compte Stockage Azure pour vos clusters source et de destination. Pour effectuer une mise à niveau avec un compte Stockage nouveau ou différent pour votre cluster de destination, consultez Migrer Apache HBase vers une nouvelle version avec un nouveau compte Stockage.

En règle générale, le temps d’arrêt dans le cas d’une mise à niveau se limite à quelques minutes. Ce temps d’arrêt est causé par le processus de vidage de toutes les données en mémoire et par le temps nécessaire à la configuration et au redémarrage des services sur le nouveau cluster. Vos résultats peuvent varier en fonction du nombre de nœuds, de la quantité de données et d’autres variables.

Vérifier la compatibilité d’Apache HBase

Avant de mettre à niveau Apache HBase, vérifiez que la version de HBase présente sur le cluster source est compatible avec celle du cluster de destination. Pour vérifier que votre application est compatible avec la nouvelle version, consultez la matrice de compatibilité et les notes de publication des versions de HBase dans le Guide de référence HBase.

Voici un exemple de matrice de compatibilité des versions. O indique une compatibilité et N une incompatibilité potentielle :

Type de compatibilité Version principale Version secondaire Correctif
Compatibilité communication client-serveur N O O
Compatibilité serveur-serveur N O O
Compatibilité format de fichier N O O
Compatibilité API client N O O
Compatibilité fichier binaire client N N O
Compatibilité API limitée côté serveur
Stable N O O
En cours d’évolution N N O
Instable N N N
Compatibilité dépendance N O O
Compatibilité opérationnelle N N Y

Pour plus d’informations sur les versions de HDInsight et leur compatibilité, consultez Versions d’Azure HDInsight.

Vue d’ensemble de la migration de clusters Apache HBase

Pour mettre à niveau votre cluster Apache HBase sur Azure HDInsight, effectuez les étapes de base suivantes. Pour obtenir des instructions détaillées, consultez les étapes et commandes détaillées, ou utilisez les scripts de la section Migrer HBase à l’aide de scripts pour la migration automatisée.

Préparez le cluster source :

  1. Arrêtez l’ingestion de données.
  2. Videz les données de memstore.
  3. Arrêtez HBase à partir d’Ambari.
  4. Pour les clusters utilisant les écritures accélérées, sauvegardez le répertoire du journal WAL (Write Ahead Log).

Préparez le cluster de destination :

  1. Créez le cluster de destination.
  2. Arrêtez HBase à partir d’Ambari.
  3. Mettez à jour fs.defaultFS dans les configurations des services HDFS pour faire référence au conteneur du cluster source d’origine.
  4. Pour les clusters utilisant les écritures accélérées, mettez à jour hbase.rootdir dans les configurations des services HBase pour faire référence au conteneur du cluster source d’origine.
  5. Nettoyez les données Zookeeper.

Effectuer la migration :

  1. Nettoyez et migrez le journal WAL.
  2. Copiez les applications du conteneur par défaut du cluster de destination vers le conteneur source d’origine.
  3. Démarrez tous les services à partir du cluster de destination Ambari.
  4. Vérifiez HBase.
  5. Supprimez le cluster source.

Étapes et commandes de migration détaillées

Aidez-vous de ces étapes et commandes détaillées pour migrer votre cluster Apache HBase.

Préparer le cluster source

  1. Arrêtez l’ingestion vers le cluster HBase source.

  2. Videz le cluster HBase source que vous mettez à niveau.

    HBase écrit les données entrantes dans un magasin en mémoire appelé memstore. Une fois que le memstore atteint une certaine taille, HBase le vide sur le disque pour le stockage à long terme dans le compte de stockage du cluster. La suppression du cluster source après une mise à niveau a également pour effet de supprimer les données contenues dans les memstores. Pour conserver les données, videz manuellement le memstore de chaque table sur le disque avant la mise à niveau.

    Vous pouvez vider les données des memstores en exécutant le script flush_all_tables.sh à partir du dépôt GitHub Azure hbase-utils.

    Vous pouvez aussi vider les données des memstores en exécutant la commande shell HBase suivante à partir du cluster HDInsight :

    hbase shell
    flush "<table-name>"
    
  3. Connectez-vous à Apache Ambari sur le cluster source avec https://<OLDCLUSTERNAME>.azurehdinsight.net, puis arrêtez les services HBase.

  4. À l’invite de confirmation, cochez la case pour activer le mode de maintenance pour HBase.

    Pour plus d’informations sur la connexion à Ambari et sur l’utilisation d’Ambari, consultez Gérer des clusters HDInsight à l’aide de l’interface utilisateur Web d’Ambari.

  5. Si votre cluster HBase source n’utilise pas la fonctionnalité d’écritures accélérées, passez cette étape. Pour les clusters HBase sources utilisant les écritures accélérées, sauvegardez le répertoire du journal WAL sous HDFS en exécutant les commandes suivantes à partir d’une session SSH sur un nœud Zookeeper ou un nœud Worker du cluster source.

    hdfs dfs -mkdir /hbase-wal-backup
    hdfs dfs -cp hdfs://mycluster/hbasewal /hbase-wal-backup
    

Préparer le cluster de destination

  1. Sur le portail Azure, configurez un nouveau cluster HDInsight de destination en utilisant le même compte de stockage que le cluster source, mais avec un nom de conteneur différent :

  2. Connectez-vous à Apache Ambari sur le nouveau cluster à l’adresse https://<NEWCLUSTERNAME>.azurehdinsight.net, puis arrêtez les services HBase.

  3. Sous Services>HDFS>Configs>Avanced>Advanced core-site, changez le paramètre HDFS fs.defaultFS de façon à le faire pointer vers le nom du conteneur du cluster source d’origine. Par exemple, le paramètre dans la capture d’écran suivante doit être remplacé par wasbs://hbase-upgrade-old-2021-03-22.

    Dans Ambari, sélectionnez Services > HDFS > Configs > Advanced > Advanced core-site et changez le nom du conteneur.

  4. Si votre cluster de destination utilise la fonctionnalité d’écritures accélérées, modifiez le chemin hbase.rootdir en le faisant pointer vers le nom du conteneur du cluster source d’origine. Par exemple, le chemin suivant doit être remplacé par hbase-upgrade-old-2021-03-22. Si votre cluster n’utilise pas les écritures accélérées, passez cette étape.

    Dans Ambari, changez le nom du conteneur pour HBase rootdir.

  5. Nettoyez les données Zookeeper sur le cluster de destination en exécutant les commandes suivantes dans un nœud Zookeeper ou worker :

    hbase zkcli
    rmr /hbase-unsecure
    quit
    

Nettoyer et migrer le journal WAL

Exécutez les commandes suivantes en fonction de votre version de HDI source et selon que les clusters source et de destination utilisent ou non les écritures accélérées.

  • Le cluster de destination utilise toujours HDI version 4.0, car HDI 3.6 est en Support De base et n’est pas recommandé pour les nouveaux clusters.
  • La commande de copie HDFS est hdfs dfs <copy properties starting with -D> -cp <source> <destination> # Serial execution.

Notes

  • Le <source-container-fullpath> pour le stockage de type WASB est wasbs://<source-container-name>@<storageaccountname>.blob.core.windows.net.
  • Le <source-container-fullpath> pour le stockage de type Azure Data Lake Storage Gen2 est abfs://<source-container-name>@<storageaccountname>.dfs.core.windows.net.

Le cluster source utilise HDI 3.6 ou HDI 4.0 avec les écritures accélérées et le cluster de destination utilise les écritures accélérées

Nettoyez les données FS du journal WAL pour le cluster de destination et copiez le répertoire du journal WAL du cluster source vers le HDFS du cluster de destination. Copiez le répertoire en exécutant les commandes suivantes dans un nœud Zookeeper ou worker sur le cluster de destination :

sudo -u hbase hdfs dfs -rm -r hdfs://mycluster/hbasewal
sudo -u hbase hdfs dfs -cp <source-container-fullpath>/hbase-wal-backup/hbasewal hdfs://mycluster/

Le cluster source utilise HDI 3.6 sans les écritures accélérées et le cluster de destination utilise les écritures accélérées

Nettoyez les données FS du journal WAL pour le cluster de destination et copiez le répertoire du journal WAL du cluster source vers le HDFS du cluster de destination. Copiez le répertoire en exécutant les commandes suivantes dans un nœud Zookeeper ou worker sur le cluster de destination :

sudo -u hbase hdfs dfs -rm -r hdfs://mycluster/hbasewal
sudo -u hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs" -cp <source-container>/hbase/*WALs hdfs://mycluster/hbasewal

Le cluster source utilise HDI 3.6 sans les écritures accélérées et le cluster de destination n’utilise pas les écritures accélérées

Nettoyez les données FS du journal WAL pour le cluster de destination et copiez le répertoire du journal WAL du cluster source vers le HDFS du cluster de destination. Pour copier le répertoire, exécutez les commandes suivantes dans un nœud Zookeeper ou worker sur le cluster de destination :

sudo -u hbase hdfs dfs -rm -r /hbase-wals/*
sudo -u hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs" -cp <source-container-fullpath>/hbase/*WALs /hbase-wals

Le cluster source utilise HDI 4.0 sans les écritures accélérées et le cluster de destination utilise les écritures accélérées

Nettoyez les données FS du journal WAL pour le cluster de destination et copiez le répertoire du journal WAL du cluster source vers le HDFS du cluster de destination. Copiez le répertoire en exécutant les commandes suivantes dans un nœud Zookeeper ou worker sur le cluster de destination :

sudo -u hbase hdfs dfs -rm -r hdfs://mycluster/hbasewal
sudo -u hbase hdfs dfs -cp <source-container-fullpath>/hbase-wals/* hdfs://mycluster/hbasewal

Le cluster source utilise HDI 4.0 sans les écritures accélérées et le cluster de destination n’utilise pas les écritures accélérées

Nettoyez les données FS du journal WAL pour le cluster de destination et copiez le répertoire du journal WAL du cluster source vers le HDFS du cluster de destination. Pour copier le répertoire, exécutez les commandes suivantes dans un nœud Zookeeper ou worker sur le cluster de destination :

sudo -u hbase hdfs dfs -rm -r /hbase-wals/*
sudo -u hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals /

Effectuer la migration

  1. En utilisant le contexte utilisateur sudo -u hdfs, copiez le dossier /hdp/apps/<new-version-name> et son contenu de <destination-container-fullpath> vers le dossier /hdp/apps sous <source-container-fullpath>. Vous pouvez copier le dossier en exécutant les commandes suivantes sur le cluster de destination :

    sudo -u hdfs hdfs dfs -cp /hdp/apps/<hdi-version> <source-container-fullpath>/hdp/apps
    

    Par exemple :

    sudo -u hdfs hdfs dfs -cp /hdp/apps/4.1.3.6 wasbs://hbase-upgrade-old-2021-03-22@hbaseupgrade.blob.core.windows.net/hdp/apps
    
  2. Sur le cluster de destination, enregistrez vos modifications et redémarrez tous les services nécessaires indiqués par Ambari.

  3. Faites pointer votre application vers le cluster de destination.

    Notes

    Le nom DNS statique de votre application change pendant la mise à niveau. Au lieu de coder en dur ce nom DNS, vous pouvez configurer un CNAME dans les paramètres DNS de votre nom de domaine qui pointe vers le nom du cluster. Une autre option consiste à utiliser un fichier config pour votre application, que vous pouvez mettre à jour sans nouveau déploiement.

  4. Lancez l’ingestion.

  5. Vérifiez la cohérence HBase et les opérations simples de langage de définition de données (DDL) et de langage de manipulation de données (DDL).

  6. Si le cluster de destination est satisfaisant, supprimez le cluster source.

Migrer HBase à l’aide de scripts

  1. Exécutez le script migrate-hbase-source.sh sur le cluster source et migrate-hbase-dest.sh sur le cluster de destination. Utilisez les instructions suivantes pour exécuter ces scripts.

    Notes

    Ces scripts ne copient pas les anciens journaux WAL de HBase dans le cadre de la migration. Par conséquent, les scripts ne doivent pas être utilisés sur les clusters avec la fonctionnalité de sauvegarde ou de réplication HBase activée.

  2. Sur le cluster source

    sudo bash migrate-hbase-source.sh
    
  3. Sur le cluster de destination

    sudo bash migrate-hbase-dest.sh  -f <src_default_Fs>
    

Argument obligatoire pour la commande ci-dessus :

   -f, --src-fs
   The fs.defaultFS of the source cluster
   For example:
   -f wasb://anynamehbase0316encoder-2021-03-17t01-07-55-935z@anynamehbase0hdistorage.blob.core.windows.net

Étapes suivantes

Pour plus d’informations sur Apache HBase et la mise à niveau de clusters HDInsight, consultez les articles suivants :