Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

🐘 Apache Hadoop – HDFS, YARN & MapReduce

Guide complet IDEO-Lab sur l'écosystÚme de stockage et de calcul distribué (Big Data).

1.1

Concept : Écosystùme Big Data

Framework Open Source (Apache). HDFS (Stockage) + YARN (Compute).

Hadoop Big Data Écosystùme
1.2

vs. RDBMS (SQL)

OLAP (Hadoop) vs OLTP (SQL). SchĂ©ma (Lecture vs Écriture).

OLAP OLTP Comparatif
1.3

vs. Spark

Batch/Disque (MapReduce) vs In-Memory (Spark).

Spark MapReduce In-Memory
2.1

HDFS : Concept (Stockage)

Hadoop Distributed File System. Stockage (distribué, blocs).

HDFS Stockage
2.2

HDFS : Architecture (MaĂźtre/Esclave)

NameNode (MaĂźtre) vs DataNodes (Esclaves).

NameNode DataNode
2.3

HDFS : Blocs & Réplication

Fichiers (Blocs 128MB), Facteur de Réplication (3x).

Blocs Réplication
3.1

HDFS : NameNode (Détails)

Le "Cerveau" (Métadonnées). fsimage + EditLog.

NameNode fsimage EditLog
3.2

HDFS : Secondary NameNode

"Checkpointing". (Fusionne fsimage + EditLog).

Secondary NameNode Checkpoint
3.3

HDFS : Haute Disponibilité (HA)

Active/Standby NN, ZooKeeper (ZKFC), QJM.

HDFS HA ZooKeeper
4.1

YARN : Concept (Compute)

Yet Another Resource Negotiator. (Séparation HDFS/MapReduce).

YARN Compute
4.2

YARN : Architecture (MaĂźtre/Esclave)

ResourceManager (MaĂźtre) vs NodeManagers (Esclaves).

ResourceManager NodeManager
4.3

YARN : Application (AM/Container)

ApplicationMaster (AM) & Container (CPU/RAM).

ApplicationMaster Container
5.1

MapReduce : Concept (ModĂšle)

Map() (Filtre/Transforme) -> Reduce() (AgrĂšge).

MapReduce Map Reduce
5.2

MapReduce : Shuffle & Sort

Le "Shuffle" (Mélange) : Goulot d'étranglement (I/O Disque).

Shuffle Sort
5.3

MapReduce : "Word Count"

L'exemple "Hello World" du Big Data.

Word Count Exemple
6.1

Écosystùme : Hive (SQL)

SQL-on-Hadoop. (Traduit SQL -> MapReduce/Spark).

Hive SQL HiveQL
6.2

Écosystùme : Pig (Script)

Langage Dataflow (Pig Latin). (Alternative Ă  MapReduce/Java).

Pig Pig Latin
6.3

Écosystùme : HBase (NoSQL)

Base NoSQL (Colonnaire) sur HDFS. (Temps réel, CP).

HBase NoSQL
7.1

Ingestion : Sqoop

(SQL-to-Hadoop). Import/Export (Bases SQL <-> HDFS).

Sqoop Ingestion
7.2

Ingestion : Flume

Ingestion (Streaming) de logs (Source, Channel, Sink).

Flume Logs
7.3

Workflow : Oozie

Orchestrateur (Scheduler) de jobs Hadoop (DAGs).

Oozie Workflow
1.1 Concept : Écosystùme Big Data
Qu'est-ce qu'Apache Hadoop ?

Apache Hadoop n'est pas un seul produit, c'est un framework (cadre) open-source (Java) pour le stockage et le traitement (Calcul) de trÚs grands ensembles de données (Big Data) de maniÚre distribuée sur des clusters de matériel "banal" (commodity hardware).

Il est basé sur les papiers de recherche de Google (GFS et MapReduce) de 2003-2004.

Les 3 Piliers (Hadoop 2.0+)

L'écosystÚme Hadoop "moderne" (Hadoop 2.0+) repose sur 3 composants clés :

  1. HDFS (Stockage) : (Voir 2.1) Hadoop Distributed File System. Le systÚme de fichiers (Data Plane) qui stocke les données (fichiers) de maniÚre distribuée et répliquée.
  2. YARN (Gestion des Ressources) : (Voir 4.1) Yet Another Resource Negotiator. Le "cerveau" (Control Plane) qui gĂšre les ressources (CPU, RAM) du cluster.
  3. MapReduce (ModÚle de Calcul) : (Voir 5.1) Le "moteur" de calcul (Compute) (legacy) qui traite les données (basé sur disque).
1.2 Comparaison : Hadoop (OLAP) vs. RDBMS (OLTP)

Hadoop (Big Data) a été conçu pour résoudre les problÚmes que les bases de données relationnelles (SQL) ne pouvaient pas gérer.

CritĂšreRDBMS (ex: MySQL, Postgres)Hadoop (HDFS/MapReduce)
Usage PrincipalOLTP (Transactionnel). (INSERT, UPDATE, DELETE).OLAP (Analytique). (SELECT, GROUP BY massifs).
DonnéesStructurées (Tables, Colonnes).Structurées, Semi-Structurées (JSON), Non-Structurées (Logs, Images).
SchĂ©maSchema-on-Write (Rigide). (Le schĂ©ma DOIT ĂȘtre dĂ©fini avant l'Ă©criture).Schema-on-Read (Flexible). (Stocke le fichier brut ; le "schĂ©ma" est appliquĂ© Ă  la lecture).
Vitesse (Latence)Faible Latence (millisecondes). (SELECT * WHERE id=1).Haute Latence (minutes/heures). (Optimisé pour le débit (Throughput), pas la latence).
ScalabilitéVerticale (Scale-Up). (Acheter un plus gros serveur).Horizontale (Scale-Out). (Ajouter 1000 serveurs banals).
AccùsLecture/Écriture (R/W) (Ex: Site Web).Écriture 1 fois, Lecture N fois (WORM).
1.3 Comparaison : Hadoop (MapReduce) vs. Apache Spark

Apache Spark (voir guide Spark) a été conçu pour remplacer le composant MapReduce (Compute) de Hadoop.

Hadoop n'est pas mort : Spark (Compute) s'exécute (trÚs souvent) sur YARN (Resource Manager) et lit/écrit sur HDFS (Storage).

CritĂšreHadoop MapReduce (Legacy)Apache Spark (Moderne)
ModÚle (Traitement)Basé sur Disque (Disk-based).Basé sur Mémoire (In-Memory).
PerformanceLent (I/O Disque HDFS à chaque étape).TrÚs Rapide (10x-100x). (Garde les données en RAM (RDD/DF)).
LatenceHaute (Batch pur).Faible (Micro-batch, Streaming, SQL interactif).
APIComplexe (Java Map/Reduce).Simple (RDD, DataFrames, Spark SQL).
UsageBatch ETL (Legacy).Batch, ETL, Streaming, SQL, ML (Tout-en-un).
2.1 HDFS : Concept (Stockage)

Le HDFS (Hadoop Distributed File System) est la couche Stockage de Hadoop. C'est un systÚme de fichiers (comme NTFS ou EXT4) mais distribué (sur des milliers de serveurs).

Philosophie (WORM & Big)

HDFS est conçu (optimisé) pour :

  • Fichiers TrĂšs volumineux : (Giga-octets Ă  PĂ©ta-octets).
  • WORM (Write-Once, Read-Many) : On Ă©crit le fichier 1 fois (en entier), et on le lit N fois. (Les fichiers HDFS ne sont (gĂ©nĂ©ralement) pas modifiables (append-only)).
  • Streaming (Lecture SĂ©quentielle) : OptimisĂ© pour des scans (SELECT *) massifs, pas pour des accĂšs alĂ©atoires (WHERE id=1).
  • MatĂ©riel Banal (Commodity Hardware) : Il est conçu pour tolĂ©rer les pannes (disques, serveurs) (via la rĂ©plication).
2.2 HDFS : Architecture (MaĂźtre/Esclave)

HDFS utilise une architecture MaĂźtre/Esclave (Leader/Follower).

(Client : "Lire /data/file.txt")
       │
       │ 1. (Demande MĂ©tadonnĂ©es)
       ▌
[ NAMENODE (MaĂźtre) ]
 (Le "Cerveau")
 (Stocke Métadonnées : Arborescence,
  Permissions, Blocs...)
       │
       │ 2. (RĂ©ponse : "Le Fichier est sur
       │     DN1 (Bloc A) et DN3 (Bloc B)")
       ▌
(Client) ◄── 3. (Lit Bloc A) ── [ DATANODE 1 (Esclave) ] (Stocke Blocs)
   │
   └─────── 4. (Lit Bloc B) ──â–ș [ DATANODE 3 (Esclave) ] (Stocke Blocs)

   [ DATANODE 2 (Esclave) ] (Stocke Blocs)
  • NameNode (MaĂźtre) : (1 seul, ou 2 en HA). Le "cerveau". Ne stocke aucune donnĂ©e. Il stocke uniquement les MĂ©tadonnĂ©es (l'arborescence /, les permissions chmod, et la "carte" (quels blocs composent un fichier, et oĂč sont ces blocs)). C'est le SPOF (Single Point of Failure) (voir 3.3).
  • DataNode (Esclave) : (N nƓuds) Les "muscles". Ils ne font que stocker les Blocs (128MB) (les "vrai" donnĂ©es) sur leurs disques locaux. Ils envoient des "Heartbeats" (signaux de vie) et des "Block Reports" (liste de leurs blocs) au NameNode.
2.3 HDFS : Blocs & Réplication
Gros Blocs (128 Mo)

HDFS (comme ext4) divise les fichiers en Blocs. Mais les blocs HDFS sont énormes (par défaut 128 Mo ou 256 Mo).

Exemple (Fichier de 300 Mo) :

  • Bloc A : 128 Mo
  • Bloc B : 128 Mo
  • Bloc C : 44 Mo
Réplication (Tolérance aux Pannes)

C'est la clé de la fiabilité d'HDFS (conçu pour du matériel "banal" qui tombe en panne).

Par défaut, le Facteur de Réplication est 3. HDFS copie chaque bloc 3 fois, sur 3 DataNodes différents (idéalement sur 3 Racks différents, voir Rack Awareness).

(Fichier 300MB -> Blocs A, B, C)

[ DataNode 1 ] -> (Bloc A), (Bloc C)
[ DataNode 2 ] -> (Bloc B)
[ DataNode 3 ] -> (Bloc A), (Bloc B)
[ DataNode 4 ] -> (Bloc C), (Bloc A)
[ DataNode 5 ] -> (Bloc B), (Bloc C)

Panne : Le DataNode 2 (panne disque) meurt. Le NameNode le détecte (pas de Heartbeat).

Auto-Réparation : Le NameNode voit que le Bloc B n'est plus répliqué que 2x (sur DN3, DN5). Il ordonne (automatiquement) à DN4 de copier le Bloc B depuis DN3. La réplication (3x) est restaurée.

3.1 HDFS : NameNode (Détails)

Le NameNode (Maßtre) est le SPOF (Point de Défaillance Unique). Il stocke toutes ses métadonnées (l'arborescence) en RAM (pour la vitesse).

Si la RAM du NameNode est pleine, le cluster est plein (mĂȘme s'il reste de l'espace sur les DataNodes).

Persistance (fsimage & EditLog)

Pour persister (sur disque) les métadonnées (qui sont en RAM), le NameNode utilise deux fichiers :

FichierDescriptionFormat
fsimage(Snapshot) Un "dump" (instantané) complet de l'état du systÚme de fichiers (l'arborescence) à un instant T (ex: au démarrage).Binaire (Optimisé)
EditLog(Journal) Un "journal de transactions" (append-only) qui logge chaque changement (mkdir, create, rm) depuis le dernier fsimage.Texte/Binaire

État Actuel (RAM) = fsimage (lu au boot) + EditLog (rejouĂ© au boot).

3.2 HDFS : Secondary NameNode (Le "Checkpoint")

PiĂšge : Le Secondary NameNode (SNN) n'est PAS un "Backup" (Hot-Standby) du NameNode. Il ne prend pas le relais si le NameNode (NN) crash.

RĂŽle : Le "Checkpointing" (Fusion)

ProblÚme : Si le cluster tourne 1 an, le fsimage (Snapshot) a 1 an, et le EditLog (Journal) pÚse 50 Go. Si le NameNode redémarre, il doit "rejouer" 50 Go d'opérations (peut prendre 1 heure).

Solution (SNN) : Le SNN (qui tourne sur une autre machine) effectue le "checkpointing" (la fusion) :

  1. (Toutes les heures) SNN contacte NN : "Crée un nouveau EditLog.new".
  2. SNN télécharge l'ancien fsimage et l'ancien EditLog (plein).
  3. SNN (localement) fusionne (applique) fsimage + EditLog pour créer un nouveau fsimage.ckpt.
  4. SNN "upload" (envoie) le nouveau fsimage.ckpt au NameNode.
  5. (Au prochain boot, le NN utilise ce fsimage récent et le petit EditLog.new -> Démarrage rapide).
3.3 HDFS : Haute Disponibilité (HA)

ProblĂšme : Le NameNode (3.1) est un SPOF. Le Secondary NN (3.2) n'est pas un backup (failover).

Solution (Hadoop 2.0+) : NN (Active/Standby)

On exécute deux NameNodes (NN) :

[ NN 1 (ACTIVE) ] <--- (Heartbeat/Lock) ---> [ ZooKeeper ]
       │                                         â–Č
       │ (Écrit 50%)                             │ (Heartbeat/Lock)
       â–Œ                                         │
[ Quorum Journal Manager (QJM) ] (Stockage 'EditLog' partagé)
 (JournalNodes 1, 2, 3)
       â–Č
       │ (Écrit 50%)
       │
[ NN 2 (STANDBY) ]
  • NameNode (Active) : GĂšre le cluster.
  • NameNode (Standby) : "Hot spare". Lit le QJM pour ĂȘtre Ă  jour.
  • QJM (Quorum Journal Manager) : Un stockage (lĂ©ger) partagĂ© (ex: 3 "JournalNodes") oĂč les deux NNs Ă©crivent (et lisent) l'EditLog (le journal). (Requiert (N+1)/2 acquittements).
  • ZooKeeper (ZKFC) : (Le "Lock") Un service de consensus (externe) qui gĂšre le verrou (lock). (Le NN qui "possĂšde" le verrou dans ZK est l'ACTIVE).
Flux de Panne
  1. NN 1 (Active) crash.
  2. Sa session (Heartbeat) avec ZooKeeper expire.
  3. NN 2 (Standby) voit le "lock" ZK se libérer.
  4. NN 2 (Standby) prend le "lock" ZK et passe en ACTIVE. (Failover en ~10-30 sec).
4.1 YARN : Concept (Compute)

YARN (Yet Another Resource Negotiator) (introduit dans Hadoop 2.0) est la couche de gestion de ressources (Compute) de Hadoop.

Le ProblĂšme (Hadoop 1.0)

Dans Hadoop 1.0, le Stockage (HDFS) et le Calcul (MapReduce) étaient couplés dans le "JobTracker" (Maßtre) et le "TaskTracker" (Esclave).

Inconvénient : Le cluster ne pouvait exécuter que du MapReduce. (Pas de Spark, pas de Flink...).

La Solution (Hadoop 2.0 - YARN)

YARN sépare le "Resource Management" (Gestion des Ressources) du "Processing" (Traitement).

[ COUCHE 2 : COMPUTE (Moteurs) ]
  (Ex: MapReduce, Spark, Flink, Tez...)
   │
   │ (Demandent des ressources)
   ▌
[ COUCHE 1 : YARN (Resource Manager) ]
 (GĂšre CPU/RAM du cluster)
   │
   │ (Utilise le stockage)
   ▌
[ COUCHE 0 : HDFS (Stockage) ]

YARN est le "Scheduler" (Planificateur) du cluster. Spark (ou MapReduce) demande Ă  YARN : "J'ai besoin de 50 'Containers' (CPU/RAM) pour ce job". YARN les lui fournit (sur les NodeManagers).

4.2 YARN : Architecture (MaĂźtre/Esclave)

YARN (comme HDFS) utilise une architecture MaĂźtre/Esclave.

(Client : "Lancer App Spark")
       │
       │ 1. (Demande "ApplicationMaster")
       ▌
[ RESOURCEMANAGER (RM) (MaĂźtre) ]
 (Le "Cerveau" YARN)
 (GĂšre *toutes* les ressources (CPU/RAM))
       │
       │ 2. (NĂ©gocie avec un NM pour lancer AM)
       ▌
[ NODEMANAGER (NM) (Esclave) ] (Node 1)
   (Gùre 1 NƓud (VM))
   (Contient des "Containers")
   │
   └─ [ 3. ApplicationMaster (AM) ] (1er Container)
           (Le "Cerveau" du Job)
           │
           │ 4. (Demande 10 Containers au RM)
           ▌
[ RESOURCEMANAGER (RM) ]
           │
           │ 5. (Alloue 10 Containers aux NMs)
           ▌
[ NODEMANAGER (NM) (Esclave) ] (Node 1...N)
   └─ [ 6. Container (Task) ] (Executor Spark)
  • ResourceManager (RM) : (1 MaĂźtre) Le "cerveau" global. Il sait combien de CPU/RAM sont disponibles sur l'ensemble du cluster.
  • NodeManager (NM) : (N Esclaves) Le "muscle" (tourne sur chaque DataNode). Il gĂšre les ressources (CPU/RAM) de sa machine. Il lance/tue les "Containers" (processus) sur ordre du RM.
4.3 YARN : Application (AM & Container)

YARN (contrairement Ă  Hadoop 1.0) introduit le concept d'"ApplicationMaster" (AM).

Container (Conteneur)

Ce n'est pas un "Conteneur Docker". C'est une réservation (slice) de ressources (CPU/RAM) sur un NodeManager. C'est là que le "vrai" code (ex: Tùche Map/Reduce, Executor Spark) s'exécute.

ApplicationMaster (AM)

L'AM est le "cerveau" spécifique à 1 Job (Application). C'est un "Driver" (Spark) ou "JobTracker" (MapReduce) dynamique.

Flux (YARN)
  1. (Client) spark-submit.
  2. (YARN) ResourceManager (RM) reçoit la demande.
  3. RM demande Ă  un NodeManager (NM) de lancer 1 Container pour l'ApplicationMaster (AM).
  4. L'AM (le "cerveau" du Job) démarre.
  5. L'AM négocie (demande) directement avec le RM : "J'ai besoin de 50 Containers (1vCPU/4Go RAM)".
  6. Le RM alloue 50 Containers (sur 10 NMs).
  7. L'AM contacte directement les NMs pour lancer les TĂąches (Tasks) dans ces Containers.

Avantage : Le RM (Maßtre) ne fait que la "gestion" (RH). L'AM (Spécifique au Job) fait la "coordination" (Chef de projet). (Meilleure scalabilité).

5.1 MapReduce : Concept (ModĂšle de Calcul)

MapReduce est le modÚle de programmation (Framework) (legacy) de Hadoop 1.0/2.0 pour le calcul batch distribué (basé sur disque).

Il force le développeur à décomposer tout problÚme en 2 phases (fonctions) : Map et Reduce.

1. Phase Map(Key, Value) (Mapper)

RĂŽle : Filtrer et Transformer (1-to-1 ou 1-to-N).

Le "Mapper" est exécuté (en parallÚle) sur chaque ligne (ou bloc) des données d'entrée (InputSplit).

Input : 1 ligne (ex: "le chat est sur le tapis")

Output : Une liste de (Clé, Valeur) (Key-Value pairs).

("le", 1)
("chat", 1)
("est", 1)
("sur", 1)
("le", 1)
("tapis", 1)
2. Phase Reduce(Key, List[Values]) (Reducer)

RÎle : Agréger (Summarize).

Le "Reducer" est exécuté une fois par Clé unique (aprÚs la phase "Shuffle & Sort" (5.2)).

Input : Une Clé et la Liste de toutes ses valeurs.

(Input pour la clé "le")
("le", [1, 1])

Output : (Résultat final)

("le", 2)
("chat", 1)
("est", 1)
("sur", 1)
("tapis", 1)
5.2 MapReduce : Le "Shuffle & Sort"

Le Shuffle & Sort est l'étape (automatique, magique) qui se produit entre le Map et le Reduce. C'est le goulot d'étranglement (I/O) de MapReduce.

[ MAP 1 ]
("le", 1)
("chat", 1)
   │
   │ (Shuffle : Envoi "le" au Reducer 1)
   │ (Shuffle : Envoi "chat" au Reducer 2)
   ▌
[ MAP 2 ]
("le", 1)
("tapis", 1)
   │
   │ (Shuffle : Envoi "le" au Reducer 1)
   │ (Shuffle : Envoi "tapis" au Reducer 2)
   ▌
---------------- (RÉSEAU / DISQUE) ----------------
   │                                   │
   ▌                                   ▌
[ REDUCER 1 ] (Clé "le")            [ REDUCER 2 ] (Autres clés)
(Reçoit ("le", 1), ("le", 1))       (Reçoit ("chat", 1), ("tapis", 1))
(Tri (Sort) -> ("le", [1, 1]))      (Tri (Sort) -> ...)
   │                                   │
   ▌                                   ▌
("le", 2)                           ("chat", 1), ("tapis", 1)

Le "Shuffle" est le processus (coĂ»teux) oĂč les Mappers Ă©crivent (sur disque local) leurs rĂ©sultats (partitions), et oĂč les Reducers lisent (via rĂ©seau) les donnĂ©es dont ils ont besoin depuis tous les Mappers.

5.3 MapReduce : "Word Count" (Exemple Java)

"Word Count" (Compteur de Mots) est l'exemple "Hello, World!" du Big Data (MapReduce).

// 1. Le Mapper (Java)
public class WordCountMapper
    extends Mapper {
    
    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    // (Appelé 1x par ligne)
    public void map(Object key, Text value, Context context)
        throws IOException, InterruptedException {
        
        StringTokenizer itr = new StringTokenizer(value.toString());
        while (itr.hasMoreTokens()) {
            word.set(itr.nextToken());
            // (Output : ("mot", 1))
            context.write(word, one);
        }
    }
}

// 2. Le Reducer (Java)
public class WordCountReducer
    extends Reducer {
    
    private IntWritable result = new IntWritable();

    // (Appelé 1x par mot unique)
    // (ex: key="le", values=[1, 1])
    public void reduce(Text key, Iterable values, Context context)
        throws IOException, InterruptedException {
        
        int sum = 0;
        for (IntWritable val : values) {
            sum += val.get();
        }
        result.set(sum);
        // (Output : ("le", 2))
        context.write(key, result);
    }
}
6.1 Écosystùme : Hive (SQL-on-Hadoop)

ProblĂšme : Écrire du Java MapReduce (5.3) est trĂšs difficile. Les analystes de donnĂ©es (BI) connaissent le SQL, pas le Java.

Solution : Apache Hive

Hive est un Data Warehouse (DWH) open-source (créé par Facebook) construit sur Hadoop.

Il fournit :

  1. Un Metastore (Catalogue) : Une BDD (ex: MySQL) qui stocke les schémas (CREATE TABLE...) des données.
  2. Un Driver (Moteur) : Un "traducteur" qui convertit le SQL (HiveQL) en Jobs MapReduce (ou Spark/Tez).
Flux (Hive)
1. [Analyste BI]
   │ (Écrit du SQL)
   │ "SELECT COUNT(*) FROM logs WHERE ... GROUP BY ..."
   │
   ▌
2. [Hive Server]
   │ (Parse le SQL (HiveQL))
   │ (Consulte le Metastore)
   │ (GĂ©nĂšre un plan MapReduce/Spark)
   │
   ▌
3. [YARN Cluster]
   │ (ExĂ©cute le Job MapReduce/Spark)
   │ (Lit les donnĂ©es sur HDFS)
   │
   ▌
4. [Analyste BI] (Reçoit le résultat)

Usage : C'est l'ancĂȘtre (et la base) de Spark SQL, Redshift Spectrum, BigQuery, etc.

6.2 Écosystùme : Pig (Script Dataflow)

Apache Pig (créé par Yahoo!) est une alternative à Java MapReduce (comme Hive).

Philosophie : Dataflow Language (Langage de Flux de Données).

Au lieu d'écrire du SQL (Hive) ou du Java (MapReduce), le développeur écrit un script Pig Latin (un langage de "pipeline" procédural).

Exemple (Pig Latin)
-- 1. Charger (Load) les données
logs = LOAD '/data/logs.txt' AS (ligne:chararray);

-- 2. "Tokenize" (Map)
mots = FOREACH logs GENERATE FLATTEN(TOKENIZE(ligne)) AS mot;

-- 3. Grouper (Shuffle/Reduce)
groupes = GROUP mots BY mot;

-- 4. Compter (Reduce)
comptes = FOREACH groupes GENERATE group AS mot, COUNT(mots) AS total;

-- 5. Sauvegarder
STORE comptes INTO '/data/output/wordcount';

Exécution : Le moteur "Pig" traduit ce script (Pig Latin) en un Job MapReduce (ou Spark) et l'exécute sur YARN.

Statut : Largement obsolÚte (remplacé par Spark DataFrames (PySpark)).

6.3 Écosystùme : HBase (NoSQL)

Apache HBase est une base de données NoSQL, distribuée, colonnaire (Wide-Column), construite sur HDFS. (Inspiré de Google Bigtable).

Hadoop (OLAP) vs HBase (OLTP)

ProblÚme : Hadoop/HDFS/MapReduce sont "Batch" (Haute Latence). Ils ne peuvent pas faire : SELECT * FROM users WHERE id=1 (AccÚs Aléatoire Rapide).

Solution (HBase) : HBase est une BDD (non-SQL) qui tourne *sur* HDFS, mais qui fournit un accÚs Temps Réel (Faible Latence) (lecture/écriture) par Clé (RowKey).

ModĂšle (Wide-Column)

Optimisé pour des milliards de lignes et des millions de colonnes (dynamiques).

ThéorÚme CAP

Dans le ThéorÚme CAP (Consistency, Availability, Partition Tolerance), HBase choisit CP (Consistency & Partition Tolerance). (Il utilise ZooKeeper).

7.1 Ingestion : Sqoop (SQL-Hadoop)

Apache Sqoop (SQL-to-Hadoop) est un outil (CLI) conçu pour transférer (ingérer) des données "Bulk" (massives) entre Hadoop (HDFS, Hive) et des bases de données relationnelles (RDBMS) (MySQL, Postgres, Oracle...).

sqoop import (RDBMS -> HDFS)

(Usage n°1) Ingestion (Batch) d'une BDD de production (OLTP) vers le Data Lake (OLAP).

# (Lance un job MapReduce (parallĂšle)
#  pour 'SELECT *' de 'ma_table_sql'
#  et l'écrire en 'Parquet' sur HDFS)
$ sqoop import \
    --connect jdbc:mysql://db.host/database \
    --username user --password pass \
    --table ma_table_sql \
    --target-dir /user/hive/warehouse/ma_table_hdfs \
    --as-parquetfile \
    -m 8  # (8 Mappers (parallĂšle))
sqoop export (HDFS -> RDBMS)

(Usage n°2) Exporter les résultats (ex: un rapport agrégé) de HDFS vers une table SQL.

7.2 Ingestion : Flume (Logs)

Apache Flume est un service (distribué) conçu pour collecter, agréger, et déplacer (ingérer) des volumes massifs de logs (streaming).

Architecture (Agent)

Un "Agent" Flume (installé sur ex: un serveur web) est composé de 3 parties :

  • Source : (L'entrĂ©e) "OĂč Ă©couter ?" (ex: tail un fichier .log, Ă©couter un port Syslog, un topic Kafka).
  • Channel (Canal) : (La "Queue") Le "tampon" (buffer) de rĂ©tention (ex: MemoryChannel (rapide) ou FileChannel (fiable)).
  • Sink (Destination) : (La sortie) "OĂč Ă©crire ?" (ex: HDFS, HBase, Kafka, un autre Agent Flume).
(Ex: Agent 'web_server_logs')
Source (Tail /var/log/nginx/access.log)
   │
   ▌
Channel (Memory)
   │
   ▌
Sink (HDFS) -> (Écrit /logs/nginx/...)
7.3 Workflow : Oozie

Apache Oozie est un ordonnanceur (scheduler) de workflow (flux de travail) natif de l'écosystÚme Hadoop.

C'est l'équivalent (legacy) d'Airflow ou Azure Data Factory (Pipelines).

Usage (Gérer les DAGs)

Hadoop (MapReduce, Pig, Sqoop) est composé de "Jobs" indépendants. Oozie permet de les chaßner (créer un DAG).

Configuration (XML)

Les workflows Oozie sont (notoirement) complexes à écrire (XML).

<workflow-app name="Mon-Workflow-ETL" ...>
    <start to="ingestion_sqoop"/>
    
    <action name="ingestion_sqoop">
        <sqoop> ... (Action Sqoop) ... </sqoop>
        <ok to="transformation_pig"/>
        <error to="kill_job"/>
    </action>
    
    <action name="transformation_pig">
        <pig> ... (Action Pig) ... </pig>
        <ok to="end"/>
        <error to="kill_job"/>
    </action>
    
    <kill name="kill_job">...</kill>
    <end name="end"/>
</workflow-app>

Statut : Largement obsolÚte, remplacé par des orchestrateurs modernes (Airflow, Prefect, Dagster, ou (Databricks) Jobs Workflows).