Comment déployer Hadoop ?
Hadoop propose trois modes de déploiement adaptés à différents contextes : développement, test ou production. Choisir le bon mode est la première étape avant tout travail avec l'écosystème Big Data.
Mode Local
Standalone1 seule machine, 1 seul processus JVM, pas de HDFS réel. Idéal pour le développement et le débogage rapide.
Voir les détailsMode Pseudo-Distribué
Pseudo-Distributed1 seule machine, plusieurs processus JVM simulant un vrai cluster. Idéal pour apprendre et tester.
Voir les détailsMode Totalement Distribué
Fully DistributedPlusieurs machines physiques ou VMs. Mode de production réel avec tolérance aux pannes et scalabilité.
Voir les détailsTableau comparatif des modes
| Caractéristique | Local | Pseudo-distribué | Totalement distribué |
|---|---|---|---|
| Nombre de machines | 1 | 1 | 3 à N |
| Processus JVM | 1 seul | Plusieurs | Plusieurs / machine |
| HDFS réel | Non (FS local) | Oui (1 nœud) | Oui (N nœuds) |
| YARN actif | |||
| Réplication des blocs | — | ×1 (forcé) | ×3 par défaut |
| Tolérance aux pannes | |||
| Vitesse de démarrage | Instantané | ~30s | Minutes |
| Cas d'usage | Débogage, dev unitaire | Apprentissage, tests | Production réelle |
| Difficulté de mise en place | Facile | Moyen | Avancé |
Mode Local (Standalone)
Description
Le mode local est la configuration par défaut de Hadoop. Tous les processus Hadoop s'exécutent dans un unique processus JVM sur la machine locale. Il n'y a pas de démon HDFS, pas de YARN : Hadoop utilise simplement le système de fichiers local (Linux FS).
Ce mode est principalement utilisé pour le développement et le débogage de jobs MapReduce, car il est trivial à configurer et offre un accès direct aux outils de debug Java.
Architecture
┌─────────────────────────────────────────────┐ │ Machine locale (1 JVM) │ │ │ │ ┌────────────────────────────────────┐ │ │ │ JobRunner (MapReduce Local) │ │ │ │ ┌──────────┐ ┌──────────────┐ │ │ │ │ │ Mapper │→ │ Reducer │ │ │ │ │ └──────────┘ └──────────────┘ │ │ │ └────────────────────────────────────┘ │ │ ↑ Lit / Écrit │ │ ┌─────────────────────┐ │ │ │ Système de fichiers│ /home/user/input │ │ │ LOCAL (Linux FS) │ /home/user/output │ │ └─────────────────────┘ │ └─────────────────────────────────────────────┘
Configuration minimale
<!-- core-site.xml : configuration VIDE = Mode Local -->
<configuration>
<!-- Aucune propriété nécessaire pour le mode local -->
<!-- fs.defaultFS = "file:///" par défaut -->
</configuration>
<!-- mapred-site.xml -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>local</value> <!-- "local" = pas de YARN -->
</property>
</configuration>
# Aucun démarrage de démons requis !
# Préparer les données en local
mkdir -p ~/input && echo "hello world hadoop" > ~/input/test.txt
# Lancer le WordCount (lit et écrit sur FS local)
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \
wordcount ~/input ~/output
# Voir le résultat
cat ~/output/part-r-00000
# hello 1
# hadoop 1
# world 1
Avantages
- Démarrage instantané
- Zéro configuration
- Debug Java facile (breakpoints)
- Fonctionne sans réseau
Limites
- Pas de HDFS réel
- Pas de distribution
- Pas de tolérance aux pannes
- Monoprocesseur
Idéal pour
Développeurs Java qui veulent tester leur logique Map/Reduce sans infrastructure. Parfait avec un IDE (IntelliJ, Eclipse) en breakpoint.
Mode Pseudo-Distribué
Description
En mode pseudo-distribué, Hadoop s'exécute toujours sur une seule machine, mais chaque démon Hadoop tourne dans son propre processus JVM séparé : NameNode, DataNode, ResourceManager, NodeManager, Secondary NameNode. C'est comme un vrai cluster, mais en miniature sur une seule machine.
HDFS est réel et fonctionnel, mais le facteur de réplication est fixé à 1 (une seule copie, pas de réplication) puisqu'il n'y a qu'un seul DataNode.
Architecture
┌──────────────────────────────────────────────────────────────┐ │ Machine unique (multiples JVMs) │ │ │ │ ┌─────────────────┐ ┌───────────────────────────────┐ │ │ │ JVM NameNode │◄──►│ JVM Secondary NameNode │ │ │ │ Port: 9870 │ │ (checkpoint des métadonnées) │ │ │ └────────┬────────┘ └───────────────────────────────┘ │ │ │ métadonnées │ │ ┌────────▼────────┐ ┌───────────────────────────────┐ │ │ │ JVM DataNode │ │ JVM ResourceManager │ │ │ │ Port: 9864 │ │ Port: 8088 │ │ │ │ (blocs HDFS) │ └───────────────────────────────┘ │ │ └─────────────────┘ ┌───────────────────────────────┐ │ │ │ JVM NodeManager │ │ │ │ (exécute les containers YARN) │ │ │ └───────────────────────────────┘ │ │ │ │ HDFS local : /hadoop/dfs/name/ et /hadoop/dfs/data/ │ └──────────────────────────────────────────────────────────────┘
Configuration
<!-- core-site.xml -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
<!-- hdfs-site.xml -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value> <!-- 1 seul DataNode -->
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///hadoop/dfs/data</value>
</property>
</configuration>
# 1. Formater le NameNode (UNE SEULE FOIS !)
hdfs namenode -format
# 2. Démarrer HDFS (NameNode + DataNode)
$HADOOP_HOME/sbin/start-dfs.sh
# 3. Démarrer YARN (ResourceManager + NodeManager)
$HADOOP_HOME/sbin/start-yarn.sh
# 4. Vérifier que tous les démons sont actifs
jps
# Devrait afficher :
# 12345 NameNode
# 12678 DataNode
# 12890 SecondaryNameNode
# 13001 ResourceManager
# 13150 NodeManager
# 5. Vérifier via les UI Web :
# HDFS : http://localhost:9870
# YARN : http://localhost:8088
# 6. Créer les répertoires HDFS utilisateur
hdfs dfs -mkdir -p /user/$USER
# 7. Lancer le WordCount sur HDFS
hdfs dfs -put ~/input /user/$USER/
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \
wordcount /user/$USER/input /user/$USER/output
# 8. Arrêter proprement
$HADOOP_HOME/sbin/stop-yarn.sh
$HADOOP_HOME/sbin/stop-dfs.sh
Avantages
- HDFS et YARN réels
- Simule un vrai cluster
- Accès aux UI Web Hadoop
- 1 seule machine suffit
- Idéal pour apprendre
Limites
- Pas de réplication (×1)
- Pas de tolérance aux pannes
- Performances limitées
- Pas scalable
Ports par défaut
| NameNode UI | :9870 |
| NameNode RPC | :9000 |
| DataNode | :9864 |
| YARN RM UI | :8088 |
| MapReduce HS | :19888 |
Mode Totalement Distribué (Production)
Description
Le mode totalement distribué est le mode de production réel. Hadoop est déployé sur un cluster de plusieurs machines physiques ou virtuelles. Chaque machine joue un ou plusieurs rôles : NameNode master, DataNodes workers, etc.
Architecture type : 5 nœuds
┌──────────────────────────────────────────────────────────────┐ │ NŒUDS MAÎTRES (Masters) │ │ ┌────────────────────────┐ ┌────────────────────────────┐ │ │ │ master1 │ │ master2 (HA Standby) │ │ │ │ ✦ NameNode (Actif) │ │ ✦ NameNode (Standby) │ │ │ │ ✦ ResourceManager │ │ ✦ ResourceManager (S/B) │ │ │ └────────────────────────┘ └────────────────────────────┘ │ │ ↕ ZooKeeper │ └──────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────┐ │ NŒUDS WORKERS (DataNodes) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ │ worker1 │ │ worker2 │ │ worker3 │ │ │ │ ✦ DataNode │ │ ✦ DataNode │ │ ✦ DataNode │ │ │ │ ✦ NodeMgr │ │ ✦ NodeMgr │ │ ✦ NodeMgr │ │ │ │ 24 CPU cores│ │ 24 CPU cores│ │ 24 CPU cores │ │ │ │ 128 GB RAM │ │ 128 GB RAM │ │ 128 GB RAM │ │ │ │ 10 TB disque│ │ 10 TB disque│ │ 10 TB disque │ │ │ └──────────────┘ └──────────────┘ └──────────────────┘ │ │ Réseau 10 GbE interconnectant tous les nœuds │ └──────────────────────────────────────────────────────────────┘
Configuration production
<!-- core-site.xml -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster-nameservice</value> <!-- HA avec namespace -->
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>zoo1:2181,zoo2:2181,zoo3:2181</value>
</property>
</configuration>
<!-- hdfs-site.xml -->
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value> <!-- Réplication ×3 = tolérance aux pannes -->
</property>
<property>
<name>dfs.blocksize</name>
<value>134217728</value> <!-- 128 MB par bloc -->
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/namenode,/backup/namenode</value> <!-- 2 disques -->
</property>
</configuration>
<!-- workers (liste des DataNodes) -->
worker1.cluster.local
worker2.cluster.local
worker3.cluster.local
worker4.cluster.local
worker5.cluster.local
# Depuis le nœud master, SSH passwordless configuré sur tous les workers
# 1. Formater le NameNode (PREMIÈRE FOIS SEULEMENT)
hdfs namenode -format -clusterId prod-cluster-1
# 2. Démarrer HDFS sur TOUS les nœuds (via SSH automatique)
$HADOOP_HOME/sbin/start-dfs.sh
# → Démarre NameNode sur master1
# → Démarre SecondaryNameNode (ou Standby NN en HA) sur master2
# → Démarre DataNode sur worker1, worker2, worker3...
# 3. Démarrer YARN
$HADOOP_HOME/sbin/start-yarn.sh
# 4. Vérifier l'état du cluster
hdfs dfsadmin -report
# Live datanodes (5): worker1, worker2, worker3, worker4, worker5
# Total capacity: 50 TB
# DFS Used: 12 TB (24%)
yarn node -list
# Total Nodes: 5
# 5. Vérifier la réplication des blocs
hdfs fsck / -files -blocks -locations | head -50
Avantages Production
- Vraie tolérance aux pannes
- Réplication ×3 réelle
- Scalabilité horizontale
- Haute disponibilité (HA)
- Performances maximales
Prérequis
- Min. 3 machines (recommandé 5+)
- SSH passwordless entre nœuds
- Même version Java
- DNS ou /etc/hosts configuré
- NTP synchronisé
- Firewall ouvert (ports Hadoop)
Alternatives cloud
Pour éviter la complexité de la gestion manuelle :
- AWS EMR — Hadoop/Spark managé
- GCP Dataproc — Cluster en ~90s
- Azure HDInsight
- Cloudera CDP
- Databricks (Spark-first)
Quiz — Modes de déploiement Hadoop
Testez vos connaissances sur les modes de déploiement.