0% ont trouvé ce document utile (0 vote)
33 vues5 pages

TP MapReduce

Transféré par

salma ben hssin
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
33 vues5 pages

TP MapReduce

Transféré par

salma ben hssin
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TP : Map Reduce & Hadoop

Apache Hadoop est un framework open-source pour stocker et traiter les données
volumineuses sur un cluster. Il est utilisé par un grand nombre de contributeurs et utilisateurs.
Il a une licence Apache 2.0.

Ce TP est inspiré de la formation “Intro to Hadoop and Map Reduce” fait par Cloudera et
publié sur Udacity. Ils fournissent une machine virtuelle où Hadoop, ainsi qu’un grand
nombre d’outils de son écosystème, sont préinstallés. (Visiter le lien
https://www.udacity.com/wiki/ud617)

I. Premiers pas avec Hadoop


La machine virtuelle «Cloudera-Udacity-Training-VM-4.1.1.c.zip » est téléchargée à partir de
la clé partagée pendant la séance, C'est une machine Linux, distribution CentOS.

 Démarrer votre machine virtuelle et lancer un terminal


 Sous le répertoire ~/udacity_training, vous trouverez deux sous-répertoires: code et
data dans lesquels on trouvera et 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 ~/udacity_training/data, et vérifier que le fichier
purchases.txt existe bien.

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.

Le tableau suivant résume les commandes les plus utilisées dans Hadoop:

hadoop fs –ls Afficher le contenu du répertoire racine


hadoop fs –put file.txt Upload un fichier dans hadoop (à partir du répertoire courant linux)

hadoop fs –get file.txt Download un fichier à partir de hadoop sur votre disque local

hadoop fs –tail file.txt Lire les dernières lignes du fichier

hadoop fs –cat file.txt Affiche tout le contenu du fichier

hadoop fs –mv file.txt Renommer le fichier


newfile.txt
hadoop fs –rm newfile.txt Supprimer le fichier

hadoop fs –mkdir myinput Créer un répertoire

hadoop fs –cat file.txt | less Lire le fichier page par page

 Créer un répertoire dans HDFS, appelé myinput.


hadoop fs –mkdir myinput

Nawres Abdelwahed Page 1


 Pour copier le fichier purchases.txt dans HDFS sous le répertoire myinput, taper la
commande:
hadoop fs –put purchases.txt myinput/

 Pour afficher le contenu du répertoire myinput, la commande est:


hadoop fs –ls myinput

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


hadoop fs –tail purchases.txt

On obtient alors

II. Map Reduce :


Map Reduce est un patron d’architecture de développement permettant de traiter les données
volumineuses de manière parallèle et distribuée. Il se compose principalement de deux types
de programmes:

 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…)

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.

1- Mappers :
Soit un code comportant 6 champs, séparés par des tabulations. Le Mapper doit:

- Séparer les différents champs par tabulation

Nawres Abdelwahed Page 2


- Extraire les éléments voulus à partir de ces champs, sous forme de clef/valeur

Pour ce premier exercice, notre but est de déterminer le total des ventes par magasin, pour un
fichier log dont les champs sont de la forme suivante:

Date temps magasin produit coût paiement

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 :

def mapper():
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)

Ce code se trouve sous le répertoire ~/udacity_training/code dans le fichier mapper.py.

To do 1 :

- 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- Reducer :

Dans l’exemple précédent, une fois que le Mapper extrait les couples (magasin, cout), 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 :

def reducer():
salesTotal = 0
oldKey = None
for line in sys.stdin:
data = line.strip().split(“\t”)
if len(data) != 2:
continue
thisKey, thisSale = data
if oldKey and oldKey != thisKey:
print “{0}\t{1}”.format(oldKey,salesTotal)
salesTotal = 0
oldKey = thisKey
salesTotal += float (thisSale)
if oldKey != None:
print oldKey,“\t”, salesTotal

Nawres Abdelwahed Page 3


To do 2 :

- Expliquer ce code.
- Tester ce Reducer sur le disque local, en utilisant cette instruction.
head -50 ../data/purchases.txt |./mapper.py |sort |./reducer.py

3- 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-2.0.0-mr1-
cdh4.1.1.jar –mapper mapper.py –reducer reducer.py –file
mapper.py –file reducer.py –input myinput –output joboutput

Cette instruction donne en paramètres les fichiers correspondant aux Mappers et Reducers, et
les répertoires contenant le fichier d’entrée (myinput) 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.

Remarque : 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.

Pour faciliter le travail, un raccourci a été créé pour cette instruction (vous le trouverez défini
dans le fichier ~/.bashrc). Désormais, pour exéuter cette instruction, il suffit de taper:

hs mapper.py reducer.py myinput joboutput

To do 3 :

- 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 ?

To Do 4 :

Ecrire vos propres mappers et reducers pour :

Nawres Abdelwahed Page 4


1- Donner la liste des ventes par catégorie de produits (quelle est la valeur des ventes
pour la catégorie Toys).
2- Donner le montant de la vente le plus élevé pour chaque magasin
3- Quel est le nombre total des ventes et la valeur totale des ventes de tous magasins
confondus?

Nawres Abdelwahed Page 5

Vous aimerez peut-être aussi