Vous êtes sur la page 1sur 36

COLLÈGE DE BOIS-DE-BOULOGNE

MAPREDUCE
AHCENE BENDJOUDI, PHD
AHCENE.BENDJOUDI@BDEB.QC.CA
PLAN

 MapReduce
 Fonctionnement de MapReduce
 Word Count
 MapReduce - Java
 MapReduce - Python

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


UNE DÉFINITION POUR COMMENCER

Hadoop MapReduce is a software framework for easily writing


applications which process vast amounts of data (multi-terabyte
data-sets) in-parallel on large clusters (thousands of nodes) of
commodity hardware in a reliable, fault-tolerant manner.

Hadoop Tutorial, hadoop.apache.org

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE

 MapReduce est un modèle de programmation parallèle sur une


infrastructure de calcul distribuée
 Basé sur Divide and Conquer (Diviser pour régner)
 Implémentation Open-Source Java dans Hadoop
 Le problème initial est décomposé en plusieurs sous-problèmes
pouvant être traités par une seule machine.
 L’ensemble des sous-problèmes sont traités en parallèle par les
machines workers
 Traitement distribué de données avec deux fonctions (Map et
Reduce)

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


FONCTIONNEMENT DE MAPREDUCE

 Le traitement effectué sur les données distribuées sur le cluster


se fait avec deux fonctions principales Map et Reduce
 Map : Décompose le problème initial en sous-problèmes de taille
réduite. Les sous-problèmes sont traités d’une manière distribuée
sur l’ensemble des nœuds slaves.
 Reduce : Agrège les résultats obtenus par l’opération Map et
construit la solution finale

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE WORKFLOW

 De type Maître-Esclave. Un nœud maître dirige


tous les nœuds esclaves.

Output Data

Worker
Input Data write Output
Map0 local Worker File 0
 Une tâche peut être dans 3 états : Split 0
Split 0 write Reduce1
inactive, active, terminée.
Split 1 Worker
 Les tâches inactives sont activées au Split 2 Map1 Output
fur et à mesure que des nœuds de Split 1 Worker File 1
travail deviennent disponibles.
Worker remote
Reduce2
read,
 Quand toutes les tâches Map sont Map2
sort
Split 2
terminées, les tâches Reduce
commencent
Map Reduce
extract something you aggregate,
care about from each summarize, filter,
record or transform

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


FONCTIONNEMENT DE MAPREDUCE
 Split : Lire les données necessaires au calcul (Tuples, Lignes, …) et les decomposer en plusieurs
fragments pour en extraire que ceux qui sont nécessaires au calcul
 Map : A partir des fragments extraits, produire un résultat initial (intermédiaire) concernant les
données en notre possession. Le résultat est un ou plusieurs paires <clé,valeur>.
 Clé: Toute information qui détermine d’une façon unique l’objectif recherché
 Valeur: La valeur de l’objectif
 Les clés et valeurs sont choisies de telle sorte que les couples clé/valeur aient un sens par
rapport au problème à résoudre
 Le Mapper (la fonction Map) est exécuté par chaque worker dans le cluster
 Le Mapper transforme les données d'entrée en une série de couples clé/valeur en sortie.
 Shuffle and Sort : les résultat du Mapper sont groupés et triés par leur clés. Ces étapes ne
nécessitent aucune intervention du programmeur
 Reduce : Agréger les résultats contenus dans les groupes (par clé). L’agrégation peut être une
somme, un produit, un filtre, une transformation, … tout dépend de l’objectif recherché

Liste de
Fragments/tu Résultats Résultat final
Données ples … intermédiaire Shuffle/
initiales Split Map (Clés/valeurs) Reduce
(Clés, Valeurs)
Sort
Groupées et triées (Clé/Valeur)

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE SUR CLUSTER

Split Map Shuffle/Sort Reduce

<k1,v1>
<k1,v1>
Donnée1 Map1 <k1,v2> Reducer1
<k2,v2>
<k1,v3>
<k3,v1>
Donnée2 Map2 <k3,v3>
<k2,v1> <k2,v1>
Données Reducer2 Résultats
<k2,v2>
<k1,v2>
Donnée3 Map3
<k3,v2>
<k3,v1>
<k1,v3> <k3,v2>
Donnée4 Map4 Reducer4
<k3,v4> <k3,v3>
<k3,v4>

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


QUIZ ☺

 Reduce
 Output
 Map
 Input
 Shufle & sort

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – WORD COUNT (DÉMARCHE)

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – WORD COUNT (DÉMARCHE)

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – WORD COUNT (DÉMARCHE)

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – WORD COUNT (DÉMARCHE)

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – WORD COUNT (DÉMARCHE)

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – WORD COUNT (DÉMARCHE)

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – WORD COUNT (DÉMARCHE)

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – WORD COUNT (DÉMARCHE)

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – WORD COUNT (DÉMARCHE)

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – WORD COUNT (DÉMARCHE)

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – WORD COUNT (DÉMARCHE)

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – WORD COUNT

 Objectif : Calculer les occurrences d’un mot dans un texte

un 3
mot 2
dans 2
occurrences d un mot dans texte 2
un texte. occurrences 1
un mot peut apparaître d 1
plusieurs fois dans le texte peut 1
apparaître 1
plusieurs 1
fois 1
le 1

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – EXEMPLE 3
K V
K V
occurrences 1
d 1 occurrences 1
occurrences d'un un 1
mot dans un texte. mot 1 d 1 K V
dans 1
un 1 un 1, 1, 1
occurrences 1
texte 1
d 1
mot 1, 1
un 3
occurrences d'un mot 2
mot dans un texte. dans 1, 1
dans 2
un mot apparait un mot apparait un 1
texte 2
plusieurs fois dans plusieurs fois dans mot 1 texte 1, 1, 1
apparait 1
le texte apparait 1
plusieurs 1
plusieurs 1 apparait 1
fois 1
fois 1
le 1
dans 1 plusieurs 1

fois 1
le texte le 1
texte 1 le 1

 Parser (Trouver les différents mots)


 Compter chaque occurrence d’un mot trouvé
 Rassembler les occurrences des mêmes mots
 À partir des listes d’occurrences calculer le nombre total d’occurrences
© AHCENE BENDJOUDI & DOMINIQUE TESSIER
ALGORITHMES

WordCount

Fonction Mapper (NumLigne, Ligne)


ListeMots  Décomposer(Ligne) // Mots est une liste des mots de la ligne Ligne
Pour chaque Mot dans ListeMots
ProduireCléValeur(Mot, 1) // Clé = Mot, Valeur = 1

Fonction Reducer (Mot, ListeValeurs)


NbreOccurrences  0
Pour chaque Valeur dans ListeValeurs // A ce niveau, on sait que toutes les que la
NbreOccurrences ++ // liste contient des valeurs d’une même clé
EcrireRésultat (Mot, NbreOccurences)
© AHCENE BENDJOUDI & DOMINIQUE TESSIER
EXERCICE
 Écrire un algorithme Map Reduce qui comptabilise uniquement les mots de taille
supérieur a 10
Fonction Mapper (NumLigne, Ligne)
ListeMots  Décomposer(Ligne) // Mots est une liste des mots de la ligne Ligne
Pour chaque Mot dans ListeMots
Si Taille(Mot) > 10
ProduireCléValeur(Mot, 1) // Clé = Mot, Valeur = 1

Fonction Reducer (Mot, ListeValeurs)


NbreOccurrences  0
Pour chaque Valeur dans ListeValeurs // A ce niveau, on sait que toutes les que la
NbreOccurrences ++ // liste contient des valeurs d’une même clé
EcrireRésultat (Mot, NbreOccurences)
© AHCENE BENDJOUDI & DOMINIQUE TESSIER
ÉCRIRE PROGRAMME MAPREDUCE
 Comprendre l’objectif recherché
 Faire une première ébauche d’une solution séquentielle (permet d’approfondir la connaissance du
problème et déterminer ses propriétés)
 Trouver les clés et valeurs permettant de résoudre le problème
 Map : Quelle clé ? Quelle valeur ?
 Reduce : Quelle clé ? Quelle valeur ?
 Écrire une esquisse des deux fonctions Map et Reduce en langage naturel. Ne jamais oublier que :
 Les Mappers et Reducers sont exécutés par différentes machines en parallele,
 sur des données distribuées
 il n’y a aucune communication entre les Mappers/Reducers qui permettent de connaitre la valeur d’une
variable donnée d’un autre Mapper/Reducer.
 Chaque Mapper accepte <Clé,Valeur> en entrée et produit <Clé’,Valeur’> en sortie.
 Chaque Reducer accepte <Clé, ListeValeurs> en entrée et Produit <CléRésultat,
ValeurRésultat> en sortie.
 Développer le programme MapReduce avec le langage souhaité (Java, Python, R, etc) en exploitant le
maximum d’outils offerts par le langage choisi

<Clé, Valeur> <Clé’, Valeur’> <Clé, ListeValeurs> <CléRésultat, ValeursRésultats>


Mapper Reducer

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – DANS JAVA

 En Java, le développeur doit développer trois fonctions : Mapper, Reducer,


Driver (le main du programme. Contiendra toutes les informations concernant le
Mapper et Reducer à exécuter et les types de données en entrées et sorties
<clés,valeurs>).
 Classe Mapper map(key, value)
 Classe Reducer reduce(key, [ListValues])
 Classe Driver main()

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


IMPORTS

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPPER – CODE JAVA

CléEntrée: Offset de la ligne


ValeurEntrée: Le contenu de la ligne correspondant à l’offset
Contenu du Mapper : Parser la ligne, extraire les informations nécessaires au traitement
et faire le traitement
Paires <CléSortie, ValeurSortie> : selon l’objectif du calcul, on produit les clés et
valeurs adéquates. Dans le cas du word count la clé est le mot et valeur est « 1 ».
Chaque Mapper produit une ou plusieurs paires <CléSortie, ValeurSortie>

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


REDUCER – CODE JAVA

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


DRIVER

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPPER – CAS DU WORD COUNT

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


REDUCER – CAS DU WORD COUNT

Execution
hadoop jar program.jar mainClass inputFile output

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPREDUCE – DANS PYTHON

 MRJob: Librairie Python pour MapReduce


 mapper: Classe python pour définir le traitement Map
 reducer: Classe python pour définir le traitement Reduce
 yield: Ecrit le résultat dans contexte

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


MAPPER ET REDUCER

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


LE PROGRAMME

© AHCENE BENDJOUDI & DOMINIQUE TESSIER


EXECUTION

python Program.py -r hadoop Input -o Output


Exemple :
python WordCount.py -r hadoop hdfs:///user/testuser/input –o /user/testuser/output

© AHCENE BENDJOUDI & DOMINIQUE TESSIER

Vous aimerez peut-être aussi