Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| eadl:bloc5:fm3:td3 [2026/11/01 10:51] – [Projet - Concevoir un pipeline Hadoop résilient et dimensionné] jcheron | eadl:bloc5:fm3:td3 [2026/11/01 17:58] (Version actuelle) – [Projet - Concevoir un pipeline Hadoop résilient et dimensionné] jcheron | ||
|---|---|---|---|
| Ligne 4: | Ligne 4: | ||
| * **Durée :** 6 heures | * **Durée :** 6 heures | ||
| * **Organisation :** équipes de 2 personnes | * **Organisation :** équipes de 2 personnes | ||
| - | * **Environnement :** Hadoop sur Docker Compose (cluster fourni, identique à celui du TD2) | + | * **Environnement :** Hadoop sur Docker Compose (cluster fourni, identique à celui du TD1) |
| * **Technologies autorisées :** HDFS, YARN, MapReduce Streaming et/ou Hive | * **Technologies autorisées :** HDFS, YARN, MapReduce Streaming et/ou Hive | ||
| * **Technologie exclue pour ce projet :** Spark, traité dans l' | * **Technologie exclue pour ce projet :** Spark, traité dans l' | ||
| Ligne 11: | Ligne 11: | ||
| ===== 1. Contexte : le lendemain de la grande promotion ===== | ===== 1. Contexte : le lendemain de la grande promotion ===== | ||
| - | Vous rejoignez l’équipe data de **MarchéPlus**, | + | Vous rejoignez l'équipe data de **MarchéPlus**, |
| - | 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. | + | 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, | + | 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, |
| ==== Besoin métier ==== | ==== Besoin métier ==== | ||
| - | Chaque nuit, trois flux sont déposés : | + | Chaque nuit, **trois flux distincts** |
| - | * les commandes ; | + | |
| - | * les consultations de produits ; | + | |
| - | * les annulations et retours. | + | |
| Le traitement doit produire, pour chaque journée : | Le traitement doit produire, pour chaque journée : | ||
| - | * le chiffre d’affaires net par catégorie ; | + | * le chiffre d'affaires net par catégorie |
| * le nombre de commandes par catégorie ; | * le nombre de commandes par catégorie ; | ||
| * les cinq produits les plus consultés par catégorie ; | * les cinq produits les plus consultés par catégorie ; | ||
| Ligne 34: | Ligne 34: | ||
| 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. | 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 ==== | + | ==== Contraintes communiquées par l'entreprise ==== |
| - | * En moyenne, **120 Go de données compressées** arrivent chaque nuit. | + | * 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**. | * 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 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' | ||
| * Les données brutes doivent être conservées **90 jours**. | * 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 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 résultats agrégés doivent rester disponibles pendant **deux ans**. | ||
| * Les identifiants clients ne doivent pas apparaître dans les rapports métier. | * 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 | + | * 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. | + | * Une interruption d'un nœud ne doit pas entraîner automatiquement la perte définitive des données ou du résultat. |
| <WRAP question round> | <WRAP question round> | ||
| - | **À vous d’identifier les ambiguïtés.** | + | **À 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. Formulez des hypothèses explicites plutôt que d’ignorer ces questions. | + | 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' |
| </ | </ | ||
| - | ===== 2. Données | + | ===== 2. Données |
| - | ==== Environnement | + | 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 '' |
| - | * un fichier '' | + | ==== Schémas des trois flux ==== |
| - | * un dossier hôte '' | + | |
| - | * un jeu de données réduit '' | + | |
| - | * un squelette de scripts ('' | + | |
| - | ==== Format des données ==== | + | **Flux 1 : '' |
| - | Un seul format de fichier CSV pour les trois flux : | + | <sxh text> |
| + | commande_id, | ||
| + | </ | ||
| + | |||
| + | **Flux 2 : '' | ||
| <sxh text> | <sxh text> | ||
| - | date_evenement, | + | session_id, |
| </ | </ | ||
| - | ^ Colonne ^ Description ^ | + | **Flux 3 : '' |
| - | | date_evenement | Jour métier auquel l'événement est rattaché | + | |
| - | | commande_id | + | <sxh text> |
| - | | client_id | Identifiant client (donnée à ne pas exposer dans les rapports) | | + | annulation_id, |
| - | | produit_id / categorie | Produit et sa catégorie | | + | </ |
| - | | type_evenement | '' | + | |
| - | | montant | Montant | + | Remarques sur les schémas : |
| - | | horodatage | Date et heure réelles d' | + | |
| + | | ||
| + | * le flux 3 **ne contient pas la catégorie** : il faut la retrouver | ||
| + | * le flux 2 n'a **aucun lien avec les commandes** : il alimente uniquement le top 5 ; | ||
| + | * '' | ||
| - | Un événement est dit **tardif** lorsque son '' | + | ==== Anomalies présentes dans le jeu ==== |
| Le jeu contient des cas à détecter ou à traiter : | Le jeu contient des cas à détecter ou à traiter : | ||
| - | * lignes dupliquées ; | + | * lignes dupliquées |
| - | * champs vides (certains attendus, d' | + | * champs vides ou mal formés |
| - | * montants invalides (négatifs, non numériques, aberrants) ; | + | * montants, prix ou quantités |
| - | * événements | + | * produits dont la catégorie diffère entre deux flux ; |
| - | * lignes d' | + | * **annulations orphelines** (référence à une ligne de commande inexistante dans le lot) ; |
| - | * annulations ou retours associés à une commande, y compris une annulation dont la commande est absente du lot. | + | * annulations dont le montant dépasse celui de la ligne de commande |
| + | * événements | ||
| + | * lignes d' | ||
| + | * commandes annulées plusieurs fois ; | ||
| + | * un **lot correctif** ('' | ||
| Vous pouvez compléter le jeu ou fabriquer quelques lignes problématiques si cela vous aide à tester vos choix. | Vous pouvez compléter le jeu ou fabriquer quelques lignes problématiques si cela vous aide à tester vos choix. | ||
| Ligne 95: | Ligne 105: | ||
| Avant de coder, décidez et documentez : | Avant de coder, décidez et documentez : | ||
| - | * comment calculer le chiffre d’affaires net ; | + | * comment calculer le chiffre d'affaires net (prix, quantité, devise, annulation partielle ou totale, retour) |
| - | * comment traiter les doublons | + | * 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 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' | ||
| * comment classer les événements tardifs ; | * 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 ; | * comment départager les produits à égalité dans le top 5 ; | ||
| * quelles données peuvent apparaître dans les sorties. | * 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é. | + | 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 ===== | ===== 3. Votre mission ===== | ||
| - | Concevez une solution Hadoop qui répond au besoin de MarchéPlus, | + | Concevez une solution Hadoop qui répond au besoin de MarchéPlus, |
| - | Le travail est organisé en **paliers**. Le palier 1 est obligatoire ; les paliers 2 et 3 sont à traiter dans l' | + | ==== Paliers de réalisation ==== |
| - | ==== Palier | + | Les paliers sont cumulatifs. **Le palier |
| - | === A. Architecture | + | ^ Palier ^ Contenu ^ Statut ^ |
| + | | 1 | Nettoyage des flux, **jointure commandes/ | ||
| + | | 2 | Nombre de commandes par catégorie, mécanisme de publication fiable, test d' | ||
| + | | 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 : | + | ==== 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 ; | * où se trouvent les données brutes ; | ||
| * quelles données sont stockées dans HDFS et pendant combien de temps ; | * 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 | + | * où se trouvent les résultats qui doivent survivre à la suppression du cluster ; |
| - | * quels composants interviennent dans le traitement | + | * quels composants interviennent dans le traitement ; |
| * à quel moment un résultat peut être considéré comme publiable. | * à quel moment un résultat peut être considéré comme publiable. | ||
| - | === B. Traitement | + | ==== B. Stockage |
| - | Implémentez au minimum | + | Estimez le volume à stocker **dans l' |
| - | * une agrégation | + | * du volume moyen et du volume de pointe |
| - | * un traitement des lignes invalides, avec une sortie séparée permettant | + | * du **taux |
| - | * une vérification | + | * 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. | ||
| - | Le traitement peut utiliser | + | Expliquez pourquoi |
| - | **N’utilisez pas Spark pour cette séance.** | + | ==== C. Traitement et qualité des données ==== |
| - | ==== Palier 2 : résilience, | + | Implémentez au minimum (palier 1) : |
| - | === C. Relance | + | * le nettoyage |
| + | * **la jointure entre les lignes de commande et les annulations/ | ||
| + | * une agrégation du chiffre d' | ||
| + | * un traitement | ||
| + | * une vérification de la cohérence d'au moins un résultat (par exemple : brut − annulations | ||
| - | Décrivez | + | Le traitement peut utiliser |
| - | | + | Le nettoyage des données est attendu en **MapReduce Streaming**, sauf justification contraire dans le registre des décisions. |
| - | | + | |
| - | | + | |
| - | | + | |
| - | Proposez un mécanisme qui évite qu’un résultat incomplet ou périmé soit présenté comme le résultat officiel. Pistes possibles (non imposées) : séparation sorties temporaires / validées, renommage de répertoire, | + | **N' |
| - | **Pour rendre l' | + | ==== D. Relance et publication des résultats ==== |
| - | === D. Persistance | + | **Persistance |
| - | Démontrez que vos résultats validés survivent à la destruction du cluster | + | Décrivez ce qui se passe si : |
| - | Expliquez pourquoi | + | |
| + | * le job est relancé avec le même lot ; | ||
| + | * des fichiers de sortie existent déjà ; | ||
| + | | ||
| + | | ||
| - | ==== Palier 3 : dimensionnement | + | Proposez un mécanisme qui évite qu'un résultat incomplet ou périmé soit présenté comme le résultat officiel (par exemple |
| - | === E. Stockage et capacité | + | **Test d' |
| - | Estimez le volume à stocker **dans l’espace de travail HDFS** (et non dans le stockage externe de 90 jours / 2 ans, que vous traiterez séparément | + | ==== E. Dimensionnement |
| - | * du volume moyen et du volume de pointe ; | + | Proposez une configuration cible pour le scénario réel, même si vous ne pouvez tester |
| - | * du **taux de décompression** que vous supposez (les 120 Go sont compressés : le volume décompressé est bien plus grand, précisez votre hypothèse) ; | + | |
| - | * de la durée de conservation retenue pour les données de travail ; | + | |
| - | * du facteur de réplication HDFS ; | + | |
| - | * de la marge de capacité | + | |
| - | + | ||
| - | === F. 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 de calcul ; | ||
| Ligne 175: | Ligne 196: | ||
| * pourquoi ces deux décisions ne sont pas équivalentes ; | * pourquoi ces deux décisions ne sont pas équivalentes ; | ||
| * quels indicateurs vous surveilleriez pour vérifier que le dimensionnement convient ; | * quels indicateurs vous surveilleriez pour vérifier que le dimensionnement convient ; | ||
| - | * quelles limites pourraient apparaître lorsque le volume augmente. | + | * quelles limites pourraient apparaître lorsque le volume augmente |
| - | Faites apparaître au moins un calcul de capacité | + | Faites apparaître |
| - | + | ||
| - | === G. Extensions (si le temps le permet) === | + | |
| - | + | ||
| - | * top 5 des produits les plus consultés par catégorie, avec règle de départage documentée ; | + | |
| - | * nombre de commandes par catégorie ; | + | |
| - | * liste d' | + | |
| - | * pseudonymisation ou suppression de '' | + | |
| ===== 4. Contraintes de réalisation ===== | ===== 4. Contraintes de réalisation ===== | ||
| - | * Travaillez avec l’environnement local fourni. | + | * Travaillez avec l'environnement local fourni |
| - | * **N’utilisez pas AWS** pour ce projet. | + | * **N'utilisez pas AWS** pour ce projet. |
| * Le cluster de démonstration ne doit pas être présenté comme équivalent à une infrastructure de production. | * 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. | + | * 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 et les limites de la solution | + | * Vous pouvez vous répartir le travail, mais chaque membre de l'équipe doit être capable d'expliquer l'architecture, la jointure |
| + | |||
| + | ===== 5. Usage de l'IA générative ===== | ||
| + | |||
| + | L' | ||
| + | |||
| + | * **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' | ||
| + | * **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. | ||
| - | ===== 5. Déroulé indicatif de la séance ===== | + | ===== 6. Déroulé indicatif de la séance ===== |
| ^ Durée indicative ^ Travail attendu ^ | ^ Durée indicative ^ Travail attendu ^ | ||
| | 30 min | Lire le cas, relever les ambiguïtés et formuler les hypothèses | | | 30 min | Lire le cas, relever les ambiguïtés et formuler les hypothèses | | ||
| - | | 30 min | Dessiner l’architecture, | + | | 45 min | Dessiner l'architecture, |
| - | | 1 h 45 | Palier 1 : mise en œuvre | + | | 2 h 15 | Mettre |
| - | | 1 h 15 | Palier 2 : échec, relance, publication, | + | | 1 h | Tester les erreurs, la relance |
| - | | 45 min | Palier 3 : estimation de capacité, scaling, limites | | + | | 45 min | Estimer la capacité, |
| - | | 1 h 15 | Rédaction finale du dossier, puis restitution | + | | 30 min | Finaliser le dossier |
| + | | 15 min par équipe | ||
| - | Vous pouvez organiser votre travail autrement, mais réservez du temps pour les tests et la restitution. Les paliers 2 et 3 peuvent être menés en parallèle par des sous-groupes différents. | + | Vous pouvez organiser votre travail autrement, mais réservez du temps pour les tests et la restitution. |
| - | ===== 6. Livrable ===== | + | ===== 7. Livrable ===== |
| Remettez un dossier court comprenant : | Remettez un dossier court comprenant : | ||
| - | - un schéma d’architecture montrant les données, les stockages et les traitements ; | + | - un schéma d'architecture montrant les données, les stockages et les traitements ; |
| - un registre des hypothèses et décisions ; | - un registre des hypothèses et décisions ; | ||
| - les scripts, requêtes ou commandes nécessaires pour reproduire le traitement ; | - 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 | + | - une preuve d'exécution : sortie du job, nombre de lignes traitées |
| - | - un test de reprise ou d’échec, accompagné d’une explication du comportement observé | + | - la description de la jointure et la vérification de sa justesse (par exemple : nombre d' |
| - | - la preuve de survie des résultats après recréation du cluster | + | - un test de reprise ou d'échec, accompagné d'une explication du comportement observé ; |
| - une estimation de capacité et de dimensionnement, | - une estimation de capacité et de dimensionnement, | ||
| - | - une synthèse précisant ce qui devrait changer avant un déploiement réel. | + | - une synthèse précisant ce qui devrait changer avant un déploiement réel ; |
| + | - la note d' | ||
| ==== Registre des hypothèses et décisions ==== | ==== Registre des hypothèses et décisions ==== | ||
| Ligne 223: | Ligne 251: | ||
| ^ Sujet ^ Hypothèse ou choix ^ Justification ^ Conséquence ou limite ^ | ^ Sujet ^ Hypothèse ou choix ^ Justification ^ Conséquence ou limite ^ | ||
| | Fichier tardif | | | | | | Fichier tardif | | | | | ||
| - | | Annulation | + | | Doublons et clé d' |
| - | | Doublons | + | | Annulation |
| - | | Lignes invalides | + | | Rattachement d'une annulation à une journée | | | | |
| + | | Flux manquant ou incomplet | ||
| + | | Choix de la jointure | ||
| | Données conservées dans HDFS | | | | | | Données conservées dans HDFS | | | | | ||
| - | | Données conservées hors cluster | | | | | ||
| | Relance du job | | | | | | Relance du job | | | | | ||
| | Publication du résultat | | | | | | Publication du résultat | | | | | ||
| - | | Taux de décompression | | | | | ||
| | Dimensionnement | | | | | | Dimensionnement | | | | | ||
| Ligne 241: | Ligne 269: | ||
| </ | </ | ||
| - | ===== 7. Critères d’évaluation ===== | + | Chaque membre pourra être interrogé individuellement sur n' |
| + | |||
| + | ===== 8. Critères d'évaluation ===== | ||
| ^ Critère ^ Insuffisant ^ Satisfaisant ^ Excellent ^ | ^ Critère ^ Insuffisant ^ Satisfaisant ^ Excellent ^ | ||
| - | | Cohérence de l’architecture | Schéma | + | | Cohérence de l'architecture | Schéma |
| - | | Compréhension de Hadoop | Confusion HDFS / YARN / moteur | Rôles correctement distingués | Rôles distingués et illustrés par des observations | + | | Compréhension de Hadoop | Confusion |
| - | | Qualité du traitement | Résultat | + | | Qualité du traitement | Résultats |
| - | | Gestion de la reprise | Reprise seulement décrite | + | | Gestion de la reprise | Relance écrase ou duplique les sorties |
| - | | Dimensionnement | Chiffres sans hypothèses | Calcul | + | | Dimensionnement | Chiffres sans hypothèses | Calculs |
| - | | Prise de recul | Prototype présenté comme production | Limites listées | Limites hiérarchisées, | + | | Prise de recul | Prototype présenté comme production | Limites |
| - | | Défense des choix | Réponses récitées, un seul membre répond | Chacun explique sa partie | Chacun explique l' | + | | 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' | ||
| <WRAP tip round> | <WRAP tip round> | ||
| - | 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**, | + | 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**, |
| </ | </ | ||