Vous êtes sur la page 1sur 5

Institut supérieur d’informatique Année Universitaire 2023-2024

MODULE : Frameworks et BigData


TP 1 : INITIATION A HADOOP ET MAP-REDUCE
Niveau : L3CS

1. HADOOP
1.1 Présentation

Hadoop est un Framework logiciel open source permettant de stocker des données, et de lancer des
applications sur des grappes de machines standards. Cette solution offre un espace de stockage massif
pour tous les types de données, une immense puissance de traitement et la possibilité de prendre en
charge une quantité de tâches virtuellement illimitée. Basé sur Java, ce Framework fait partie du projet
Apache, sponsorisé par Apache Software Foundation.

Figure 1 Hadoop

1.2 Installation

Pour VMware Workstation player sous Windows est téléchargeable à partir de cette adresse :

https://www.vmware.com/go/getplayer-win
Pour VMware Workstation player sous linux est téléchargeable à partir de cette adresse :

https://www.vmware.com/go/getplayer-linux
La machine virtuelle est téléchargée à l’adresse :

https://downloads.cloudera.com/demo_vm/vmware/cloudera-quickstart-vm-5.12.0-0-
vmware.zip
Pour les besoins du TP :
• Démarrer votre machine virtuelle et lancer un terminal
• Créer un répertoire TP, puis deux sous-répertoires code et data dans lesquels on sauvegardera
respectivement les codes de nos mappers et reducers, et les données sources et résultat.
• Déplacez-vous sous le répertoire ~/TP/data, et y importer le fichier purchases.txt.

1.3 Premiers Pas avec Hadoop

Toutes les commandes interagissant avec le système Hadoop commencent par hadoop fs. Ensuite,
les options rajoutées sont très largement inspirées des commandes Unix standard.

- Créer un répertoire dans HDFS, appelé input. Pour cela, taper :


hadoop fs –mkdir input

1
- Pour copier le fichier purchases.txt dans HDFS sous le répertoire input, taper la commande :
hadoop fs –put purchases.txt input/
- Pour afficher le contenu du répertoire input, la commande est :
hadoop fs –ls input
On obtiendra alors le résultat suivant :

Pour visualiser les dernières lignes du fichier, taper :

hadoop fs –tail input/purchases.txt


On obtient alors :

Dans le tableau suivant, nous résumons les commandes les plus utilisées dans Hadoop :

Activité 1 :
Tester les différentes fonctions citées ci-dessus
2. Map Reduce
2.1 Présentation

2
MapReduce est un Framework de traitement de données en clusters. Composé des fonctions Map et
Reduce, il permet de répartir les tâches de traitement de données entre différents noeuds, pour
ensuite réduire les résultats en une seule synthèse.
- Les Mappers : permettent d’extraire les données nécessaires sous forme de clef/valeur, pour pouvoir
ensuite les trier selon la clef
- Les Reducers : prennent un ensemble de données triées selon leur clef, et effectuent le traitement
nécessaire sur ces données (somme, moyenne, total…)

2.2. Mapper
Pour notre TP, nous utilisons le langage Python pour développer les Mappers et les Reducers. Les
traitements intermédiaires (comme le tri par exemple) sont effectués automatiquement par Hadoop.
Soit un fichier de log comportant 6 champs, séparés par des tabulations. Le Mapper doit :
- Séparer les différents champs par tabulation
- Extraire les éléments voulus à partir de ces champs, sous forme de clef/valeur

Pour le premier exercice nous travaillons avec le fichier purchases.txt qui contient les ventes de tous
les magasins comme suit :

Comme vous pouvez constater ce fichier contient les champs suivants :

Date Temps Magasin Produit Cout Paiement

Notre but est de déterminer le total des ventes par magasin, pour le fichier « purchases.txt »
Pour calculer les ventes par magasin, le couple (clef, valeur) à extraire est (magasin, coût). Pour faire
cela, le code du Mapper est le suivant :

#!/usr/bin/python
import sys
for line in sys.stdin:
data = line.strip().split("\t")
if len(data) == 6:
date, time, store, item, cost, payment = data
print "{0}\t{1}".format(store, cost)

3
Activité 2 : Créer d’abord un fichier mapper.py dans le répertoire code, dans lequel vous écrirez le
code présenté plus haut. Étudier ensuite ce que vous venez d’écrire.
- Que permet de faire chaque ligne de ce code ?
- Tester ce mapper en local sur les 50 premières lignes du fichier purchases.txt en tapant

L’instruction suivante, directement à partir de votre répertoire code :


head -50 ../data/purchases.txt | ./mapper.py

2.3. Reducer
Le Reducer permet de faire le traitement désiré sur des entrées sous forme de clef/valeur,
préalablement triées par Hadoop (on n’a pas à s’occuper du tri manuellement).
Dans l’exemple précédent, une fois que le Mapper extrait les couples (store, cost), le Reducer aura
comme tâche de faire la somme de tous les coûts pour un même magasin. Le code du Reducer est le
suivant :

#!/usr/bin/python
import sys
salesTotal = 0
oldKey = None
for line in sys.stdin:
data_mapped = line.strip().split("\t")
if len(data_mapped) != 2:
# Something has gone wrong. Skip this line.
continue
thisKey, thisSale = data_mapped
if oldKey and oldKey != thisKey:
print oldKey, "\t", salesTotal
oldKey = thisKey;
salesTotal = 0
oldKey = thisKey
salesTotal += float(thisSale)
if oldKey != None:
print oldKey, "\t", salesTotal

Activité 3 : Créer d’abord un fichier Reducer.py dans le répertoire code, dans lequel vous écrirez le
code présenté plus haut.
- Tester ce reducer en local en tapant
head -50 ../data/purchases.txt |./mapper.py |sort |./reducer.py
2.4. Lancer un Job entier
Lancer un job entier sur Hadoop implique qu’on fera appel au mapper puis au reducer sur une entrée
volumineuse, et obtenir à la fin un résultat, directement sur HDFS. Pour faire cela, l’instruction à
exécuter est :

hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-mr1.jar -


input purchases.txt -output joboutput -mapper mapper.py -reducer reducer.py -file
mapper.py -file reducer.py
Cette instruction donne en paramètres les fichiers correspondant aux Mappers et Reducers, et les
répertoires contenant le fichier d’entrée (input) et la sortie à générer (joboutput). Le répertoire de
sortie, après exécution, contiendra un fichier appelé part-00000, représentant la sortie désirée.

Pour vérifier les résultats obtenus exécuter la commande suivante :

4
hadoop fs -cat joboutput/part-00000
Pour déplacer le résultat de HDFS au local exécuter la commande suivante :

hadoop fs -get joboutput/part-00000


Le répertoire d’entrée doit contenir un seul fichier. Le répertoire de sortie ne doit pas exister avant
l’exécution de l’instruction.

Activité 4 :
- Exécuter un job hadoop sur le fichier purchases.txt en utilisant les fichiers mapper.py et reducer.py
déjà fournis. Stocker le résultat dans un répertoire joboutput. Sauvegarde ensuite le fichier part-
00000 dans votre répertoire local.
- Quelle est la totalité des ventes du magasin de Buffalo ?
3. Application
Nous continuons à travailler avec le même fichier en entrées (purchases.txt), mais pour obtenir des
résultats différents. Le but est donc d’écrire vos propres Mappers et Reducers.
Activité 5 :
- Donner la somme des ventes par catégorie de produits.
- Quelle est la valeur des ventes pour la catégorie Toys ?
- Et pour la catégorie Consumer Electronics ?
Activité 6 :
Donner le montant de la vente le plus élevé pour chaque magasin
- Quelle est cette valeur pour les magasins suivants :
• Reno
• Toledo
• Chandler

Ce TP est issu des travaux de Mme Lilia SFAXI (INSAT) et M. Amine MAAMOURI (ISI)

Vous aimerez peut-être aussi