Aller au contenu

Dépannage (FAQ)

Page rassemblant les erreurs les plus fréquentes que les étudiants rencontrent. Si ton problème n’y est pas, contacte ton enseignant en décrivant précisément :

  1. La commande que tu as tapée.
  2. Le message d’erreur complet (capture d’écran ou copier-coller).
  3. Ton OS (Mac / Windows / Linux) et la version de Docker Desktop.

🚀 Démarrage du cluster

docker compose: command not found

Tu utilises sans doute une vieille version de Docker. La commande historique est docker-compose (avec un tiret). Mais elle est dépréciée. Mets à jour Docker Desktop (≥ v20.10).

Cannot connect to the Docker daemon

Le démon Docker ne tourne pas. Lance l’application Docker Desktop et attends que la baleine soit verte/grise (pas orange) avant de retenter.

port is already allocated (par exemple sur 9870, 8088…)

Un autre programme occupe déjà ce port sur ta machine. Deux solutions :

  • Identifier et fermer le programme qui l’utilise. Sur Mac/Linux : lsof -i :9870. Sur Windows (PowerShell) : Get-NetTCPConnection -LocalPort 9870.
  • Modifier docker-compose.yml et changer le port côté hôte uniquement (avant les :). Par exemple : "19870:9870" → tu accèderas à http://localhost:19870.
Le docker compose up se termine mais check-cluster.sh montre des
  1. Attends 30-60 secondes : Hadoop met du temps à se stabiliser au premier boot.
  2. Relance check-cluster.sh.
  3. Si toujours en erreur : docker compose logs hadoop-master | tail -50 pour voir ce qui s’est passé au démarrage.
  4. En dernier recours, repars de zéro : docker compose down -v && docker compose up -d.

🧱 HDFS

Cannot create directory ... Name node is in safe mode

Au démarrage, le NameNode passe en mode “safe” le temps de vérifier les blocs. Attends ~30s. Si le problème persiste :

hdfs dfsadmin -safemode leave

hdfs dfs -put échoue avec could only be written to 0 of the 1 minReplication nodes

Les DataNodes ne sont pas joignables par le NameNode. Vérifie avec check-cluster.sh. Souvent dû à un slave qui n’a pas démarré à temps ou qui a planté → docker compose restart hadoop-slave1 hadoop-slave2.

Mes données HDFS ont disparu après docker compose down -v

C’est normal : -v supprime les volumes (donc les données HDFS persistées). Pour conserver les données entre deux sessions, utilise simplement docker compose down (sans -v).


🕸 SSH entre master et slaves

ssh: connect to host hadoop-slave1 port 22: Connection refused

Le service SSH du slave n’est pas (encore) prêt. Attends quelques secondes ou redémarre :

docker compose restart hadoop-slave1

Permission denied (publickey) quand le master tente de se connecter aux slaves

Les clés SSH sont normalement embarquées dans l’image (la même clé sur master et slaves). Si tu as modifié l’image, tu as cassé cette propriété. Repars de l’image officielle : docker compose pull && docker compose up -d.


💻 Ressources de la machine hôte

Mon ordinateur rame, le ventilateur s’emballe

Hadoop + Spark consomment de la RAM et du CPU. Sur Mac/Windows :

  • Docker Desktop → Settings → Resources → Memory : alloue au moins 8 Go (12 Go si possible).
  • Ferme les applications gourmandes (navigateurs avec 50 onglets, IDE, etc.).
  • Le profil mémoire est auto-détecté ; tu peux forcer le mode léger : MEMORY=8GB docker compose up -d.
OutOfMemoryError: Java heap space lors d’un job

Le job demande plus de mémoire que YARN ne peut allouer. Soit :

  • Réduis la taille des données traitées.
  • Force le profil 16GB si ta machine a la RAM (MEMORY=16GB docker compose up -d).
  • Vérifie que tu n’as pas une boucle infinie ou une concaténation explosive dans ton script.

🐧 Spécifique à Windows

Mes scripts .py ou .sh édités sous Windows ne s’exécutent pas dans le conteneur

Problème de fin de ligne (CRLF Windows vs LF Unix). Dans le conteneur :

dos2unix mon_script.py
Astuce : configure VS Code pour sauvegarder en LF par défaut (Settings → Files: Eol → \n).

docker compose up est très lent / les volumes sont lents

Sur Windows, héberge le repo dans WSL2 (filesystem \\wsl$\...) et non dans C:\Users\.... Les performances de bind mount sont 10× meilleures.


🎨 Spark / PySpark

Trop de logs verbeux ? Comment les réduire / réactiver ?

Depuis la version 5 de l’image, la verbosité par défaut est déjà à WARN pour Spark et pour Hadoop (sauf la progression des jobs MapReduce qui reste à INFO pour rester visible). Tu n’as donc rien à faire dans le cas général.

Pour réactiver le mode verbeux (utile pour débugger un script qui plante en silence) :

# Spark
sed -i 's/^rootLogger.level = warn/rootLogger.level = info/' \
    /usr/local/spark/conf/log4j2.properties

# Hadoop
sed -i 's/^hadoop.root.logger=WARN/hadoop.root.logger=INFO/' \
    /usr/local/hadoop/etc/hadoop/log4j.properties
Pour repasser en mode silencieux, fais l’inverse (infowarn, INFOWARN).

spark-submit ... --master yarn reste bloqué

Vérifie que YARN est OK : check-cluster.sh. Le mode --master yarn exige que les NodeManagers répondent.

No module named 'pyspark' dans un script Python

Tu as oublié d’utiliser spark-submit. Lance toujours avec :

spark-submit --deploy-mode client --master local[2] mon_script.py
et pas avec python mon_script.py.


📦 Mise à jour de l’image

Comment récupérer la dernière version de l’image ?

docker compose pull
docker compose up -d
Conserve tes données HDFS. Si tu veux repartir totalement de zéro : docker compose down -v && docker compose pull && docker compose up -d.