Migrer Apache HBase vers une nouvelle version et un compte de stockage
Cet article explique comment mettre à jour votre cluster Apache HBase sur Azure HDInsight vers une version plus récente avec un autre compte Stockage Azure.
Cet article vaut uniquement si vous avez besoin d’utiliser des comptes Stockage différents pour vos clusters source et de destination. Pour mettre à niveau des versions avec un même compte Stockage pour vos clusters source et de destination, consultez Migrer Apache HBase vers une nouvelle version.
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 |
Les notes de publication des versions de HBase doivent décrire les incompatibilités cassantes. Testez votre application dans un cluster exécutant la version cible de HDInsight et HBase.
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 et migrer votre cluster Apache HBase sur Azure HDInsight vers un nouveau compte de stockage, effectuez les étapes de base suivantes. Pour obtenir des instructions détaillées, reportez-vous aux étapes et commandes détaillées.
Préparez le cluster source :
- Arrêtez l’ingestion de données.
- Videz les données
memstore
. - Arrêtez HBase à partir d’Ambari.
- 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 :
- Créez le cluster de destination.
- Arrêtez HBase à partir d’Ambari.
- Nettoyez les données Zookeeper.
- Faites basculer l’utilisateur vers HBase.
Effectuez la migration :
- Nettoyez le système de fichiers de destination, migrez les données, puis supprimez
/hbase/hbase.id
. - Nettoyez et migrez le journal WAL.
- Démarrez tous les services à partir du cluster de destination Ambari.
- Vérifiez HBase.
- 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 avec un nouveau compte de stockage.
Préparer le cluster source
Arrêtez l’ingestion vers le cluster HBase source.
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 quememstore
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 supprime également toutes les données dans lememstores
. Pour conserver les données, videz manuellementmemstore
de chaque table sur le disque avant la mise à niveau.Vous pouvez vider les données de
memstore
en exécutant le script flush_all_tables.sh à partir du référentiel GitHub Azure hbase-utils.Vous pouvez aussi vider les données
memstore
en exécutant la commande shell HBase suivante à partir du cluster HDInsight :hbase shell flush "<table-name>"
Connectez-vous à Apache Ambari sur le cluster source avec
https://<OLDCLUSTERNAME>.azurehdinsight.net
, puis arrêtez les services HBase.À 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.
Si votre cluster HBase source ne dispose pas de la fonctionnalité d’écritures accélérées, passez cette étape. Pour les clusters HBase sources qui utilisent 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
Sur le portail Azure, configurez un nouveau cluster HDInsight de destination qui utilise un compte de stockage différent de celui de votre cluster source.
Connectez-vous à Apache Ambari sur le nouveau cluster à l’adresse
https://<NEWCLUSTERNAME>.azurehdinsight.net
, puis arrêtez les services HBase.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
Faites basculer l’utilisateur vers HBase en exécutant
sudo su hbase
.
Nettoyer et migrer le système de fichiers et 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.
- Le cluster source utilise HDI 3.6 avec les écritures accélérées et le cluster de destination utilise les écritures accélérées.
- Le cluster source utilise HDI 3.6 sans les écritures accélérées et le cluster de destination utilise des écritures accélérées.
- 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.
- Le cluster source utilise HDI 4.0 avec les écritures accélérées et le cluster de destination utilise les écritures accélérées.
- 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.
- 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.
Le <container-endpoint-url>
du compte de stockage est https://<storageaccount>.blob.core.windows.net/<container-name>
. Passez le jeton SAS du compte de stockage à la fin de l’URL.
- Le
<container-fullpath>
pour le stockage de type WASB estwasbs://<container-name>@<storageaccount>.blob.core.windows.net
- Le
<container-fullpath>
pour le stockage de type Azure Data Lake Storage Gen2 estabfs://<container-name>@<storageaccount>.dfs.core.windows.net
.
Commandes de copie
La commande de copie HDFS est hdfs dfs <copy properties starting with -D> -cp
Pour bénéficier de meilleures performances lors de la copie de fichiers qui ne se trouvent pas dans un objet blob de pages, utilisez hadoop distcp
: hadoop distcp <copy properties starting with -D>
Pour passer la clé du compte de stockage, utilisez :
-Dfs.azure.account.key.<storageaccount>.blob.core.windows.net='<storage account key>'
-Dfs.azure.account.keyprovider.<storageaccount>.blob.core.windows.net=org.apache.hadoop.fs.azure.SimpleKeyProvider
Vous pouvez aussi utiliser AzCopy pour bénéficier de meilleures performances lors de la copie de fichiers de données HBase.
Exécutez la commande AzCopy :
azcopy cp "<source-container-endpoint-url>/hbase" "<target-container-endpoint-url>" --recursive
Si le compte de stockage de destination est un stockage d’objets blob Azure, effectuez cette étape après la copie. Si le compte de stockage de destination est Data Lake Storage Gen2, ignorez cette étape.
Le pilote Hadoop WASB utilise des objets blob spéciaux de taille 0 correspondant à chaque répertoire. AzCopy ignore ces fichiers pendant la copie. Sachant que certaines opérations WASB utilisent ces objets blob, vous devez les créer dans le cluster de destination. Pour créer les objets blob, exécutez la commande Hadoop suivante à partir d’un nœud du cluster de destination :
sudo -u hbase hadoop fs -chmod -R 0755 /hbase
Vous pouvez télécharger AzCopy à partir de la page Bien démarrer avec AzCopy. Pour plus d’informations sur l’utilisation d’AzCopy, consultez azcopy copy.
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
Pour nettoyer le système de fichiers et migrer des données, exécutez les commandes suivantes :
hdfs dfs -rm -r /hbase hadoop distcp <source-container-fullpath>/hbase /
Supprimez
hbase.id
en exécutanthdfs dfs -rm /hbase/hbase.id
Pour nettoyer et migrer le journal WAL, exécutez les commandes suivantes :
hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal hdfs dfs -cp <source-container-fullpath>/hbase-wal-backup/hbasewal hdfs://<destination-cluster>/hbasewal
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
Pour nettoyer le système de fichiers et migrer des données, exécutez les commandes suivantes :
hdfs dfs -rm -r /hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase / hdfs dfs -rm -r /hbase/*WALs
Supprimez
hbase.id
en exécutanthdfs dfs -rm /hbase/hbase.id
Pour nettoyer et migrer le journal WAL, exécutez les commandes suivantes :
hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal/* hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase/*WALs hdfs://<destination-cluster>/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
Pour nettoyer le système de fichiers et migrer des données, exécutez les commandes suivantes :
hdfs dfs -rm -r /hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase / hdfs dfs -rm -r /hbase/*WALs
Supprimez
hbase.id
en exécutanthdfs dfs -rm /hbase/hbase.id
Pour nettoyer et migrer le journal WAL, exécutez les commandes suivantes :
hdfs dfs -rm -r /hbase-wals/* hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -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
Pour nettoyer le système de fichiers et migrer des données, exécutez les commandes suivantes :
hdfs dfs -rm -r /hbase hadoop distcp <source-container-fullpath>/hbase /
Supprimez
hbase.id
en exécutanthdfs dfs -rm /hbase/hbase.id
Pour nettoyer et migrer le journal WAL, exécutez les commandes suivantes :
hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals hdfs://<destination-cluster>/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
Pour nettoyer le système de fichiers et migrer des données, exécutez les commandes suivantes :
hdfs dfs -rm -r /hbase hadoop distcp <source-container-fullpath>/hbase /
Supprimez
hbase.id
en exécutanthdfs dfs -rm /hbase/hbase.id
Pour nettoyer et migrer le journal WAL, exécutez les commandes suivantes :
hdfs dfs -rm -r /hbase-wals/* hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals /
Effectuer la migration
Sur le cluster de destination, enregistrez vos modifications et redémarrez tous les services nécessaires indiqués par Ambari.
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.
Lancez l’ingestion.
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).
Si le cluster de destination est satisfaisant, supprimez le cluster source.
Étapes suivantes
Pour plus d’informations sur Apache HBase et la mise à niveau de clusters HDInsight, consultez les articles suivants :