đ Apache Hadoop â HDFS, YARN & MapReduce
Guide complet IDEO-Lab sur l'écosystÚme de stockage et de calcul distribué (Big Data).
Concept : ĂcosystĂšme Big Data
Framework Open Source (Apache). HDFS (Stockage) + YARN (Compute).
Hadoop Big Data ĂcosystĂšmevs. RDBMS (SQL)
OLAP (Hadoop) vs OLTP (SQL). SchĂ©ma (Lecture vs Ăcriture).
OLAP OLTP Comparatifvs. Spark
Batch/Disque (MapReduce) vs In-Memory (Spark).
Spark MapReduce In-MemoryHDFS : Concept (Stockage)
Hadoop Distributed File System. Stockage (distribué, blocs).
HDFS StockageHDFS : Architecture (MaĂźtre/Esclave)
NameNode (MaĂźtre) vs DataNodes (Esclaves).
NameNode DataNodeHDFS : Blocs & Réplication
Fichiers (Blocs 128MB), Facteur de Réplication (3x).
Blocs RéplicationHDFS : NameNode (Détails)
Le "Cerveau" (Métadonnées). fsimage + EditLog.
HDFS : Secondary NameNode
"Checkpointing". (Fusionne fsimage + EditLog).
HDFS : Haute Disponibilité (HA)
Active/Standby NN, ZooKeeper (ZKFC), QJM.
HDFS HA ZooKeeperYARN : Concept (Compute)
Yet Another Resource Negotiator. (Séparation HDFS/MapReduce).
YARN ComputeYARN : Architecture (MaĂźtre/Esclave)
ResourceManager (MaĂźtre) vs NodeManagers (Esclaves).
ResourceManager NodeManagerYARN : Application (AM/Container)
ApplicationMaster (AM) & Container (CPU/RAM).
ApplicationMaster ContainerMapReduce : Concept (ModĂšle)
Map() (Filtre/Transforme) -> Reduce() (AgrĂšge).
MapReduce : Shuffle & Sort
Le "Shuffle" (Mélange) : Goulot d'étranglement (I/O Disque).
Shuffle SortMapReduce : "Word Count"
L'exemple "Hello World" du Big Data.
Word Count ExempleĂcosystĂšme : Hive (SQL)
SQL-on-Hadoop. (Traduit SQL -> MapReduce/Spark).
Hive SQL HiveQLĂcosystĂšme : Pig (Script)
Langage Dataflow (Pig Latin). (Alternative Ă MapReduce/Java).
Pig Pig LatinĂcosystĂšme : HBase (NoSQL)
Base NoSQL (Colonnaire) sur HDFS. (Temps réel, CP).
HBase NoSQLIngestion : Sqoop
(SQL-to-Hadoop). Import/Export (Bases SQL <-> HDFS).
Sqoop IngestionIngestion : Flume
Ingestion (Streaming) de logs (Source, Channel, Sink).
Flume LogsWorkflow : Oozie
Orchestrateur (Scheduler) de jobs Hadoop (DAGs).
Oozie WorkflowQu'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 :
- 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.
- YARN (Gestion des Ressources) : (Voir 4.1) Yet Another Resource Negotiator. Le "cerveau" (Control Plane) qui gĂšre les ressources (CPU, RAM) du cluster.
- MapReduce (ModÚle de Calcul) : (Voir 5.1) Le "moteur" de calcul (Compute) (legacy) qui traite les données (basé sur disque).
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Ăšre | RDBMS (ex: MySQL, Postgres) | Hadoop (HDFS/MapReduce) |
|---|---|---|
| Usage Principal | OLTP (Transactionnel). (INSERT, UPDATE, DELETE). | OLAP (Analytique). (SELECT, GROUP BY massifs). |
| Données | Structurées (Tables, Colonnes). | Structurées, Semi-Structurées (JSON), Non-Structurées (Logs, Images). |
| SchĂ©ma | Schema-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Ăšs | Lecture/Ăcriture (R/W) (Ex: Site Web). | Ăcriture 1 fois, Lecture N fois (WORM). |
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Ăšre | Hadoop MapReduce (Legacy) | Apache Spark (Moderne) |
|---|---|---|
| ModÚle (Traitement) | Basé sur Disque (Disk-based). | Basé sur Mémoire (In-Memory). |
| Performance | Lent (I/O Disque HDFS à chaque étape). | TrÚs Rapide (10x-100x). (Garde les données en RAM (RDD/DF)). |
| Latence | Haute (Batch pur). | Faible (Micro-batch, Streaming, SQL interactif). |
| API | Complexe (Java Map/Reduce). | Simple (RDD, DataFrames, Spark SQL). |
| Usage | Batch ETL (Legacy). | Batch, ETL, Streaming, SQL, ML (Tout-en-un). |
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).
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 permissionschmod, 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.
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.
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 :
| Fichier | Description | Format |
|---|---|---|
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).
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) :
- (Toutes les heures) SNN contacte NN : "Crée un nouveau
EditLog.new". - SNN télécharge l'ancien
fsimageet l'ancienEditLog(plein). - SNN (localement) fusionne (applique)
fsimage+EditLogpour créer un nouveaufsimage.ckpt. - SNN "upload" (envoie) le nouveau
fsimage.ckptau NameNode. - (Au prochain boot, le NN utilise ce
fsimagerécent et le petitEditLog.new-> Démarrage rapide).
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)/2acquittements). - 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
- NN 1 (Active) crash.
- Sa session (Heartbeat) avec ZooKeeper expire.
- NN 2 (Standby) voit le "lock" ZK se libérer.
- NN 2 (Standby) prend le "lock" ZK et passe en
ACTIVE. (Failover en ~10-30 sec).
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).
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.
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)
- (Client)
spark-submit. - (YARN) ResourceManager (RM) reçoit la demande.
- RM demande Ă un NodeManager (NM) de lancer 1 Container pour l'ApplicationMaster (AM).
- L'AM (le "cerveau" du Job) démarre.
- L'AM négocie (demande) directement avec le RM : "J'ai besoin de 50 Containers (1vCPU/4Go RAM)".
- Le RM alloue 50 Containers (sur 10 NMs).
- 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é).
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)
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.
"Word Count" (Compteur de Mots) est l'exemple "Hello, World!" du Big Data (MapReduce).
// 1. Le Mapper (Java)
public class WordCountMapper
extends MapperProblĂš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 :
- Un Metastore (Catalogue) : Une BDD (ex: MySQL) qui stocke les schémas (
CREATE TABLE...) des données. - 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.
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)).
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).
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.
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:
tailun fichier.log, écouter un port Syslog, un topic Kafka). - Channel (Canal) : (La "Queue") Le "tampon" (buffer) de rétention (ex:
MemoryChannel(rapide) ouFileChannel(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/...)
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).
