eadl:bloc5:fm3:td3

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 12:40] – jcheroneadl:bloc5:fm3:td3 [2026/11/05 00:45] (Version actuelle) – [Schémas des trois flux] 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)  +  * **Fichiers fournis :** [[https://github.com/supavenir/hadoop-td3|github.com/supavenir/hadoop-td3]] (git clone <nowiki>https://github.com/supavenir/hadoop-td3</nowiki>) 
 +  * **Environnement :** Hadoop sur Docker Compose (cluster fourni dans le dossier ''environnement/'' : celui du TD1, avec Hive et Python en plus)
   * **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'autre partie du module     * **Technologie exclue pour ce projet :** Spark, traité dans l'autre partie du module  
Ligne 56: Ligne 57:
  
 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/''. 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 ==== ==== Schémas des trois flux ====
  
 **Flux 1 : ''commandes_AAAAMMJJ.csv''** (une ligne par ligne de commande) **Flux 1 : ''commandes_AAAAMMJJ.csv''** (une ligne par ligne de commande)
  
-<sxh text>+<sxh text;gutter:false>
 commande_id,ligne_id,client_id,produit_id,categorie,quantite,prix_unitaire,devise,statut,horodatage_commande commande_id,ligne_id,client_id,produit_id,categorie,quantite,prix_unitaire,devise,statut,horodatage_commande
 </sxh> </sxh>
Ligne 67: Ligne 67:
 **Flux 2 : ''consultations_AAAAMMJJ.csv''** (une ligne par page produit vue) **Flux 2 : ''consultations_AAAAMMJJ.csv''** (une ligne par page produit vue)
  
-<sxh text>+<sxh text;gutter:false>
 session_id,client_id,produit_id,categorie,url,horodatage_vue session_id,client_id,produit_id,categorie,url,horodatage_vue
 </sxh> </sxh>
Ligne 73: Ligne 73:
 **Flux 3 : ''annulations_AAAAMMJJ.csv''** (une ligne par annulation ou retour) **Flux 3 : ''annulations_AAAAMMJJ.csv''** (une ligne par annulation ou retour)
  
-<sxh text>+<sxh text;gutter:false>
 annulation_id,commande_id,ligne_id,type,motif,quantite,montant_rembourse,horodatage_annulation annulation_id,commande_id,ligne_id,type,motif,quantite,montant_rembourse,horodatage_annulation
 </sxh> </sxh>
 +
 +**Lot correctif : ''corrections_AAAAMMJJ.csv''** (une ligne par correction, livré le lendemain de la journée AAAAMMJJ qu'il corrige)
 +
 +<sxh text;gutter:false>
 +commande_id,ligne_id,client_id,produit_id,categorie,quantite,prix_unitaire,devise,statut,horodatage_commande,type_correction,correction_id,horodatage_correction
 +</sxh>
 +
 +Les dix premières colonnes reprennent le schéma du flux 1 : le lot correctif ne porte que sur les commandes. ''type_correction'' vaut ''AJOUT'' (ligne de commande absente du lot initial), ''MODIFICATION'' (nouvelle version d'une ligne de commande existante) ou ''SUPPRESSION'' (ligne de commande à retirer). ''horodatage_correction'' indique quand la correction a été émise.
  
 Remarques sur les schémas : Remarques sur les schémas :
Ligne 84: Ligne 92:
   * ''client_id'' est présent dans les flux 1 et 2 ; il est **interdit** dans les sorties métier.   * ''client_id'' est présent dans les flux 1 et 2 ; il est **interdit** dans les sorties métier.
  
-==== Anomalies présentes dans le jeu ====+==== Qualité des données ====
  
-Le jeu contient des cas à détecter ou à traiter :+Comme ceux que livrent les systèmes sources réels, ce jeu de données n'est pas propre. Explorez-le avant de coder : c'est à vous d'identifier les problèmes qu'il contient et de décider comment les traiter.
  
-  * lignes dupliquées (y compris des doublons exacts et des doublons « presque identiques ») ; +Pour vos tests (fichier corrompu, flux manquant, lignes ajoutées), travaillez sur des copies : les résultats que vous présentez doivent être calculés sur le jeu fourni, sans modification.
-  * 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 ==== ==== Règles métier à définir ====
Ligne 167: Ligne 164:
  
 Le nettoyage des données est attendu en **MapReduce Streaming**, sauf justification contraire dans le registre des décisions. Le nettoyage des données est attendu en **MapReduce Streaming**, sauf justification contraire dans le registre des décisions.
 +
 +**Calcul de contrôle, avant votre premier job.** Copiez les deux extraits ci-dessous dans ''extrait_commandes.csv'' et ''extrait_annulations.csv''. Ouvrez-les dans un tableur (Google Sheets, LibreOffice Calc…) et, en appliquant **vos** règles métier, calculez pour chaque catégorie le CA brut, les annulations déduites, le CA net et le nombre de commandes, ainsi que le nombre d'annulations orphelines. Lancez ensuite vos jobs ou vos requêtes Hive sur ces extraits et comparez : tout écart doit être compris et corrigé avant de passer au jeu complet.
 +
 +<sxh text;title:extrait_commandes.csv>
 +commande_id,ligne_id,client_id,produit_id,categorie,quantite,prix_unitaire,devise,statut,horodatage_commande
 +CMD1073051,1,CL008566,P00097,electromenager,1,117.90,EUR,PAYEE,2026-11-15T00:38:22
 +CMD1073061,1,CL009872,P00108,electromenager,3,70.49,EUR,PAYEE,2026-11-15T01:03:16
 +CMD1073061,2,CL009872,P00039,informatique,1,29.90,EUR,EXPEDIEE,2026-11-15T01:03:16
 +CMD1073089,1,CL007415,P00105,electromenager,1,135.90,EUR,PAYEE,2026-11-15T01:49:01
 +CMD1073089,2,CL007415,P00127,maison,1,10.99,EUR,PAYEE,2026-11-15T01:49:01
 +CMD1073093,1,CL008035,P00105,electromenager,1,135.90,EUR,PAYEE,2026-11-15T01:53:44
 +CMD1073104,1,CL014189,P00108,electromenager,3,70.49,EUR,LIVREE,2026-11-15T02:13:00
 +CMD1073104,2,CL014189,P00260,mode,1,20.99,EUR,ANNULEE,2026-11-15T02:13:00
 +CMD1073337,1,CL000029,P00110,electromenager,1,185.49,EUR,LIVREE,2026-11-15T07:12:37
 +CMD1073337,2,CL000029,P00261,mode,2,8.90,EUR,PAYEE,2026-11-15T07:12:37
 +CMD1074687,1,CL000014,P00125,maison,2,5.95,EUR,PAYEE,2026-11-15T12:34:48
 +CMD1074687,2,CL000014,P00261,mode,2,8.90,EUR,EXPEDIEE,2026-11-15T12:34:48
 +CMD1074687,3,CL000014,P00251,mode,2,10.49,EUR,PAYEE,2026-11-15T12:34:48
 +CMD1074687,4,CL000014,P00009,informatique,1,23.95,EUR,PAYEE,2026-11-15T12:34:48
 +CMD1075106,1,CL007765,P00040,informatique,4,129.90,EUR,PAYEE,2026-11-15T13:31:47
 +</sxh>
 +
 +<sxh text;title:extrait_annulations.csv>
 +annulation_id,commande_id,ligne_id,type,motif,quantite,montant_rembourse,horodatage_annulation
 +ANN0196112,CMD1073337,1,RETOUR,taille_inadaptee,1,185.49,2026-11-15T09:20:38
 +ANN0196652,CMD1073104,2,ANNULATION,changement_avis,1,20.99,2026-11-15T13:56:54
 +ANN0198204,CMD1075106,1,ANNULATION,paiement_modifie,1,129.90,2026-11-15T14:29:51
 +ANN0198163,CMD1074687,5,ANNULATION,paiement_modifie,1,23.95,2026-11-15T15:42:55
 +ANN0198196,CMD1075106,1,ANNULATION,changement_avis,1,129.90,2026-11-15T17:47:52
 +</sxh>
  
 **N'utilisez pas Spark pour cette séance.** **N'utilisez pas Spark pour cette séance.**
Ligne 199: Ligne 226:
  
 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. 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.
 +
 +Pour tester la montée en charge (palier 3), fabriquez un jeu plus volumineux à partir des fichiers fournis, par exemple en les dupliquant. Une simple concaténation transforme chaque copie en doublon de la précédente : rendez les identifiants uniques dans chaque copie, ou expliquez l'effet de ce choix sur vos mesures. Ce jeu sert à mesurer des durées et des débits, pas à produire des résultats métier.
  
 ===== 4. Contraintes de réalisation ===== ===== 4. Contraintes de réalisation =====
Ligne 210: Ligne 239:
 ===== 5. Usage de l'IA générative ===== ===== 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 :+<WRAP important round> 
 +**Première phase sans IA.** L'exploration des données, les hypothèses, le schéma d'architecture et le calcul de contrôle sur l'extrait se font **sans assistant IA**, y compris celui intégré au tableur, avec les outils du shell (''head'', ''wc'', ''grep'', ''awk''), un tableur, le sujet et votre binôme. Faire valider avant de commencer l'implémentation. 
 + 
 +Pourquoi : c'est la partie du projet où l'on apprend le plus, et celle qu'une IA ferait le plus volontiers à votre place. Repérer vous-mêmes ce qui ne va pas dans les données, et prévoir le résultat avant de lancer un job, c'est ce qui vous permettra ensuite de juger si ce que produit votre pipeline, ou une IA, est juste. 
 +</WRAP> 
 + 
 +Après cette phase, 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é ;   * **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é ;
Ligne 218: Ligne 253:
   * **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.   * **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. Étapes conseillées =====
- +
-===== 6. Déroulé indicatif de la séance =====+
  
-^ Durée indicative ^ Travail attendu ^ +  - **Sans IA :** lire le cas, explorer les données, 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 | +  - **Sans IA :** dessiner l'architecture, choisir l'approche pour la jointure et répartir les tâches. 
-| 45 min | Dessiner l'architecture, choisir l'approche pour la jointure et répartir les tâches | +  - **Sans IA :** calculer dans un tableur le résultat attendu sur l'extrait (section C). 
-| 2 h 15 | Mettre en œuvre le traitement (palier 1, puis 2) | +  - Point avec l'enseignant : hypothèses, schéma et calcul de contrôle. 
-| 1 h | Tester les erreurs, la relance et la cohérence des résultats | +  - Mettre en œuvre le traitement, d'abord sur l'extrait, puis sur le jeu complet (palier 1, puis 2). 
-| 45 min | Estimer la capacité, discuter le scaling et les limites | +  - Tester les erreurs, la relance et la cohérence des résultats. 
-| 30 min | Finaliser le dossier et préparer la restitution | +  - Estimer la capacité, discuter le scaling et les limites. 
-| 15 min par équipe | Présentation et questions individuelles |+  - Finaliser le dossier et préparer la restitution. 
 +  - Présentation et questions individuelles.
  
-Vous pouvez organiser votre travail autrement, mais réservez du temps pour les tests et la restitution.+Vous pouvez organiser votre travail autrement, mais ne sacrifiez pas les tests et la restitution : un pipeline qui tourne sans test de reprise ni dossier ne couvre que le palier 1.
  
 ===== 7. Livrable ===== ===== 7. Livrable =====
Ligne 240: Ligne 274:
   - 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 ;
 +  - le calcul de contrôle sur l'extrait (tableur) et sa comparaison avec la sortie de vos jobs ;
   - une preuve d'exécution : sortie du job, nombre de lignes traitées par flux, lignes rejetées, résultat métier obtenu ;   - 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) ;   - la description de la jointure et la vérification de sa justesse (par exemple : nombre d'annulations rattachées et nombre d'orphelines) ;
Ligne 271: Ligne 306:
 Chaque membre pourra être interrogé individuellement sur n'importe quelle partie de la solution. Chaque membre pourra être interrogé individuellement sur n'importe quelle partie de la solution.
  
-===== 8. Critères d'évaluation =====+===== 8. Critères de performance =====
  
 ^ Critère ^ Insuffisant ^ Satisfaisant ^ Excellent ^ ^ Critère ^ Insuffisant ^ Satisfaisant ^ Excellent ^
  • eadl/bloc5/fm3/td3.1793533209.txt.gz
  • Dernière modification : il y a 5 jours
  • de jcheron