Aller au contenu

Install MrJob


Installation et test de la librairie MrJob

Il s’agit ici d’exécuter l’exemple de script, vu en cours, permettant de compter les mots d’un livre en utilisant la librairie MRJob. Ici, on travaille sur sa propre machine, en local (et non pas sur le cluster Hadoop).

Vérifiez votre version de Python

MrJob 0.7.4 est testé et fonctionnel sur Python 3.9 à 3.11. Vérifiez d’abord votre version :

python3 --version
Si plusieurs versions de Python coexistent sur votre machine (via pyenv, Homebrew, Anaconda, etc.), utilisez explicitement une version compatible — par exemple python3.11 -m pip install mrjob, puis remplacez python3 par python3.11 dans tous les exemples qui suivent.

Commencez par installer cette librairie :

python3 -m pip install mrjob

Statut de la librairie

MrJob n’est plus activement maintenu depuis 2020 (version 0.7.4, release du 17 septembre 2020), mais reste pleinement fonctionnel sur Python 3.9–3.11. C’est une excellente librairie pédagogique pour apprendre le MapReduce en Python pur avant de passer à des frameworks plus récents (Spark).

Créez un répertoire sur votre DD, et déposez-y les 2 scripts vus en cours ainsi que le fichier dracula :

Test de wc_mrjob_1.py

python3 wc_mrjob_1.py < dracula > resultInline.txt
Vérifiez, avec la commande cat resultInline.txt que le fichier contient bien le résultat escompté. Les symboles < et > sont des redirections en entrée et en sortie respectivement. Cette commande est identique à
python3 wc_mrjob_1.py -r inline < dracula > resultInline.txt
le mode inline précisant que le job est lancé sur un seul process pour réaliser des tests.

Pour lancer le job sur plusieurs sous-process concurrents (en utilisant les différents cœurs de votre processeur), il faut utiliser le mode local :

python3 wc_mrjob_1.py -r local < dracula > resultLocal.txt

Test de wc_mrjob_2.py

Ce second script illustre deux fonctionnalités avancées de MrJob : le mapper accumule des compteurs dans __init__ sans rien émettre ligne par ligne, puis les émet d’un coup via mapper_final() une fois toutes les lignes traitées.

python3 wc_mrjob_2.py < dracula

La sortie doit afficher trois valeurs : le nombre de caractères, de mots et de lignes du fichier.