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.
Chaque nuit, trois flux distincts sont déposés par trois systèmes sources différents :
Le traitement doit produire, pour chaque journée :
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.
À 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.
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/.
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 :
type vaut ANNULATION (avant expédition) ou RETOUR (après livraison) ;client_id est présent dans les flux 1 et 2 ; il est interdit dans les sorties métier.Le jeu contient des cas à détecter ou à traiter :
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.
Avant de coder, décidez et documentez :
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é.
Concevez une solution Hadoop qui répond au besoin de MarchéPlus, puis démontrez-en une version réduite sur l'environnement disponible.
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 |
Définissez le chemin des données depuis leur arrivée jusqu'à la publication des résultats.
Précisez notamment :
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 :
Expliquez pourquoi une réplication HDFS ne suffit pas à assurer la persistance des données après la destruction du cluster.
Implémentez au minimum (palier 1) :
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.
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 :
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.
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 :
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.
L'usage ponctuel d'un assistant IA est autorisé, comme il le serait dans un contexte professionnel. En revanche :
Les questions individuelles de la restitution orale porteront sur des éléments précis de votre solution.
| 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.
Remettez un dossier court comprenant :
| 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 |
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.
| 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.