Préparer des fichiers pour un traitement par lots

Big DataBeginner
Pratiquer maintenant

Introduction

Votre commerçant reçoit maintenant des fichiers de deux magasins pour deux dates. Le programme de comptage traitera les fichiers que vous lui fournirez ; il ne peut ni deviner le jour voulu, ni reconnaître qu’un ancien fichier de résultats doit être exclu. Un programme correct peut donc produire une réponse métier incorrecte lorsque la sélection des entrées est mauvaise.

Vous avez appris à préserver, copier, archiver et exporter des fichiers individuels. Vous passerez ici d’un fichier à une entrée de lot, un ensemble de fichiers sélectionnés délibérément. Vous séparerez les dates, comparerez les nombres de fichiers et leurs contenus, puis enregistrerez un manifeste : la liste exacte des fichiers HDFS sélectionnés pour une exécution.

HDFS stocke le contenu des fichiers sans comprendre les colonnes de vente, les dates ou les en-têtes CSV. Vous observerez cette limite avant d’organiser les entrées. Ce lab prépare indépendamment ses propres fichiers locaux et un exemple d’ancien résultat ; il ne dépend pas de l’état des labs précédents. Utilisez le Terminal.

Distinguer le texte stocké de sa signification

Dans cette étape, vous examinerez les livraisons locales et observerez que le téléversement d’un CSV conserve son en-tête comme du texte ordinaire.

Commencez dans votre espace de travail local :

cd /home/labex/project

Listez la livraison de la première date. Une date dans un nom de répertoire est une convention utile, et non un type de données imposé par HDFS :

ls /home/labex/project/data/2026-10-14

Vous devriez voir store-east.txt et store-west.txt. Lisez-les dans cet ordre avec la commande locale cat :

cat /home/labex/project/data/2026-10-14/store-east.txt /home/labex/project/data/2026-10-14/store-west.txt

Texte attendu :

notebook pen
notebook
folder pen

Ici, chaque mot est un libellé de produit enregistré. Ces fichiers conviennent au comptage de mots que vous apprendrez plus tard. Un autre système a fourni un format différent. Lisez le petit aperçu CSV :

cat /home/labex/project/data/orders-preview.csv

Texte attendu :

product,quantity
notebook,2
pen,1

CSV utilise des virgules pour séparer les champs. Sa première ligne est un en-tête qui nomme les colonnes ; les deux autres lignes sont des enregistrements métier. HDFS ne supprime pas automatiquement cette première ligne et n’interprète pas quantity comme un entier.

Conservez cet aperçu à l’écart du lot de libellés de produits. Créez un répertoire HDFS pour lui :

hdfs dfs -mkdir -p /user/labex/batch-inputs/preview

Téléversez le CSV :

hdfs dfs -put /home/labex/project/data/orders-preview.csv /user/labex/batch-inputs/preview/orders.csv

Relisez-le :

hdfs dfs -cat /user/labex/batch-inputs/preview/orders.csv

Les trois lignes restent présentes, y compris l’en-tête. Ignorer un en-tête ou interpréter un nombre relève d’une décision de traitement. Mélanger ce fichier aux entrées de libellés modifierait le sens du calcul, même si tous les fichiers sont lisibles.

Organiser les livraisons par date

Dans cette étape, vous donnerez à chaque date un répertoire distinct d’entrées brutes et y téléverserez les deux fichiers de magasins correspondants.

Utilisez une organisation de répertoires qui rend visible la différence entre entrées et sorties :

batch-inputs/
  raw/2026-10-14/       fichiers produits du premier jour
  raw/2026-10-15/       fichiers produits du jour suivant
  preview/             exemple de format CSV
  results/previous-run/  sortie préparée d’une exécution précédente

L’ancien résultat est seulement une donnée d’exercice pour apprendre à sélectionner les entrées. Il ne doit pas faire partie du nouveau lot brut. Créez les deux répertoires quotidiens :

hdfs dfs -mkdir -p /user/labex/batch-inputs/raw/2026-10-14 /user/labex/batch-inputs/raw/2026-10-15

Le motif *.txt du shell correspond aux noms de fichiers locaux se terminant par .txt. Dans la commande suivante, votre shell développe le motif local sans guillemets en deux chemins sources avant de lancer le client HDFS. Le dernier argument est un répertoire HDFS existant :

hdfs dfs -put /home/labex/project/data/2026-10-14/*.txt /user/labex/batch-inputs/raw/2026-10-14/

Changez maintenant uniquement la date aux deux emplacements pour téléverser la seconde livraison :

hdfs dfs -put /home/labex/project/data/2026-10-15/*.txt /user/labex/batch-inputs/raw/2026-10-15/

Si les fichiers de destination existent déjà, examinez-les avant de décider d’écraser quoi que ce soit. Conserver une entrée brute est plus utile que de la supprimer simplement pour pouvoir réexécuter une commande de téléversement.

Vérifiez chaque lot avec -count, appris dans le lab sur le cycle de vie :

hdfs dfs -count /user/labex/batch-inputs/raw/2026-10-14 /user/labex/batch-inputs/raw/2026-10-15

Chaque date doit contenir un répertoire et deux fichiers. Les colonnes de taille du contenu ne sont pas nécessairement identiques : les dates contiennent des enregistrements différents. Le nombre de fichiers seul ne prouve pas que vous avez sélectionné la bonne date ; listez donc aussi la première date :

hdfs dfs -ls /user/labex/batch-inputs/raw/2026-10-14

Les deux entrées doivent montrer les noms de magasins attendus sous 2026-10-14. Quelques petits fichiers rendent cet exercice lisible. À une échelle bien supérieure, de nombreux fichiers minuscules imposent un surcoût de métadonnées à HDFS ; cela ne signifie pas que tous les petits fichiers doivent toujours être fusionnés.

Sélectionner et vérifier un lot

Dans cette étape, vous préparerez un manifeste exact pour le 14 octobre et comparerez le texte d’entrée à la livraison locale attendue.

Avant d’exécuter une commande, prévoyez quel répertoire doit figurer dans le manifeste : toute l’arborescence batch-inputs, toute l’arborescence raw ou uniquement raw/2026-10-14 ? Le répertoire limité à une date correspond au jour demandé et exclut la date suivante, l’aperçu CSV et les anciens résultats.

L’option HDFS -ls -C affiche les chemins sans les colonnes détaillées de la liste. Utilisez-la sur la date sélectionnée :

hdfs dfs -ls -C /user/labex/batch-inputs/raw/2026-10-14

Les deux chemins doivent se terminer par store-east.txt et store-west.txt. Pour faciliter la comparaison de la liste enregistrée, un pipeline du shell, écrit |, transmet la sortie de la première commande à une seconde commande. sort trie les lignes ; > enregistre le résultat localement :

hdfs dfs -ls -C /user/labex/batch-inputs/raw/2026-10-14 | sort > /home/labex/project/output/input-manifest.txt

Lisez votre manifeste :

cat /home/labex/project/output/input-manifest.txt

Chemins attendus :

/user/labex/batch-inputs/raw/2026-10-14/store-east.txt
/user/labex/batch-inputs/raw/2026-10-14/store-west.txt

Vous pouvez aussi utiliser un motif du côté HDFS. Les apostrophes conservent *.txt pour que le client HDFS, plutôt que votre shell local, recherche les chemins distants correspondants :

hdfs dfs -cat '/user/labex/batch-inputs/raw/2026-10-14/*.txt' > /home/labex/project/output/selected-input.txt

Pour ces noms de fichiers, HDFS lit le fichier east avant le fichier west. Enregistrez le texte local correspondant dans le même ordre explicite :

cat /home/labex/project/data/2026-10-14/store-east.txt /home/labex/project/data/2026-10-14/store-west.txt > /home/labex/project/output/expected-input.txt

Comparez les deux :

diff /home/labex/project/output/expected-input.txt /home/labex/project/output/selected-input.txt

Aucune différence ne doit apparaître. Pour une vérification supplémentaire, wc -l compte les lignes terminées par un saut de ligne dans chaque fichier :

wc -l /home/labex/project/output/selected-input.txt

Le résultat doit commencer par 3. Il s’agit de trois lignes de texte contenant cinq libellés de produits, et non de trois commandes commerciales. Le sens d’un enregistrement provient du format du fichier et de la tâche, pas de HDFS. Ensemble, votre manifeste, le contenu des fichiers et le nombre de lignes rendent explicite le choix des entrées.

Résumé

Vous avez séparé un aperçu CSV des fichiers de simples libellés de produits, conservé les entrées brutes de chaque date dans leur propre répertoire et sélectionné un lot à l’aide d’un manifeste. Vous avez vérifié les noms de fichiers et leurs contenus, au lieu de vous fier uniquement à un téléversement ou à un nombre de fichiers.

Dans le prochain défi, vous organiserez une nouvelle livraison en utilisant les compétences de gestion des fichiers et de sélection des entrées déjà pratiquées.