Lab Hadoop : HDFS et MapReduce, avec un fichier à déposer et un comptage de mots à lire

Ce lab donne à chaque élève un petit cluster Hadoop à lui : HDFS, le système de fichiers distribué, avec un NameNode et un DataNode, et YARN, avec un ResourceManager et un NodeManager, pour exécuter des jobs MapReduce. Au démarrage, le cluster exécute le comptage de mots de Hadoop sur une phrase d’exemple ; l’élève dépose un fichier à lui dans HDFS, le liste, le relit et lit le comptage de mots.

C’est l’image du projet Apache elle-même, exécutée sans modification : il n’y a rien de vulnérable à attaquer, seulement un système à explorer. La copie du lab n’a aucun accès à internet ni à aucun autre élève.

Ce que les élèves apprennent

Comment un système de données massives stocke et traite les données. Un fichier est conservé par deux sortes de machines : le NameNode, qui sait quels blocs forment quel fichier, et le DataNode, qui détient les octets. Écrire un fichier se fait en deux requêtes, le NameNode choisissant un DataNode et le DataNode recevant les données, et l’élève le voit lui-même avec curl. Il lit ensuite le résultat d’un comptage de mots MapReduce, une ligne par mot avec son nombre d’occurrences, et voit le job listé comme terminé dans YARN. Il convient aux unités de données, de cloud, de big data et de systèmes répartis ; vérifiez le libellé exact dans le programme de votre organisme certificateur.

Le lancer dans votre navigateur

Le lab a cinq services : namenode, datanode, resourcemanager, nodemanager et client. Le terminal du lab n’a pas de commande hadoop : il parle à HDFS en HTTP avec curl. WebHDFS est à http://namenode:9870/webhdfs/v1/ et la liste des jobs à http://resourcemanager:8088/ws/v1/cluster/apps. Au démarrage, le cluster a compté les mots d’une phrase d’exemple et a laissé le résultat dans /user/lab/wordcount-out ; ce comptage-là, l’élève ne le lance pas. Pour lancer un job MapReduce sur son propre fichier, il utilise docker exec client hadoop jar dans le terminal, le service client étant l’endroit où se trouve la commande hadoop. Rien n’est conservé quand le lab s’arrête, et il démarre en une minute environ.

  1. Ouvrir la page Conteneur. Ouvrez « Créer » dans la barre et choisissez « Lancer un conteneur ». Tout le monde peut ouvrir la page, et le lab Git et le lab SQL se lancent sans compte. Tous les autres labs demandent un compte gratuit : créez-en un, connectez-vous, puis appuyez sur « Démarrer ».
  2. Trouver le lab. La carte « Laboratoires d’exemple » liste tous les exemples. Trouvez Hadoop: HDFS and MapReduce.
  3. Appuyer sur Démarrer. « Démarrer » le lance tel quel, en un clic. « Modifier le fichier d’abord » ouvre le fichier compose pour que vous puissiez le changer avant de démarrer.
  4. L’ouvrir. Sur la page du lab, la barre du lab a deux liens, HDFS NameNode, the page that lists every file, et YARN ResourceManager, the page that lists the jobs. Dans la page du NameNode, choisissez Utilities, puis Browse the file system, et ouvrez /user/lab. Dans le terminal à côté du lab, curl http://namenode:9870/webhdfs/v1/user/lab/input?op=LISTSTATUS liste le même dossier, et curl -L avec op=OPEN sur /user/lab/wordcount-out/part-r-00000 affiche le comptage de mots.

Que demander aux élèves de rendre

Le chemin d’un fichier qu’ils ont déposé dans HDFS, les lignes du comptage de mots que MapReduce en a tiré, et une phrase sur ce que font le NameNode et le DataNode. Chaque élève peut choisir son propre texte : les réponses diffèrent. Pour un travail plus poussé, demandez pourquoi un fichier se lit en deux requêtes, et pourquoi un vrai cluster garde trois copies de chaque bloc quand celui-ci n’en garde qu’une.

Rien n’est noté automatiquement. Les limites du lab valent la peine d’être dites : il n’a qu’un DataNode et qu’un NodeManager, il montre donc comment Hadoop est organisé mais pas comment il survit à la panne d’une machine ni comment il accélère un gros job, et les permissions sont désactivées.

Une leçon de base sur ce lab

Hadoop Basics est une petite leçon qui se fait dans ce lab, chaque étape étant expliquée, avec un bouton Run qui tape sa commande dans le terminal de l’élève. Elle dépose dans HDFS avec curl un fichier d’une phrase, le liste et le relit, puis lit le comptage de mots fait par le cluster et demande au ResourceManager comment le job s’est passé.

Un compte personnel gratuit la reçoit dans le module Basics, qui se trouve sur « Accueil », chaque établissement peut la copier depuis le dossier Basics de la Bibliothèque, et un nouvel établissement l’a dans un module appelé Lab Basics (Sample). Elle est volontairement petite : elle montre à un enseignant ce qu’est une leçon faite dans un lab, et le lab fait le reste. Copiez-la dans un module à vous pour la modifier.

Le code sur GitHub

Le fichier compose exécute cinq fois une image publique, apache/hadoop fixée à 3.4.1 et exécutée sans modification. Apache Hadoop est sous licence Apache 2.0, et nous ne le distribuons pas. Chaque service écrit sa configuration au démarrage, les tas sont réduits au minimum et le job s’exécute comme un seul petit job : une copie tient donc dans la mémoire de la plateforme. Le test du dépôt déroule le parcours d’un élève, dont un fichier écrit, relu et compté, sous les mêmes limites que celles que la plateforme applique.

En faire un travail

Indiquez dans la tâche quel fichier déposer dans HDFS et ce qu’il faut rendre.

  1. Créer le lab. Dans votre module, ajoutez une tâche et choisissez la carte « Lab de conteneurs », puis « Dans un dépôt GitHub ». Indiquez https://github.com/mitsurutech/lab-hadoop avec la branche main. Le fichier compose par défaut est compose.yaml. Faites d’abord un fork du dépôt si vous voulez le modifier.
  2. Publier et l’essayer. « Publier » fige le commit qui vous a été montré : un changement ultérieur dans le dépôt ne modifie donc pas un lab que vous avez déjà proposé. Démarrez d’abord votre propre copie.
  3. Le distribuer. Attribuez-le comme n’importe quelle tâche, avec une échéance si vous le souhaitez, et indiquez dans la tâche ce qu’il faut faire et ce qu’il faut rendre.
  4. Noter ce qui est rendu. Ouvrez la copie d’un élève et le travail rendu, notez-le et renvoyez-le avec un motif s’il demande un complément.

Questions fréquentes

Pourquoi ne puis-je pas lire un fichier dans la page du NameNode ?
La page du NameNode liste les fichiers et les dossiers, mais les octets d’un fichier sont sur le DataNode, et le navigateur y est envoyé pour les lire, ce qu’une copie de lab n’ouvre pas. Lisez plutôt un fichier avec curl -L et op=OPEN dans le terminal : le -L suit la redirection du NameNode vers le DataNode.
Les fichiers sont-ils conservés quand le lab est arrêté ?
Non. HDFS garde ses données dans les conteneurs du lab : un lab arrêté repart vide et le comptage de mots d’exemple est refait. Demandez aux élèves de rendre ce qu’ils ont fait avant de l’arrêter.
Le lab Hadoop note-t-il automatiquement le comptage de mots ?
Non. Rien n’est noté automatiquement : demandez aux élèves de rendre le chemin du fichier déposé dans HDFS et les lignes du comptage de mots qui en est tiré. Une phrase sur ce que font le NameNode et le DataNode montre s’ils l’ont compris.