Ceci est une ancienne révision du document !
Projet - Concevoir un pipeline Hadoop résilient et dimensionné
- Module : Big Data et traitement massif
- Durée : 6 heures
- Organisation : équipes de 2 personnes
- Environnement : Hadoop sur Docker Compose (cluster fourni, identique à celui du TD2)
- Technologies autorisées : HDFS, YARN, MapReduce Streaming et/ou Hive
- Technologie exclue pour ce projet : Spark, traité dans l'autre partie du module
- AWS : interdit pour ce projet (aucun risque de facturation)
1. Contexte : le lendemain de la grande promotion
Vous rejoignez l'équipe data de MarchéPlus, une enseigne de commerce en ligne. Après une grande campagne promotionnelle, la direction veut recevoir chaque matin un rapport fiable avant l'ouverture des équipes commerciales.
Aujourd'hui, les données sont traitées par un script exécuté sur une machine unique. Le rapport est parfois en retard, les relances produisent des résultats incohérents et personne ne sait combien de temps les données doivent rester disponibles.
Votre équipe doit proposer et démontrer une solution Hadoop pour ce traitement. Il ne s'agit pas seulement de faire fonctionner un job : vous devez faire des choix d'architecture, les justifier et expliciter leurs limites.
Besoin métier
Chaque nuit, trois flux distincts sont déposés par trois systèmes sources différents :
- les commandes, issues de la plateforme de vente ;
- les consultations de produits, issues du site web (journaux de navigation) ;
- les annulations et retours, issus du service client.
Le traitement doit produire, pour chaque journée :
- le chiffre d'affaires net par catégorie (commandes moins annulations et retours) ;
- le nombre de commandes par catégorie ;
- les cinq produits les plus consultés par catégorie ;
- une liste des anomalies de données à examiner.
Les équipes métier veulent consulter les résultats avant 6 h. Une journée de données peut être corrigée ou complétée le lendemain : le pipeline doit donc permettre une reprise ou un recalcul sans publier silencieusement un résultat incohérent.
Contraintes communiquées par l'entreprise
- En moyenne, 120 Go de données compressées arrivent chaque nuit, tous flux confondus.
- Pendant les promotions, le volume peut atteindre 1,5 fois le volume moyen.
- Les fichiers arrivent entre minuit et 3 h ; le traitement doit se terminer avant 5 h 30, afin de laisser une marge avant la publication.
- Les trois flux n'arrivent pas à la même heure et l'un d'eux peut manquer ou arriver incomplet.
- Les données brutes doivent être conservées 90 jours.
- Les données intermédiaires de calcul ne sont nécessaires que pendant le traitement et les reprises.
- Les résultats agrégés doivent rester disponibles pendant deux ans.
- Les identifiants clients ne doivent pas apparaître dans les rapports métier.
- L'équipe dispose d'un budget limité et ne veut pas laisser un cluster actif en permanence.
- Une interruption d'un nœud ne doit pas entraîner automatiquement la perte définitive des données ou du résultat.
À vous d'identifier les ambiguïtés.
Le cahier des charges ne précise pas, par exemple, si les fichiers tardifs modifient les rapports déjà publiés, ni quelle règle métier appliquer à une commande annulée après la clôture de la journée, ni ce qu'il faut faire si le flux d'annulations n'est pas arrivé à 5 h. Formulez des hypothèses explicites plutôt que d'ignorer ces questions.
2. Données mises à disposition
Un jeu de données réduit est fourni, volontairement bien plus petit que les volumes réels. Il se compose de trois fichiers CSV (avec en-tête), plus un lot correctif, dans le dossier donnees/.
Schémas des trois flux
Flux 1 : commandes_AAAAMMJJ.csv (une ligne par ligne de commande)
commande_id,ligne_id,client_id,produit_id,categorie,quantite,prix_unitaire,devise,statut,horodatage_commande
Flux 2 : consultations_AAAAMMJJ.csv (une ligne par page produit vue)
session_id,client_id,produit_id,categorie,url,horodatage_vue
Flux 3 : annulations_AAAAMMJJ.csv (une ligne par annulation ou retour)
annulation_id,commande_id,ligne_id,type,motif,quantite,montant_rembourse,horodatage_annulation
Remarques sur les schémas :
typevautANNULATION(avant expédition) ouRETOUR(après livraison) ;- le flux 3 ne contient pas la catégorie : il faut la retrouver en rattachant l'annulation à la ligne de commande correspondante (jointure) ;
- le flux 2 n'a aucun lien avec les commandes : il alimente uniquement le top 5 ;
client_idest présent dans les flux 1 et 2 ; il est interdit dans les sorties métier.
Anomalies présentes dans le jeu
Le jeu contient des cas à détecter ou à traiter :
- lignes dupliquées (y compris des doublons exacts et des doublons « presque identiques ») ;
- champs vides ou mal formés (dates, nombres) ;
- montants, prix ou quantités invalides (négatifs, nuls, non numériques) ;
- produits dont la catégorie diffère entre deux flux ;
- annulations orphelines (référence à une ligne de commande inexistante dans le lot) ;
- annulations dont le montant dépasse celui de la ligne de commande ;
- événements dont l'horodatage est postérieur ou antérieur à la journée traitée ;
- lignes d'en-tête répétées au milieu d'un fichier ;
- commandes annulées plusieurs fois ;
- un lot correctif (
corrections_AAAAMMJJ.csv, arrivant le lendemain) qui complète ou corrige la journée.
Vous pouvez compléter le jeu ou fabriquer quelques lignes problématiques si cela vous aide à tester vos choix.
Règles métier à définir
Avant de coder, décidez et documentez :
- comment calculer le chiffre d'affaires net (prix, quantité, devise, annulation partielle ou totale, retour) ;
- quelle clé identifie de manière unique une ligne de commande, et comment traiter les doublons ;
- que faire des lignes invalides ou incomplètes ;
- que faire d'une annulation orpheline ;
- à quelle journée rattacher une annulation (celle de la commande ou celle de l'annulation) ;
- comment classer les événements tardifs ;
- que faire si un flux est absent ou incomplet au moment du traitement ;
- comment départager les produits à égalité dans le top 5 ;
- quelles données peuvent apparaître dans les sorties.
Il n'y a pas nécessairement une seule réponse possible. En revanche, une règle non documentée ne pourra pas être considérée comme un choix maîtrisé.
3. Votre mission
Concevez une solution Hadoop qui répond au besoin de MarchéPlus, puis démontrez-en une version réduite sur l'environnement disponible.
Paliers de réalisation
Les paliers sont cumulatifs. Le palier 1 est obligatoire ; les suivants se valorisent dans la grille d'évaluation.
| Palier | Contenu | Statut |
|---|---|---|
| 1 | Nettoyage des flux, jointure commandes/annulations, CA net par catégorie, sortie des rejets, un contrôle de cohérence | Obligatoire |
| 2 | Nombre de commandes par catégorie, mécanisme de publication fiable, test d'échec et de relance | Attendu |
| 3 | Top 5 des produits consultés par catégorie, traitement du lot correctif, tests de montée en charge | Extension |
A. Architecture et parcours des données
Définissez le chemin des données depuis leur arrivée jusqu'à la publication des résultats.
Précisez notamment :
- où se trouvent les données brutes ;
- quelles données sont stockées dans HDFS et pendant combien de temps ;
- où se trouvent les résultats qui doivent survivre à la suppression du cluster ;
- quels composants interviennent dans le traitement ;
- à quel moment un résultat peut être considéré comme publiable.
B. Stockage et capacité
Estimez le volume à stocker dans l'espace de travail HDFS (le stockage à 90 jours et à deux ans est traité séparément, voir section D), en tenant compte :
- du volume moyen et du volume de pointe ;
- du taux de décompression (les 120 Go sont compressés : posez une hypothèse explicite) ;
- de la durée de conservation retenue pour les données de travail ;
- du facteur de réplication HDFS ;
- de la marge de capacité que vous souhaitez garder.
Expliquez pourquoi une réplication HDFS ne suffit pas à assurer la persistance des données après la destruction du cluster.
C. Traitement et qualité des données
Implémentez au minimum (palier 1) :
- le nettoyage et la validation de chaque flux ;
- la jointure entre les lignes de commande et les annulations/retours, afin de rattacher la catégorie et de calculer le net ;
- une agrégation du chiffre d'affaires net par catégorie ;
- un traitement des lignes invalides, avec une sortie permettant de les examiner ;
- une vérification de la cohérence d'au moins un résultat (par exemple : brut − annulations = net, ou comptage des lignes en entrée = lignes valides + rejetées).
Le traitement peut utiliser MapReduce Streaming, Hive, ou une combinaison des deux. Expliquez pourquoi vous avez retenu cette approche, et comment vous avez réalisé la jointure (par exemple jointure côté reducer en Streaming, ou JOIN Hive) ainsi que son coût (données déplacées entre les nœuds, risque de déséquilibre si quelques clés concentrent beaucoup de lignes).
Le nettoyage des données est attendu en MapReduce Streaming, sauf justification contraire dans le registre des décisions.
N'utilisez pas Spark pour cette séance.
D. Relance et publication des résultats
Persistance hors cluster. Le dossier persistant/ de la machine hôte simule le stockage objet durable (type S3). Vous devez démontrer qu'un résultat validé survit à la destruction du cluster (docker compose down -v, recréation, restauration).
Décrivez ce qui se passe si :
- le job échoue à mi-parcours ;
- le job est relancé avec le même lot ;
- des fichiers de sortie existent déjà ;
- un des trois flux est absent, vide ou incomplet ;
- un fichier tardif ou corrigé arrive le lendemain.
Proposez un mécanisme qui évite qu'un résultat incomplet ou périmé soit présenté comme le résultat officiel (par exemple : sorties temporaires et sorties validées, renommage atomique, fichier marqueur de validation, versionnage par lot). Expliquez votre logique.
Test d'échec obligatoire (palier 2). Provoquez au moins une défaillance réelle et documentez le comportement observé : arrêt d'un DataNode, interruption d'un job avec yarn application -kill, fichier d'entrée corrompu ou flux manquant. Vous devez montrer ce qui se passe, pas seulement le décrire.
E. Dimensionnement et montée en charge
Proposez une configuration cible pour le scénario réel, même si vous ne pouvez tester que sur un petit cluster.
Distinguez les rôles des nœuds et expliquez :
- dans quel cas vous ajouteriez des nœuds de calcul ;
- dans quel cas vous ajouteriez des nœuds qui stockent les blocs HDFS ;
- pourquoi ces deux décisions ne sont pas équivalentes ;
- quels indicateurs vous surveilleriez pour vérifier que le dimensionnement convient ;
- quelles limites pourraient apparaître lorsque le volume augmente (NameNode, petits fichiers, jointure déséquilibrée, entrées-sorties disque ou réseau).
Faites apparaître au moins un calcul de capacité et un calcul de débit (par exemple : quel débit de traitement faut-il pour absorber le volume de pointe dans la fenêtre disponible ?). Indiquez les hypothèses utilisées et précisez pourquoi une extrapolation à partir du jeu de données réduit reste approximative.
4. Contraintes de réalisation
- Travaillez avec l'environnement local fourni (Docker Compose).
- N'utilisez pas AWS pour ce projet.
- Le cluster de démonstration ne doit pas être présenté comme équivalent à une infrastructure de production.
- Ne vous contentez pas d'un schéma théorique : votre pipeline doit produire un résultat vérifiable sur le jeu de données réduit.
- Vous pouvez vous répartir le travail, mais chaque membre de l'équipe doit être capable d'expliquer l'architecture, la jointure et les limites de la solution.
5. Usage de l'IA générative
L'usage ponctuel d'un assistant IA est autorisé, comme il le serait dans un contexte professionnel. En revanche :
- vous restez responsables de tout ce que vous livrez : un script produit par une IA que vous ne savez pas expliquer sera considéré comme non maîtrisé ;
- les choix d'architecture et les règles métier doivent être les vôtres : l'IA peut servir à explorer des options ou à débloquer une syntaxe, pas à décider à votre place ;
- vérifiez systématiquement ce qu'elle propose (versions, options Hadoop, comportement réel sur votre cluster) ; une réponse plausible peut être fausse ;
- ne transmettez pas de données sensibles ;
- tracez votre usage : une demi-page indiquant pour quelles tâches vous avez utilisé l'IA, ce que vous avez corrigé ou rejeté, et une erreur ou imprécision que vous avez relevée dans ses réponses.
Les questions individuelles de la restitution orale porteront sur des éléments précis de votre solution.
6. Déroulé indicatif de la séance
| Durée indicative | Travail attendu |
|---|---|
| 30 min | Lire le cas, relever les ambiguïtés et formuler les hypothèses |
| 45 min | Dessiner l'architecture, choisir l'approche pour la jointure et répartir les tâches |
| 2 h 15 | Mettre en œuvre le traitement (palier 1, puis 2) |
| 1 h | Tester les erreurs, la relance et la cohérence des résultats |
| 45 min | Estimer la capacité, discuter le scaling et les limites |
| 30 min | Finaliser le dossier et préparer la restitution |
| 15 min par équipe | Présentation et questions individuelles |
Vous pouvez organiser votre travail autrement, mais réservez du temps pour les tests et la restitution.
7. Livrable
Remettez un dossier court comprenant :
- un schéma d'architecture montrant les données, les stockages et les traitements ;
- un registre des hypothèses et décisions ;
- les scripts, requêtes ou commandes nécessaires pour reproduire le traitement ;
- une preuve d'exécution : sortie du job, nombre de lignes traitées par flux, lignes rejetées, résultat métier obtenu ;
- la description de la jointure et la vérification de sa justesse (par exemple : nombre d'annulations rattachées et nombre d'orphelines) ;
- un test de reprise ou d'échec, accompagné d'une explication du comportement observé ;
- une estimation de capacité et de dimensionnement, avec vos hypothèses ;
- une synthèse précisant ce qui devrait changer avant un déploiement réel ;
- la note d'usage de l'IA (une demi-page).
Registre des hypothèses et décisions
| Sujet | Hypothèse ou choix | Justification | Conséquence ou limite |
|---|---|---|---|
| Fichier tardif | |||
| Doublons et clé d'unicité | |||
| Annulation orpheline | |||
| Rattachement d'une annulation à une journée | |||
| Flux manquant ou incomplet | |||
| Choix de la jointure | |||
| Données conservées dans HDFS | |||
| Relance du job | |||
| Publication du résultat | |||
| Dimensionnement |
Restitution orale
Votre présentation doit répondre à la question suivante :
Quelle décision de votre équipe vous semble la plus importante pour éviter un résultat erroné ou une dépense inutile, et pourquoi ?
Chaque membre pourra être interrogé individuellement sur n'importe quelle partie de la solution.
8. Critères d'évaluation
| Critère | Insuffisant | Satisfaisant | Excellent |
|---|---|---|---|
| Cohérence de l'architecture | Schéma générique, composants mal reliés | Parcours complet et cohérent avec les contraintes | Choix justifiés par les contraintes, alternatives discutées |
| Compréhension de Hadoop | Confusion entre rôles HDFS, YARN, moteur de calcul | Rôles correctement distingués | Impact de chaque composant sur la reprise et le scaling expliqué |
| Qualité du traitement | Résultats non vérifiables, rejets ignorés | Résultats vérifiés, rejets tracés, jointure correcte | Contrôles de cohérence multiples, orphelins et écarts expliqués |
| Gestion de la reprise | Relance écrase ou duplique les sorties | Sorties temporaires/validées, relance idempotente | Échec réellement testé, flux manquant et lot correctif gérés |
| Dimensionnement | Chiffres sans hypothèses | Calculs de capacité et de débit expliqués | Limites identifiées (NameNode, déséquilibre de jointure, I/O) et marges justifiées |
| Prise de recul | Prototype présenté comme production | Limites du prototype listées | Plan chiffré et priorisé avant déploiement réel |
| Maîtrise et usage de l'IA | Code non expliqué, aucune trace | Usage tracé, sorties vérifiées | Erreurs de l'IA identifiées et corrigées, décisions clairement humaines |
| Défense des choix | Un seul membre répond | Chacun explique sa partie | Chacun explique l'ensemble et les compromis |
Une solution qui traite le petit fichier le plus rapidement possible n'est pas nécessairement la meilleure. Vous serez aussi évalués sur votre capacité à distinguer stockage temporaire et persistant, calcul et stockage, résultat calculé et résultat validé, et à expliquer les compromis retenus.