## Intro

HDFS est le socle de nombreuses plates-formes de données, donc sa mise à niveau ou sa migration doit être prévisible, observable et réversible. Ce guide propose une approche éprouvée sur le terrain avec des étapes concrètes, des commandes et des contrôles. Vous allez :

- Inventorier les versions, la topologie et les dépendances.

- Choisir une voie sûre : mise à niveau progressive, mise à niveau par redémarrage ou migration vers un nouveau cluster.

- Exécuter des étapes d'implémentation gardées avec des exemples.

- Valider la correction et les performances.

- Gérer les modes de défaillance et effectuer un retour arrière ou une récupération.

- Réutiliser une liste de contrôle opérationnelle pratique.

Le premier pilote doit être étroit, mesurable et facile à inspecter localement avant le déploiement sur le reste du parc. Choisissez un répertoire contenu ou un locataire non critique pour pratiquer le flux de bout en bout et durcir vos runbooks.

## Inventaire des versions et de l'environnement

Avant de toucher à quoi que ce soit, capturez l'état actuel et cible et confirmez les prérequis.

- Versions HDFS actuelles et cibles (et distribution Hadoop le cas échéant).

- Topologie NameNode : NameNode unique, HA (actif/standby), JournalNodes, ZKFC.

- DataNodes : nombre, capacité de stockage, utilisation moyenne.

- Sécurité : domaine Kerberos, keytabs, principaux de service ; paramètres TLS.

- Services dépendants : YARN, Spark, Hive, HBase, NiFi, connecteurs Kafka, ingestion personnalisée. Identifiez tout ce qui écrit sur HDFS et qui doit être mis en pause ou vidé pendant les basculements.

- Réseau : bande passante et latence inter-rack ; bande passante inter-cluster pour les migrations.

- Supervision : points de terminaison métriques, journaux, règles d'alerte.

- Sauvegardes et snapshots : emplacement fsimage/edits, politiques de snapshot.

Exemple d'inventaire construit (remplacez par vos valeurs réelles) :

<div class="my-stack-md overflow-x-auto">
<table class="w-full min-w-[42rem] border-collapse text-left">
<thead><tr><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Composant</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Actuel</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Cible</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Nombre d&#39;hôtes</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Propriétaire du changement</th></tr></thead>
<tbody><tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">NameNode (HA)</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">3.2.1</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">3.3.6</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">2</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">ops-hdfs</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">JournalNode</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">3.2.1</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">3.3.6</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">3</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">ops-hdfs</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">DataNode</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">3.2.1</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">3.3.6</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">24</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">ops-hdfs</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">ZKFC/ZooKeeper</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">3.2.1 / 3.5</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">3.3.6 / 3.8</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">3</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">ops-core</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Sécurité</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">MIT Kerberos</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">identique</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">n/a</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">sec-platform</td></tr></tbody>
</table>
</div>
Liste de contrôle des prérequis :

- Confirmer que la version cible prend en charge vos fonctionnalités (ex. snapshots, zones de chiffrement).

- S'assurer d'un espace libre suffisant sur les disques de métadonnées NameNode (au moins 2x fsimage/edits pour la sécurité) et sur les DataNodes pour les rapports de blocs et les compactages.

- Vérifier la santé HA si vous prévoyez des mises à niveau progressives.

- Vérifier la disponibilité de DistCp si vous migrez entre clusters.

- S'assurer que vous pouvez mettre en pause ou vider les writers (Spark Streaming, NiFi, sinks Kafka HDFS) et les reprendre après validation.

## Chemin de configuration sûr

Choisissez une approche adaptée à votre topologie, votre tolérance au risque et votre budget d'indisponibilité. Ce tableau aide à décider.

<div class="my-stack-md overflow-x-auto">
<table class="w-full min-w-[42rem] border-collapse text-left">
<thead><tr><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Voie</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Prérequis</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Cas d&#39;usage typique</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Impact client</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Retour arrière</th></tr></thead>
<tbody><tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Mise à niveau progressive sur place</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">NameNodes HA avec ZKFC/JournalNodes</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Grands clusters nécessitant une quasi‑absence d&#39;indisponibilité</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Courts bascuels ; la plupart des opérations continuent</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Supporté jusqu&#39;à la finalisation</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Mise à niveau par redémarrage (hors ligne)</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">NN unique ou pas de HA ; petits clusters</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Fenêtre de maintenance acceptable</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Indisponibilité complète HDFS</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Restaurer anciens binaires et sauvegardes de métadonnées</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Migration vers nouveau cluster (DistCp)</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Capacité cluster cible et réseau</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Renouvellement matériel, grand saut de version</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Fenêtre de basculement seulement</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Conserver la source en lecture seule ou accessible en écriture pour repli</td></tr></tbody>
</table>
</div>

### Garde-fous pour toute approche

- Sauvegarder les métadonnées : fsimage et edits.

- Créer des snapshots des chemins critiques.

- Mettre au repos les gros writers.

- Conserver anciens binaires et configs pour un retour rapide.

- Éviter de finaliser les mises à niveau avant que la validation ne passe.

### Sauvegarder les métadonnées et préparer les snapshots

Exécutez sur un hôte NameNode avec privilèges admin.

# Entrer en mode sans échec pour une image cohérente
hdfs dfsadmin -safemode enter

# Sauvegarder un fsimage frais sur le stockage local du NameNode
hdfs dfsadmin -saveNamespace

# Récupérer le fsimage vers un emplacement de sauvegarde externe
BACKUP_DIR=/var/backups/hdfs/$(date +%F)
mkdir -p "$BACKUP_DIR"
hdfs dfsadmin -fetchImage "$BACKUP_DIR/fsimage"

# Quitter le mode sans échec
hdfs dfsadmin -safemode leave

# Optionnel : archiver aussi les répertoires name (adaptez les chemins à votre dfs.namenode.name.dir)
# tar -czf "$BACKUP_DIR/name-dirs.tgz" /data/nn1 /data/nn2 
 Créez des filets de sécurité en lecture seule sur les répertoires métier critiques. Les snapshots sont peu coûteux et protègent contre les suppressions accidentelles pendant les mises à niveau.

# Activer les snapshots là où c'est nécessaire (une fois par répertoire)
hdfs dfs -allowSnapshot /data/projects

# Créer un snapshot de base avant tout changement
hdfs dfs -createSnapshot /data/projects pre-upgrade-$(date +%F) 

### Mise à niveau progressive (HA) exemple

 Utilisez lorsque vous avez des NameNodes Actif/Standby et des JournalNodes.

- Préparer la mise à niveau progressive (crée des points de contrôle spéciaux pour permettre le retour arrière) :

hdfs dfsadmin -rollingUpgrade prepare
hdfs dfsadmin -rollingUpgrade query 

- Mettre à niveau le NameNode Standby en premier :

- Arrêter le service Standby NN.

- Installer les nouveaux binaires HDFS et configs mises à jour.

- Démarrer le Standby NN et s'assurer qu'il devient Standby et rattrape les edits.

 Exemple avec scripts courants (adaptez à votre gestionnaire de services) :

# Sur l'hôte Standby NN
export HADOOP_HOME=/opt/hadoop-3.3.6
# Redémarrer uniquement le processus Standby NN via votre outillage de service
# systemctl restart hadoop-hdfs-namenode

# Vérifier qu'il est en Standby et sain
hdfs haadmin -getServiceState nn2 

- Basculer et mettre à niveau l'ancien Actif :

 # Déclencher un basculement contrôlé vers le Standby mis à niveau
hdfs haadmin -failover nn1 nn2

# Mettre à niveau l'ancien Actif (maintenant Standby)
# systemctl stop hadoop-hdfs-namenode sur nn1
# Installer nouveaux binaires/configs sur nn1
# systemctl start hadoop-hdfs-namenode sur nn1 

- Redémarrer les DataNodes par petits lots :

 # Sur chaque hôte DataNode, vider et redémarrer
# systemctl restart hadoop-hdfs-datanode

# Après chaque lot, vérifier la santé du cluster
hdfs dfsadmin -report | grep -E "Live datanodes|Dead datanodes"
hdfs fsck / -blocks -locations -racks | tail -n 10 

- Finaliser uniquement après validation complète (voir section Vérification) :

 hdfs dfsadmin -rollingUpgrade finalize 
 Si la validation échoue avant la finalisation, vous pouvez revenir à la version précédente en redémarrant avec les anciens binaires ; le point de contrôle préparé le rend sûr.

### Mise à niveau par redémarrage (hors ligne) exemple

Utilisez lorsque vous avez un NameNode unique ou pouvez accepter une indisponibilité.

- Arrêter les writers et services dépendants : mettre en pause les processeurs HDFS NiFi, arrêter les jobs Spark, mettre en pause les sinks Kafka HDFS.

- Arrêter HDFS proprement (l'ordre compte) :

# Arrêter les clients (services YARN qui écrivent sur HDFS, le cas échéant)
# Arrêter HBase/Hive Metastore si couplés étroitement

# Arrêter les DataNodes en premier
$HADOOP_HOME/sbin/hadoop-daemons.sh stop datanode

# Arrêter NameNode(s), ZKFC, JournalNodes
$HADOOP_HOME/sbin/hadoop-daemon.sh stop namenode
$HADOOP_HOME/sbin/hadoop-daemons.sh stop zkfc
$HADOOP_HOME/sbin/hadoop-daemons.sh stop journalnode 

- Sauvegarder les métadonnées NameNode comme montré plus haut (fsimage, edits, et répertoires name).

- Installer les nouveaux binaires HDFS et configs mises à jour sur tous les nœuds.

- Démarrer JournalNodes, ZKFC, NameNode, puis DataNodes :

 $HADOOP_HOME/sbin/hadoop-daemons.sh start journalnode
$HADOOP_HOME/sbin/hadoop-daemons.sh start zkfc
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
$HADOOP_HOME/sbin/hadoop-daemons.sh start datanode 

- Valider minutieusement. Ne supprimez pas les anciennes métadonnées ni binaires tant que vous n'avez pas finalisé votre décision de rester sur la nouvelle version.

### Migration vers un nouveau cluster (DistCp) exemple

 Utilisez lorsque vous avez besoin de nouveau matériel, d'un grand saut de version ou d'une page blanche. Cela réduit le risque car le cluster source reste intact jusqu'au basculement.

Hypothèses :

- Source : hdfs://src-nn:8020

- Cible : hdfs://dst-nn:8020

- Kerberos activé des deux côtés, avec confiance inter‑realm ou principaux correspondants.

- Préparer les répertoires cibles et permissions :

# Créer le répertoire de haut niveau et définir la propriété sur la cible
hdfs dfs -fs hdfs://dst-nn:8020 -mkdir -p /data/projects
hdfs dfs -fs hdfs://dst-nn:8020 -chown -R analytics:analytics /data/projects 

- Prendre un snapshot de base et lancer la copie DistCp initiale :

 # Sur le cluster source
hdfs dfs -allowSnapshot /data/projects || true
hdfs dfs -createSnapshot /data/projects snap0

# Copie de base avec préservation et limitation de bande passante (exemple construit)
hadoop distcp \
 -prbugp -m 50 -bandwidth 100 \
 hdfs://src-nn:8020/data/projects \
 hdfs://dst-nn:8020/data/projects 
 Options utilisées :

- -p rbugp préserve la réplication, la taille de bloc, l'utilisateur, le groupe, les permissions.

- -m 50 définit 50 tâches map (à ajuster selon votre cluster).

- -bandwidth 100 limite la bande passante par map à 100 Mo/s (exemple construit).

- Synchronisation incrémentale pendant la fenêtre de basculement :

Créez un nouveau snapshot et utilisez diff de snapshot ou passe update/delete.

# Créer un nouveau snapshot sur la source
hdfs dfs -createSnapshot /data/projects snap1

# Si votre DistCp supporte la copie par diff de snapshot
hadoop distcp -prbugp -m 25 \
 -diff snap0 snap1 \
 hdfs://src-nn:8020/data/projects \
 hdfs://dst-nn:8020/data/projects

# Si le diff de snapshot n'est pas disponible, utiliser update+delete
hadoop distcp -prbugp -m 25 -update -delete \
 hdfs://src-nn:8020/data/projects \
 hdfs://dst-nn:8020/data/projects 

- Vérification et basculement :

- Exécuter des checksums chemin par chemin ou des comptages d'enregistrements là où c'est faisable.

- Orienter les clients vers le nouveau cluster (core-site.xml fs.defaultFS, configs des services).

- Maintenir la source en lecture seule pendant une période de repli définie.

## Vérification et diagnostics

 Vous avez besoin de signaux clairs que la mise à niveau ou la migration est correcte et saine. Utilisez ces contrôles avant de finaliser.

### Santé du cluster et stockage

# Vivacité des DataNodes
hdfs dfsadmin -report | egrep "Live datanodes|Dead datanodes|Under replicated blocks"

# Santé du système de fichiers (résumé)
hdfs fsck / -blocks -locations -racks | tail -n 20

# État NameNode (HA)
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2 
 Résultats attendus (exemples construits) :

- Live datanodes égal au nombre d'hôtes attendu ; Dead datanodes à 0.

- Blocs sous‑repliqués à 0 ou en diminution constante vers 0.

- Rôles Actif/Standby correctement assignés ; pas de basculements automatiques répétés.

### Progression de la mise à niveau progressive

hdfs dfsadmin -rollingUpgrade query 
 Attendu : retourne l'état préparé pendant la mise à niveau ; après finalize, signale qu'aucune mise à niveau progressive n'est en cours.

### Intégrité des métadonnées

# Confirmer l'existence des snapshots
hdfs lsSnapshottableDir

# Valider les zones de chiffrement (si utilisées)
hdfs crypto -listZones 

### Vérification DistCp

 # Vérifier ponctuellement les répertoires critiques (tailles et comptages)
hdfs dfs -du -s -h hdfs://src-nn:8020/data/projects/teamA
hdfs dfs -du -s -h hdfs://dst-nn:8020/data/projects/teamA

# Optionnel : échantillonnage de checksum au niveau fichier
for f in $(hdfs dfs -ls -R hdfs://src-nn:8020/data/projects/teamA | awk '{print $8}' | head -100); do
 hdfs dfs -checksum "$f\);
 hdfs dfs -checksum "hdfs://dst-nn:8020${f#hdfs://src-nn:8020}\" ;
done 

### Tests de fumée client

- Spark : lire 10 fichiers représentatifs et compter les lignes ; écrire un petit Parquet et vérifier la relecture.

- NiFi : faire passer un flow file unique via un chemin sandbox et confirmer les permissions.

- Connecteurs Kafka : produire un petit lot vers le sink HDFS et vérifier l'apparition du fichier avec la réplication attendue.

### Journaux et métriques

- Journaux NameNode et DataNode : surveiller les entrées FATAL/ERROR au démarrage et pendant les rapports de blocs.

- Métriques : temps de file d'attente RPC, pauses GC, latences de queue du journal d'edits, taux de sous‑réplication, utilisation heap NN.

## Modes de défaillance et récupération

 Anticipez et planifiez ces situations. Dans la mesure du possible, détectez‑les tôt et continuez en avant en toute sécurité ; sinon, effectuez un retour arrière propre.

### Problèmes courants

- NameNode ne démarre pas après la mise à niveau

- Symptôme : arrêt au démarrage avec erreurs de version de layout mismatch.

- Correctif : s'assurer que les versions correspondent sur tous les NameNodes et JournalNodes. Si mise à niveau hors ligne, restaurer anciens binaires et répertoires name, puis retenter avec les bonnes versions.

- DataNodes bloqués en mise à niveau ou se ré‑enregistrant en boucle

- Symptôme : DataNodes signalent un mismatch version/namespace ID.

- Correctif : vérifier la cohérence du clusterID dans /dfs/dn/current/VERSION ; ne pas supprimer les données DataNode sauf si vous envisagez un reformat complet. Redémarrer avec binaires correspondants.

- Blocs sous‑repliqués après redémarrage des DataNodes

- Symptôme : pic de sous‑réplication qui ne se résorbe pas.

- Correctif : laisser le temps à la réplication de se stabiliser. Si persistant, vérifier partitions réseau ou pannes disque ; utiliser le balancer si déséquilibre.

- Échecs Kerberos

- Symptôme : GSSException ou erreurs de ticket expiré.

- Correctif : rafraîchir keytabs et valider les noms de principaux. Exécuter klist -k sur les services et tests kinit -kt . S'assurer que le décalage d'horloge < 5 minutes.

- DistCp bloque ou échoue

- Symptôme : mappers en attente, débit de transfert proche de zéro.

- Correctif : réduire -m parallélisme, augmenter plafonds -bandwidth , ou segmenter les répertoires. Vérifier la limitation réseau et les temps de file d'attente RPC NameNode.

### Stratégies de retour arrière

- Mise à niveau progressive : si non finalisée, redémarrer NameNodes et DataNodes avec anciens binaires. Le point de contrôle préparé permet un downgrade automatique. Vérifier avec hdfs dfsadmin -rollingUpgrade query avant d'entreprendre le retour.

- Mise à niveau par redémarrage (hors ligne) : arrêter HDFS, restaurer binaires/configs précédents, et restaurer fsimage/edits depuis la sauvegarde si les métadonnées ont été modifiées et ne démarrent pas proprement.

- Migration : réorienter les clients vers le cluster source. Si la cible a reçu des écritures, réconcilier avec un DistCp inverse ou traiter la cible comme jetable et relancer la copie de base plus tard.

### Contrôles de récupération après retour arrière

- hdfs dfsadmin -report affiche les Live datanodes attendus et 0 Dead.

- hdfs fsck / ne montre aucun bloc manquant.

- Tests de fumée applicatifs réussissent (lectures et écritures).

### Quand avancer vs revenir en arrière

- Avancer si le cluster est sain et que seuls des erreurs transitoires de réplication ou de cache client apparaissent.

- Revenir en arrière si le NameNode ne démarre pas proprement, les métadonnées sont incohérentes, ou les applications critiques ne peuvent pas lire les données existantes.

## Liste de contrôle des opérations

Utilisez‑la pour les mises à niveau et les migrations. Adaptez à votre environnement.

- Planifier et inventorier

- Enregistrer versions actuelles/cibles et topologie.

- Identifier services dépendants et plan de communication.

- Définir un périmètre pilote avec résultats mesurables.

- Préparer

- Sauvegarder fsimage et edits ; archiver répertoires name.

- Créer snapshots sur répertoires critiques.

- Valider Kerberos et TLS ; rafraîchir keytabs si nécessaire.

- Mettre au repos ou vider les gros writers (Spark, NiFi, sinks Kafka).

- Exécuter (choisir une voie)

- Mise à niveau progressive : préparer, mettre à niveau Standby, basculer, mettre à niveau ancien Actif, rouler DataNodes, interroger la progression.

- Mise à niveau par redémarrage : arrêter services dans l'ordre, mettre à niveau binaires/configs, démarrer dans l'ordre.

- Migration : DistCp de base, synchronisation incrémentale, basculement.

- Vérifier

- hdfs dfsadmin -report et hdfs fsck / montrent un état sain.

- Rôles HA corrects ; basculement manuel fonctionne.

- Tailles de répertoires DistCp correspondent ; checksums ponctuels passent.

- Tests de fumée clients réussissent de bout en bout.

- Finaliser

- Pour progressive : finaliser la mise à niveau seulement après tous les contrôles OK.

- Pour redémarrage : marquer le changement terminé, conserver sauvegardes pour une période définie.

- Pour migration : basculer les clients, mettre la source en lecture seule pour fenêtre de repli.

- Post‑opérations

- Réactiver planifications snapshots et jobs de compactage.

- Clôturer le changement avec métriques : temps de récupération, compteurs de sous‑réplication, taux d'erreurs clients.

- Mettre à jour les runbooks avec les leçons apprises.

## Exemples pratiques et extraits

Ci‑dessous, des extraits concis, prêts à copier et adapter.

### Vérifier HA et basculement

hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
hdfs haadmin -failover nn1 nn2
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2 
 Attendu : les rôles s'échangent une fois sans erreurs ; les clients continuent sans échecs significatifs.

### Équilibrer le cluster après redémarrages DataNode

# Lancer le balancer avec seuil modéré (exemple construit 10%)
hdfs balancer -threshold 10 
 Laisser tourner jusqu'à stabilisation des déplacements ; surveiller E/S réseau et disque.

### Mettre à jour configs clients pour basculement

<!-- Dans core-site.xml -->
<property>
 <name>fs.defaultFS</name>
 <value>hdfs://dst-nn:8020</value>
</property> 
 Distribuer la mise à jour de config et redémarrer les services clients.

## Conclusion

Mettre à niveau ou migrer HDFS en toute sécurité repose sur la préparation, l'exécution gardée et des résultats visibles. Commencez par un petit pilote mesurable, puis appliquez le même schéma à l'échelle du cluster : inventorier, sauvegarder, snapshots, exécuter avec un plan réversible, vérifier avec des contrôles explicites, et seulement alors finaliser. Que vous choisissiez une mise à niveau progressive sur place, un court redémarrage hors ligne, ou une migration complète avec DistCp, les exemples et listes de contrôle ici vous donnent un chemin répétable avec des options de récupération claires.

Vos prochaines étapes :

- Remplir votre inventaire d'environnement et choisir un répertoire pilote étroit.

- Mettre en place dès aujourd'hui les sauvegardes de métadonnées et les snapshots.

- Faire un essai à sec des commandes de vérification dans une zone non critique.

- Planifier une fenêtre pilote et répéter les étapes de retour arrière avant de toucher à la production.