Modes de Déploiement Hadoop

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

Standalone

1 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étails

Mode Pseudo-Distribué

Pseudo-Distributed

1 seule machine, plusieurs processus JVM simulant un vrai cluster. Idéal pour apprendre et tester.

Voir les détails

Mode Totalement Distribué

Fully Distributed

Plusieurs machines physiques ou VMs. Mode de production réel avec tolérance aux pannes et scalabilité.

Voir les détails
Tableau comparatif des modes
Caractéristique Local Pseudo-distribué Totalement distribué
Nombre de machines113 à N
Processus JVM1 seulPlusieursPlusieurs / 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émarrageInstantané~30sMinutes
Cas d'usageDébogage, dev unitaireApprentissage, testsProduction réelle
Difficulté de mise en placeFacileMoyenAvancé

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 — Mode Local (configuration vide)
<!-- 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>
Terminal — Lancer un job en mode local
# 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
<!-- 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>
Terminal — Démarrage du cluster pseudo-distribué
# 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
Fichiers de configuration — Cluster de 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
Terminal — Démarrage du cluster distribué
# 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.

Q1 En mode local (standalone), quel système de fichiers Hadoop utilise-t-il ?
A HDFS (Hadoop Distributed File System)
B Le système de fichiers Linux local (FS local)
C Amazon S3
D NFS partagé
Q2 Quel est le facteur de réplication des blocs HDFS en mode pseudo-distribué ?
A 3 (par défaut)
B 2
C 1 (forcé car 1 seul DataNode)
D 0 (pas de réplication)
Q3 En mode pseudo-distribué, combien de JVM (processus Java) sont lancées ?
A 1 JVM unique
B 2 JVM (NameNode + DataNode)
C 5 JVM distinctes (NameNode, DataNode, SNN, ResourceManager, NodeManager)
D Autant que de CPUs
Q4 Quelle commande permet de vérifier que tous les démons Hadoop sont bien démarrés ?
A hadoop status
B jps (Java Process Status)
C ps aux | grep hadoop
D hdfs dfsadmin -status
Q5 Dans un cluster de production totalement distribué, quel composant gère la liste des DataNodes disponibles ?
A Le ResourceManager YARN
B Le NameNode HDFS
C ZooKeeper
D Le Secondary NameNode
Q6 Quelle est la taille de bloc HDFS par défaut en production ?
A 64 Mo
B 128 Mo
C 256 Mo
D 512 Mo
Q7 Quelle est la PREMIÈRE commande à exécuter AVANT de démarrer HDFS pour la première fois ?
A start-dfs.sh
B hdfs namenode -format
C hdfs dfs -mkdir /user
D start-all.sh
Continuer : HDFS en détail