Apache Hadoop est un framework open source permettant de stocker et de traiter efficacement de grands ensembles de données allant de l'ordre du gigaoctect à celui du pétaoctet. Au lieu d'utiliser un vaste système informatique pour stocker et traiter les données, Hadoop permet de regrouper des machines en clusters pour analyser plus rapidement des ensembles de données volumineux en parallèle.
Mise en place d'une plateforme Hadoop afin de :
À retenir :
Une plateforme e-commerce collecte quotidiennement :
Lorsque les volumes deviennent importants, une seule machine peut atteindre ses limites :
Hadoop propose d’utiliser plusieurs machines pour :
Hadoop permet de stocker et de traiter de grandes quantités de données sur plusieurs machines.
Hadoop regroupe plusieurs composants qui remplissent des rôles différents :
| Composant | Rôle |
|---|---|
| Hadoop | Écosystème de technologies distribuées |
| HDFS | Stockage des fichiers sur plusieurs nœuds |
| YARN | Gestion des ressources et des applications |
| MapReduce | Modèle de traitement distribué |
| Spark | Moteur de traitement distribué également étudié dans ce module |
Hadoop ne désigne pas uniquement HDFS. HDFS est la partie stockage, YARN gère les ressources et MapReduce fournit un modèle de traitement.
Lorsqu’un fichier est déposé dans HDFS, il est découpé en blocs.
ventes.csv
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Bloc 1 │ │ Bloc 2 │ │ Bloc 3 │
└─────────┘ └─────────┘ └─────────┘
Les blocs sont ensuite répartis sur les différents DataNodes.
HDFS repose principalement sur deux types de nœuds :
┌──────────────┐
│ NameNode │
│ Métadonnées │
└──────┬───────┘
│
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ DataNode 1 │ │ DataNode 2 │ │ DataNode 3 │
│ Blocs │ │ Blocs │ │ Blocs │
└────────────┘ └────────────┘ └────────────┘
Le NameNode conserve les métadonnées du système de fichiers :
Le NameNode ne contient généralement pas le contenu des fichiers.
Les DataNodes stockent physiquement les blocs de données.
Ils sont également chargés de :
Le NameNode sait où se trouvent les blocs. Les DataNodes stockent réellement les blocs.
Pour éviter la perte de données en cas de panne, HDFS conserve plusieurs copies de chaque bloc.
Bloc 1
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ DataNode 1 │ │ DataNode 2 │ │ DataNode 3 │
│ Copie 1 │ │ Copie 2 │ │ Copie 3 │
└────────────┘ └────────────┘ └────────────┘
Avec un facteur de réplication égal à 3, chaque bloc possède trois copies.
Si un DataNode tombe en panne, HDFS peut encore lire le bloc depuis un autre DataNode.
La réplication améliore la tolérance aux pannes, mais elle augmente l’espace de stockage nécessaire.
YARN est chargé de gérer les ressources disponibles sur le cluster.
Il décide notamment :
┌───────────────┐
│ Application │
└───────┬───────┘
│
▼
┌───────────────┐
│ResourceManager│
└───────┬───────┘
│
┌─────────────┴─────────────┐
│ │
▼ ▼
┌────────────┐ ┌────────────┐
│NodeManager │ │NodeManager │
│ 1 │ │ 2 │
└────────────┘ └────────────┘
Le ResourceManager est le composant central de YARN.
Il :
Chaque machine exécutant des tâches possède un NodeManager.
Il est chargé de :
HDFS gère les données. YARN gère les ressources.
MapReduce permet de traiter les données en plusieurs étapes :
┌──────────────┐
│ Données │
│ d’entrée │
└──────┬───────┘
│
▼
┌──────────────┐
│ Map │
│ Transformer │
└──────┬───────┘
│
▼
┌──────────────┐
│ Shuffle │
│ Regrouper │
└──────┬───────┘
│
▼
┌──────────────┐
│ Reduce │
│ Agréger │
└──────┬───────┘
│
▼
┌──────────────┐
│ Résultats │
└──────────────┘
Données d’entrée :
informatique maison informatique sport maison
Chaque ligne devient une paire clé-valeur :
(informatique, 1) (maison, 1) (informatique, 1) (sport, 1) (maison, 1)
Hadoop regroupe les valeurs par clé :
(informatique, [1, 1]) (maison, [1, 1]) (sport, [1])
Le système additionne les valeurs :
informatique : 2 maison : 2 sport : 1
MapReduce permet de :
MapReduce est particulièrement adapté aux traitements batch. Spark propose une approche plus flexible et souvent plus rapide pour de nombreux traitements.
Dans le TD, nous allons :
┌──────────────┐
│ ventes.csv │
└──────┬───────┘
│
▼
┌──────────────┐
│ HDFS │
└──────┬───────┘
│
├──────────────► NameNode
│ Métadonnées
│
└──────────────► DataNodes
Blocs et réplication
│
▼
┌──────────────┐
│ YARN │
│ Gestion des │
│ ressources │
└──────┬───────┘
│
▼
┌──────────────┐
│ MapReduce │
└──────┬───────┘
│
▼
┌──────────────┐
│ Résultats │
│ dans HDFS │
└──────────────┘