Votre premier lab Hadoop

Big DataBeginner
Pratiquer maintenant

Introduction

Vous aidez un commerçant à répondre à une question simple : Quels produits apparaissent le plus souvent dans les relevés quotidiens de nos magasins ? Avant de compter quoi que ce soit, vous devez rassembler les fichiers et vous assurer que leur contenu est disponible et correct. Ce lab constitue votre première étape.

Des données quotidiennes au big data

Un magasin peut conserver ses relevés quotidiens dans un petit fichier que vous pouvez ouvrir sur un ordinateur portable. Imaginez maintenant des milliers de magasins envoyant leurs relevés chaque jour, en plus de l’activité du site web et des mises à jour des entrepôts. Vous devez conserver davantage de données, de nouvelles données arrivent continuellement et les fichiers peuvent avoir des structures différentes.

Le big data désigne des charges de travail dont le volume, le rythme d’arrivée ou la complexité rendent le traitement difficile avec les outils et les ressources dont vous disposez. Aucun nombre universel de lignes ne transforme un fichier en big data. Les questions pratiques sont les suivantes : pouvez-vous stocker les données, les traiter dans le temps disponible et continuer à travailler en cas de panne matérielle ?

Pour un petit fichier de ventes, un tableur, une base de données ou un script Python peuvent suffire. Lorsque les charges de travail augmentent, une approche consiste à répartir le stockage et le traitement entre plusieurs ordinateurs connectés. Un ensemble d’ordinateurs travaillant ensemble s’appelle un cluster ; répartir le travail entre eux relève du calcul distribué.

Le rôle de Hadoop

Apache Hadoop est un ensemble d’outils open source permettant de stocker et de traiter des données sur un cluster. Deux composants donnent une première vue utile :

Composant Son rôle La question du commerçant
HDFS — Hadoop Distributed File System, système de fichiers distribué Hadoop Stocker les fichiers sur plusieurs machines et conserver des copies de leurs données lorsque la configuration le prévoit Où conserver les fichiers d’entrée quotidiens ?
MapReduce — un framework de traitement par lots Diviser un traitement en tâches plus petites et combiner leurs résultats Comment compter les libellés de produits dans ces fichiers ?

Un lot est un ensemble délimité de données traitées ensemble, par exemple les fichiers d’hier. Dans les prochains labs, vous exécuterez un programme de comptage prêt à l’emploi. Dans ce lab, vous utiliserez HDFS, la partie stockage : un calcul n’est utile que s’il lit les données prévues.

Hadoop fait partie d’un écosystème plus vaste d’outils de données. Les cours suivants présentent Hive pour interroger des fichiers en SQL, Spark pour programmer des traitements de données et Kafka pour transmettre des événements en continu. Vous n’avez pas besoin de ces outils pour commencer ce lab, ni de mémoriser leurs noms dès maintenant.

Votre première partie du flux de travail

Voici le flux de travail simplifié du commerçant :

Rassembler les fichiers produits → Les stocker dans HDFS → Traiter un lot → Examiner les comptages
                                  Vous commencez ici

Votre tâche consiste à téléverser un fichier, à le relire et à vérifier que son contenu a été conservé. C’est comme vérifier un ingrédient avant de l’utiliser dans une recette : un stockage correct précède un calcul fiable.

Le lab fournit Hadoop sur une seule machine pour vous permettre d’apprendre de véritables commandes HDFS sans installer de cluster. Dans cet environnement, les fichiers locaux et les fichiers HDFS ont toujours des chemins et des commandes d’accès distincts. Cette configuration ne montre ni le stockage réparti sur plusieurs machines, ni la récupération après la panne d’une machine ; vous comprendrez mieux ces notions en explorant HDFS par la suite.

À la fin de ce lab, vous saurez :

  • Distinguer un fichier local d’un fichier stocké dans HDFS.
  • Créer un répertoire HDFS et téléverser un fichier.
  • Lire un fichier HDFS et le comparer à l’original local.
  • Téléverser les mêmes données sous un autre nom de destination.

Utilisez l’onglet Terminal tout au long de ce lab. Seules des connaissances de base du terminal sont nécessaires ; aucune programmation Java ou Python n’est requise. Si les chemins et les commandes du terminal sont nouveaux pour vous, commencez par le parcours d’apprentissage Linux.

Téléverser votre premier fichier dans HDFS

Dans cette étape, vous examinerez un fichier local, créerez votre propre répertoire HDFS et y téléverserez le fichier.

Le terminal est l’endroit où vous saisissez vos requêtes. La commande hdfs est un client : elle transmet ces requêtes au service HDFS en cours d’exécution, qui gère les fichiers stockés. Vous verrez ci-dessous des commandes Linux locales et des commandes HDFS ; la commande vous indique quel stockage vous utilisez.

Le lab a déjà démarré les services HDFS et préparé un petit fichier d’entrée. Cliquez dans le Terminal et exécutez chaque commande ci-dessous, en attendant le retour de l’invite avant de continuer. Copiez uniquement la commande, sans les symboles d’invite.

Utilisez cd pour placer votre shell dans le répertoire local du projet :

cd /home/labex/project

Le chemin commence par / : c’est donc un chemin absolu. Votre fichier d’entrée local se trouve dans le répertoire data situé à cet emplacement. La commande Linux habituelle cat affiche un fichier local :

cat /home/labex/project/data/products.txt

Contenu attendu :

notebook pen notebook
folder pen
notebook folder

Chaque mot est un libellé de produit, et chaque occurrence représente un article enregistré dans cet exemple simplifié. Vous pouvez déjà compter à la main cinq occurrences de notebook et pen au total : trois carnets et deux stylos. Sur de nombreux fichiers volumineux, un programme de traitement par lots pourrait effectuer ce comptage à votre place.

Pour le moment, gardez la question à l’esprit, mais concentrez-vous sur le stockage du texte à l’identique. Nous utilisons trois lignes lisibles pour que vous puissiez reconnaître immédiatement un résultat correct ; cet exemple en lui-même ne nécessite pas Hadoop.

HDFS possède sa propre arborescence de répertoires. Dans cet environnement, hdfs dfs envoie des commandes de système de fichiers à HDFS. Créer un répertoire local avec la commande Linux mkdir ne créerait pas de répertoire HDFS.

Créez un répertoire sous votre répertoire personnel HDFS, /user/labex. L’opération -mkdir crée un répertoire ; -p crée aussi les répertoires parents manquants et accepte un répertoire qui existe déjà :

hdfs dfs -mkdir -p /user/labex/your-first-hadoop-lab

En cas de réussite, aucune sortie n’est normalement affichée. L’invite réapparaît lorsque l’opération se termine. Ce répertoire se trouve dans HDFS, même si son chemin utilise les mêmes barres obliques qu’un chemin local.

L’opération -put copie un fichier source local vers une destination HDFS. Le premier chemin ci-dessous est local ; le second est dans HDFS :

hdfs dfs -put /home/labex/project/data/products.txt /user/labex/your-first-hadoop-lab/products.txt

Un téléversement réussi n’affiche normalement aucune sortie et conserve l’original local. Si vous répétez cette commande après un téléversement réussi, HDFS signale que la destination existe déjà. Poursuivez en l’examinant ; vous n’avez pas besoin de la supprimer ni de l’écraser.

Utilisez -ls pour lister le répertoire HDFS :

hdfs dfs -ls /user/labex/your-first-hadoop-lab

Vous devriez voir Found 1 items et une entrée de fichier se terminant par :

/user/labex/your-first-hadoop-lab/products.txt

L’entrée indique également les permissions, le propriétaire, le groupe, la taille et la date de modification. Vous explorerez ces détails plus tard. Pour cette étape, le chemin de destination confirme la présence du fichier dans HDFS. Vous vérifierez ensuite son contenu.

Relire et vérifier le contenu

Dans cette étape, vous lirez le fichier HDFS, enregistrerez son contenu localement et le comparerez à l’original.

Le commerçant finira par compter les libellés du fichier stocké. Si le téléversement utilise le mauvais fichier ou perd une ligne, les comptages suivants risquent d’être incorrects, même si le programme s’exécute correctement. La liste d’un répertoire prouve qu’un fichier existe, mais pas que son contenu est correct.

Avant de le relire, prévoyez ce que vous devriez voir : le téléversement doit-il modifier des libellés de produits ou supprimer des lignes ? L’opération HDFS -cat lit un fichier dans HDFS et affiche son contenu dans votre terminal :

hdfs dfs -cat /user/labex/your-first-hadoop-lab/products.txt

Contenu attendu :

notebook pen notebook
folder pen
notebook folder

Comparez-le au fichier local examiné à l’étape 1. Les mots et les sauts de ligne doivent correspondre. Notez la différence entre les commandes : cat lit le fichier local, tandis que hdfs dfs -cat lit le fichier HDFS dans cet environnement.

Pour conserver une copie locale du résultat de la relecture, utilisez l’opérateur > du shell. Il redirige la sortie affichée par la commande vers un fichier local, en créant ce fichier ou en remplaçant son contenu existant. Le répertoire output préparé est destiné à vos résultats :

hdfs dfs -cat /user/labex/your-first-hadoop-lab/products.txt > /home/labex/project/output/products-readback.txt

Cette fois, aucun texte de produit n’apparaît dans le terminal, car il a été écrit dans le fichier de sortie local. La source HDFS reste inchangée. Lisez le résultat enregistré avec la commande locale cat :

cat /home/labex/project/output/products-readback.txt

Vous devriez retrouver les trois mêmes lignes. Vous disposez maintenant d’un original local, d’un fichier HDFS et d’un fichier local issu de la relecture.

Utilisez diff pour comparer l’original et le résultat enregistré. Lorsque deux fichiers sont identiques, diff n’affiche rien et se termine avec succès :

diff /home/labex/project/data/products.txt /home/labex/project/output/products-readback.txt

Le retour de l’invite sans différence affichée confirme que le contenu relu correspond à l’original. Si des différences apparaissent, répétez la commande de relecture en utilisant exactement les chemins de source HDFS et de sortie locale ci-dessus, puis comparez à nouveau.

S’exercer avec un nouveau nom de destination

Dans cette étape, vous modifierez une partie de la commande de téléversement et vérifierez si le contenu du fichier change.

Avant d’exécuter la commande suivante, prévoyez le résultat : si vous conservez la source locale et changez uniquement le nom du fichier de destination HDFS, les libellés de produits changeront-ils ? Le premier fichier HDFS existera-t-il toujours ?

Téléversez à nouveau le fichier local original, cette fois sous le nom de destination products-copy.txt :

hdfs dfs -put /home/labex/project/data/products.txt /user/labex/your-first-hadoop-lab/products-copy.txt

Comme précédemment, un téléversement réussi n’affiche normalement aucune sortie. Si vous avez déjà effectué ce téléversement, un message indiquant que la destination existe signifie que vous devez examiner le fichier plutôt que le téléverser à nouveau.

Listez le répertoire HDFS pour vérifier votre prévision :

hdfs dfs -ls /user/labex/your-first-hadoop-lab

Vous devriez maintenant voir Found 2 items, avec des entrées se terminant par ces chemins :

/user/labex/your-first-hadoop-lab/products-copy.txt
/user/labex/your-first-hadoop-lab/products.txt

Les deux fichiers restent présents, car -put copie la source locale vers la destination nommée ; il ne renomme pas le fichier HDFS précédent. Ce second fichier est une copie d’exercice des mêmes relevés, et non les ventes d’une nouvelle journée. Lorsque vous apprendrez à préparer les entrées d’un lot, vous choisirez soigneusement les fichiers pour ne pas compter deux fois les copies en double.

Lisez le nouveau fichier HDFS :

hdfs dfs -cat /user/labex/your-first-hadoop-lab/products-copy.txt

La sortie doit contenir les trois mêmes lignes de libellés de produits. Modifier le nom d’un fichier ne modifie pas son contenu.

Utilisez la même méthode de relecture pour enregistrer le nouveau fichier localement :

hdfs dfs -cat /user/labex/your-first-hadoop-lab/products-copy.txt > /home/labex/project/output/products-copy-readback.txt

Comparez ce résultat enregistré à l’original :

diff /home/labex/project/data/products.txt /home/labex/project/output/products-copy-readback.txt

Aucune différence ne doit s’afficher. Vous avez vérifié les deux parties de votre prévision : le premier fichier HDFS est toujours présent et le second contient des données identiques.

Avant de continuer, identifiez les commandes qui lisent des fichiers locaux et celles qui lisent des fichiers HDFS. Dans le prochain lab, vous examinerez la configuration qui indique aux commandes HDFS où se connecter.

Résumé

Vous êtes parti du besoin d’un commerçant de rassembler et de compter les relevés de produits. Vous avez découvert pourquoi la croissance des charges de données peut nécessiter un stockage et un traitement distribués, et quel est le rôle de Hadoop : HDFS stocke les fichiers, tandis que MapReduce peut traiter un lot.

Vous avez réalisé la partie stockage de ce flux de travail : vous avez téléversé un fichier texte de vente local dans HDFS, l’avez relu et avez utilisé diff pour confirmer la conservation de son contenu. Vous avez ensuite prévu et vérifié l’effet d’un changement limité au nom de destination HDFS.

Vous vous êtes exercé à utiliser hdfs dfs -mkdir -p, -put, -ls et -cat, et avez distingué ces opérations HDFS de la commande locale cat et de la redirection de sortie du shell. Vous explorerez ensuite comment le client Hadoop trouve HDFS et comment le stockage et le calcul s’articulent.