Exercice
Table des Matières
Tests et exercice¶
1. wordcount improved!¶
Vous allez ici utiliser les scripts améliorés rédigés durant la première partie du TP (la version qui ignore la casse et les ponctuations).
Grâce au bind mount mis en place par docker compose, le dossier filesForTP/TP_Hadoop/wordcount/ du repo (sur ta machine) est exactement le même que /root/TP_Hadoop/wordcount/ dans le conteneur. Concrètement :
- Dans VS Code (sur ton OS), ouvre le fichier
wc_mapper.pydu dossierfilesForTP/TP_Hadoop/wordcount/. - Sauvegarde-le sous un nouveau nom :
wc_mapper_improved.py. Fais pareil pourwc_reducer_improved.py. - Dans le conteneur master, depuis
~/TP_Hadoop/wordcount/, la commandelsdoit immédiatement faire apparaître les deux nouveaux fichiers. Aucundocker cpn’est nécessaire.
Astuce : configure VS Code pour sauvegarder en LF par défaut (
Remarque pour les utilisateurs de Windows — Si tu modifies tes scripts sous Windows et que ton éditeur enregistre en CRLF (au lieu de LF), tu obtiendras des erreurs
bad interpreterou^Mà l’exécution. Convertis le fichier dans le conteneur :Settings → Files: Eol → \n). Tu n’auras plus jamais à fairedos2unix.
Rendez ces scripts exécutables :
Vous pouvez maintenant relancer un job Hadoop streaming avec ces nouveaux scripts (n’oubliez pas de supprimer le dossier sortie au préalable) :
hadoop fs -rm -r -f sortie
hadoop jar $STREAMINGJAR -files wc_mapper_improved.py,wc_reducer_improved.py \
-mapper wc_mapper_improved.py -reducer wc_reducer_improved.py \
-input input/dracula -output sortie
2. Multiplication de 2 “grandes” matrices avec Hadoop¶
-
Déplacez-vous dans le répertoire
matrice: -
Lancez le programme
matrice.pypour générer 2 matrices et les sauvegarder sur disque (matriceA.txtetmatriceB.txt). Les 2 matrices s’affichent ainsi que le résultat de leur multiplication : -
Déposez les deux fichiers sur HDFS, dans le répertoire
input:
Exercice — Écrivez un script mapper et un script reducer permettant de réaliser la multiplication de ces 2 matrices, à partir des fichiers
matriceA.txtetmatriceB.txt.
Piste algorithmique
La formule de multiplication matricielle est :
Comment l’adapter en MapReduce ?
- Chaque ligne de
matriceA.txtdécrit un élément \(A[i,j]\) avec ses indices \(i\) et \(j\). - Chaque ligne de
matriceB.txtdécrit un élément \(B[j,k]\) avec ses indices \(j\) et \(k\). - La clé partagée entre A et B est l’indice j (colonne de A = ligne de B).
Réfléchissez à ce que le mapper doit émettre comme paires (clé, valeur) pour que le reducer puisse rassembler toutes les contributions à un même \(C[i,k]\).
Conseils pour rédiger les scripts :
- Édite tes scripts directement dans VS Code, dans
filesForTP/TP_Hadoop/matrice/du repo. Ils apparaîtront tout de suite dans le conteneur grâce au bind mount. - Nomme-les par exemple
multmat_mapper.pyetmultmat_reducer.py. - N’oublie pas la première ligne
#!/usr/bin/env python3etchmod +xdessus. -
Utilisateurs Windows :
dos2unixsi nécessaire. -
Pour lancer votre job sur le cluster Hadoop, adaptez la commande suivante :
Contrôlez que le résultat obtenu est bien le même que celui affiché par le programme matrice.py.