TP 3 : MapReduce with python
Dans ce TP nous allons utiliser le cluster hadoop créé au TP2.
Etape 1 : Installer Python dans les nœuds
Ouvrez un terminal sur chaque nœud du cluster Hadoop et installez Python 3.
Pour ouvrir un shell Bash dans un cluster : docker exec -it hadoop-master bash
(remplacez "hadoop-master" par le nom du nœud que vous souhaitez ouvrir).
Pour installer Python 3 : apt update && apt upgrade && apt install python3.
Pour vérifier les noms des nœuds : docker ps ou ouvrez Docker Desktop sur
Windows/Mac.
Etape 2 : Tester en Locale
1. Création du fichier [Link] :
Créer un fichier [Link] contenant le code suivant :
#!/usr/bin/python3
# -*-coding:utf-8 -*
import sys
for line in [Link]:
line = [Link]()
words = [Link]()
for word in words:
print(word + "\t1")
2. Création du fichier [Link] :
Créer un fichier [Link] contenant le code suivant :
#!/usr/bin/python3
# -*-coding:utf-8 -*
from operator import itemgetter
import sys
current_word = None
current_count = 0
word = None
for line in [Link]:
line = [Link]()
word, count = [Link]('\t', 1)
try:
count = int(count)
except ValueError:
continue
if current_word == word:
current_count += count
else:
if current_word:
print(current_word + "\t" + str(current_count))
current_count = count
current_word = word
if current_word == word:
print(current_word + "\t" + str(current_count))
3. Tester en local :
Pour tester localement, utilisez un éditeur de texte comme le Bloc-notes pour
créer un fichier texte nommé [Link] dans le même répertoire que vos scripts
[Link] et [Link]. Ajoutez-y quelques lignes de texte.
Utilisez la commande suivante pour lire le contenu du fichier [Link], le passer
à [Link], trier les résultats, puis les passer à [Link] :
type [Link] | python [Link] |sort| python [Link]
Etape 3 : Copier les fichiers dans le nœud maitre:
Copiez votre [Link] et [Link] dans le nœud maître Hadoop :
Remplacer l’ID eff4f966c9ef par celui de votre nœud maître.
docker cp [Link] eff4f966c9ef:MapReduceTut/[Link]
docker cp [Link] eff4f966c9ef:MapReduceTut/[Link]
Etape 4 : Exécution de MapReduce
Entrer dans le contenaire master :
docker exec -it hadoop-master bash
Créer un répertoire dans HDFS, appelé input. Et charger le fichier [Link]
dans ce répertoire.
hdfs dfs -mkdir input
hdfs dfs -put [Link] input
Exécuter MapReduce en utilisant le script suivant :
mapred streaming \
-input input/[Link] \
-output output \
-mapper "python3 [Link]" \
-reducer "python3 [Link]" \
-file /MapReduceTut/[Link] \
-file /MapReduceTut/[Link]
Application :
Ecrire un job Map Reduce permettant, à partir du fichier purchases initial, de
déterminer le total des ventes par magasin. Il est à noter que la structure du fichier
purchases est de la forme suivante :
Veiller à toujours tester votre code en local avant de lancer un job sur le cluster.