HDFS — Exploration Approfondie

Hadoop Distributed File System

Composants · Blocs & Réplication · Simulations interactives · Travaux Pratiques · Quiz

Composants Blocs Simulation TP Quiz

1 Les Composants de HDFS

Architecture HDFS — Vue d'ensemble
 ┌──────────────────────────────────────────────────────────────────────────┐
 │                    CLIENT HDFS (Shell / API Java / Spark)                │
 └────────────────────────────┬─────────────────────────────────────────────┘
                              │ ① Demande métadonnées
                              ▼
 ┌──────────────────────────────────────────────────────────────────────────┐
 │                       NAMENODE  (Maître HDFS)                            │
 │  ┌──────────────┐  ┌───────────────┐  ┌──────────────────────────────┐  │
 │  │   FSImage    │  │   EditLog     │  │    Block Map (en RAM)        │  │
 │  │ Snapshot NS  │  │ Journal ops   │  │  fichier → [blocs → DNs]    │  │
 │  └──────────────┘  └───────────────┘  └──────────────────────────────┘  │
 │  Port RPC: 9000  ·  UI Web: http://localhost:9870                        │
 └──────┬──────────────────────────────┬───────────────────────────────────┘
        │                              │ ② Retourne localisation des blocs
        │ Checkpoint périodique        ▼
 ┌──────▼──────────┐   ┌──────────────────────────────────────────────────┐
 │  SECONDARY      │   │              DATANODES  (Workers)                 │
 │  NAMENODE       │   │  ┌───────────┐   ┌───────────┐   ┌───────────┐  │
 │                 │   │  │ DataNode1 │   │ DataNode2 │   │ DataNode3 │  │
 │  ⚠ N'est PAS   │   │  │  Rack A   │   │  Rack A   │   │  Rack B   │  │
 │  un backup NN ! │   │  │ blkA, blkB│   │ blkA, blkC│   │ blkB, blkC│  │
 │  Rôle : fusionr │   │  └───────────┘   └───────────┘   └───────────┘  │
 │  FSImage+EditLog│   │  ♥ Heartbeat → NameNode  (toutes les 3 secondes) │
 └─────────────────┘   │  ③ Client lit/écrit DIRECTEMENT sur les DataNodes │
                       └──────────────────────────────────────────────────┘
NameNode MAÎTRE

Le cerveau du cluster. Ne stocke jamais de données — uniquement les métadonnées.

FSImage

Snapshot namespace

EditLog

Journal des opérations

Block Map

En RAM
  • Gère l'arborescence de fichiers HDFS
  • Mappe chaque fichier → blocs → DataNodes (en RAM)
  • Surveille les DataNodes (heartbeats toutes les 3 s)
  • Ordonne la re-réplication si un DataNode tombe
200M
fichiers max
<1ms
lookup bloc
9870
port UI Web
SPOF — Point unique de défaillance
Si le NameNode tombe, tout HDFS est inaccessible. Solution : Mode HA avec NameNode Actif + Standby + ZooKeeper.
Secondary NameNode CHECKPOINT
Idée reçue — Il N'est PAS un backup !
Si le NameNode tombe, le Secondary NameNode ne peut pas prendre le relais. Son vrai rôle : fusionner FSImage + EditLog périodiquement pour éviter que l'EditLog ne grossisse indéfiniment.
Processus de checkpoint (toutes les 3600 s)
1 SNN demande au NameNode de basculer sur un nouvel EditLog vide
2 SNN télécharge l'ancien EditLog + FSImage depuis le NameNode
3 SNN fusionne FSImage + EditLog → nouveau FSImage compact
4 SNN renvoie le nouveau FSImage au NameNode
5 NameNode remplace l'ancien FSImage, EditLog est maintenant vide
Mode HA (Hadoop 2.x+)
En Haute Disponibilité, le SNN est remplacé par un Standby NameNode synchronisé en temps réel via les JournalNodes et ZooKeeper.
DataNode WORKER

Les ouvriers du cluster. Stockent physiquement les blocs et les servent directement aux clients.

Heartbeat

Toutes les 3 secondes
"Je suis vivant" + métriques

Block Report

Toutes les 6 heures
Liste complète des blocs
Organisation sur disque
/data/hdfs/datanode/current/
  └── BP-1234-192.168.1.10/
      └── current/
          ├── finalized/
          │   ├── blk_1073741825  ← données
          │   └── blk_1073741825.meta ← CRC
          └── rbw/  ← blocs en cours d'écriture
Après 10 min sans heartbeat, le NameNode déclare le DataNode mort et ordonne la re-réplication automatique de ses blocs.
Client HDFS INTERFACE

Point d'entrée pour toutes les interactions. Le client gère lui-même le découpage et l'assemblage des blocs.

Interfaces disponibles
CLI hdfs dfs
Commandes shell
Java FileSystem
org.apache.hadoop.fs
WebHDFS REST
HTTP/HTTPS
NFS Gateway
Montage réseau
Commandes essentielles
hdfs dfs -ls /user/hadoop/ # Lister
hdfs dfs -put local.csv /hdfs/ # Upload
hdfs dfs -get /hdfs/f.csv . # Download
hdfs dfs -cat /hdfs/f.txt # Afficher
hdfs dfs -mkdir -p /user/hadoop # Créer
hdfs dfs -setrep 5 /hdfs/file # Réplication
hdfs fsck /hdfs/ -files -blocks # Santé
hdfs dfsadmin -report # Rapport cluster

2 Blocs et Stratégie de Réplication

Taille des Blocs HDFS
64 MB
Hadoop 1.x
128 MB
Défaut 2.x/3.x
256+ MB
Gros clusters
Calculateur interactif
Pourquoi 128 MB et pas 4 KB ?
  • Minimise le nombre de requêtes au NameNode
  • Optimise le débit séquentiel (lectures continues)
  • Réduit la mémoire RAM du NameNode
  • Adapté aux workloads batch (pas d'accès aléatoires)
Réplication & Rack Awareness
Placement des répliques pour ×3

R1 Nœud local (même rack que le writer)
R2 Autre nœud du même rack
R3 Nœud d'un rack différent

🏢 Rack A
DN1 ● R1
DN2 ● R2
🏢 Rack B
DN3 ● R3
DN4 —
Si le Rack A entier tombe → R3 (Rack B) survit !
RéplicationPannes toléréesEspace ×Usage
×1Aucune×1Pseudo-distribué
×21 DataNode×2Dev/Test
×32 DataNodes×3Production
×54 DataNodes×5Critique

3 Simulations Interactives

Cliquez "Démarrer" pour animer la lecture d'un fichier HDFS...
0 / 5
Utilisez les boutons pour avancer dans les étapes de lecture HDFS.
Cliquez "Démarrer" pour simuler la panne d'un DataNode et la récupération automatique...
0 / 4
Scénario : Un DataNode tombe en panne. HDFS détecte la défaillance et re-réplique automatiquement pour maintenir le facteur ×3.

4 Travaux Pratiques

TP 1 — Manipulation HDFS CLI
Débutant

Sur un cluster Hadoop pseudo-distribué, réalisez les opérations suivantes :

  1. Créer /user/tp1/input et /user/tp1/output
  2. Créer un fichier villes.txt avec 10 villes (une par ligne)
  3. Uploader dans HDFS et vérifier la présence
  4. Afficher le contenu sans télécharger
  5. Vérifier les blocs avec fsck
  6. Changer la réplication à ×2
TP 2 — Calcul de capacité cluster
Intermédiaire

Cluster : 10 DataNodes × 4 disques × 2 TB. Bloc : 128 MB. Réplication : ×3.

  1. Capacité brute totale ?
  2. Capacité utilisable après réplication ?
  3. Fichier CSV de 750 MB → combien de blocs logiques ?
  4. Combien de blocs physiques sur le cluster ?
  5. 2 DataNodes tombent simultanément : données perdues ?
TP 3 — API Java HDFS
Intermédiaire

Écrivez un programme Java qui : crée un répertoire, écrit un fichier, le lit, liste le répertoire et affiche la localisation des blocs.

  1. Connexion à HDFS (localhost:9000)
  2. Créer /user/java-api/
  3. Écrire un fichier texte directement en HDFS
  4. Lire et afficher son contenu
  5. Afficher les blocs et DataNodes associés
TP 4 — Diagnostic cluster
Avancé

Symptômes : Live datanodes: 7 (was 10) | Under-replicated blocks: 1250 | Missing blocks: 0

  1. Que s'est-il passé ? Pourquoi 0 blocs manquants ?
  2. Que va faire HDFS automatiquement ?
  3. Quelles commandes pour diagnostiquer ?
  4. Comment accélérer la re-réplication ?

5 Quiz — Testez vos connaissances HDFS

Quiz HDFS — 10 questions
Score : 0 / 0
Question 1 / 10