Aller au contenu

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 :

  1. Dans VS Code (sur ton OS), ouvre le fichier wc_mapper.py du dossier filesForTP/TP_Hadoop/wordcount/.
  2. Sauvegarde-le sous un nouveau nom : wc_mapper_improved.py. Fais pareil pour wc_reducer_improved.py.
  3. Dans le conteneur master, depuis ~/TP_Hadoop/wordcount/, la commande ls doit immédiatement faire apparaître les deux nouveaux fichiers. Aucun docker cp n’est nécessaire.

🐧 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 interpreter ou ^M à l’exécution. Convertis le fichier dans le conteneur :

dos2unix wc_mapper_improved.py wc_reducer_improved.py
Astuce : configure VS Code pour sauvegarder en LF par défaut (Settings → Files: Eol → \n). Tu n’auras plus jamais à faire dos2unix.

Rendez ces scripts exécutables :

chmod +x wc_mapper_improved.py wc_reducer_improved.py

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 :

    cd ~/TP_Hadoop/matrice/
    

  • Lancez le programme matrice.py pour générer 2 matrices et les sauvegarder sur disque (matriceA.txt et matriceB.txt). Les 2 matrices s’affichent ainsi que le résultat de leur multiplication :

    python matrice.py
    

  • Déposez les deux fichiers sur HDFS, dans le répertoire input :

    hadoop fs -put matriceA.txt input
    hadoop fs -put matriceB.txt input
    

✏ Exercice — Écrivez un script mapper et un script reducer permettant de réaliser la multiplication de ces 2 matrices, à partir des fichiers matriceA.txt et matriceB.txt.

Piste algorithmique

La formule de multiplication matricielle est :

\[C[i,k] = \sum_j A[i,j] \cdot B[j,k]\]

Comment l’adapter en MapReduce ?

  • Chaque ligne de matriceA.txt décrit un élément \(A[i,j]\) avec ses indices \(i\) et \(j\).
  • Chaque ligne de matriceB.txt dé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.py et multmat_reducer.py.
  • N’oublie pas la première ligne #!/usr/bin/env python3 et chmod +x dessus.
  • Utilisateurs Windows : dos2unix si nécessaire.

  • Pour lancer votre job sur le cluster Hadoop, adaptez la commande suivante :

    hadoop jar $STREAMINGJAR -files multmat_mapper.py,multmat_reducer.py \
        -mapper multmat_mapper.py -reducer multmat_reducer.py \
        -input input/matriceA.txt,input/matriceB.txt -output sortie
    

Contrôlez que le résultat obtenu est bien le même que celui affiché par le programme matrice.py.