Académique Documents
Professionnel Documents
Culture Documents
CHAPITRE 3 :
MapReduce
2BA
Ecosystème Hadoop
2
Hadoop Framework Tools
3
MapReduce
• MapReduce est un modèle de programmation créé par Google pour le traitement et la génération
de larges ensembles de données sur des clusters d’ordinateurs.
• Il s’agit d’un composant central du Framework logiciel Apache Hadoop, qui permet le traitement
résilient et distribué d’ensembles de données non structurées massifs sur des clusters
d’ordinateurs, au sein desquels chaque nœud possède son propre espace de stockage.
4
MapReduce
5
MapReduce
• MapReduce consiste en deux fonctions map() et reduce(),
map(clé1,valeur1) → list(clé2,valeur2)
6
MapReduce
• MapReduce consiste en deux fonctions map() et reduce(),
• Dans l'étape Reduce, les nœuds les plus bas font remonter leurs résultats au nœud parent qui
les avait sollicités. Celui-ci calcule un résultat partiel à l'aide de la fonction Reduce qui associe
toutes les valeurs correspondantes à la même clé à une unique paire (clé, valeur). Puis il
remonte l'information à son tour.
• À la fin du processus, le nœud d'origine peut recomposer une réponse au problème qui lui
avait été soumis :
reduce(key2,list(valeur2))→ valeur2
7
MapReduce
• MapReduce, et si nous simplifions ?
• Imaginons qu'un utilisateur veuille connaître le nombre d'occurrences de tous les mots d'un roman.
• Solution :
Répertorier chaque mot et en compter les occurrences (application serveur)
• JobTracker : le nœud principal qui gère toutes les tâches et ressources d'un cluster,
• TaskTrackers : ces agents déployés sur chacune des machines du cluster exécutent les tâches de
répartition (Map) et de d’agrégation (reduce),
9
MapReduce
• Caractéristiques de MapReduce :
• Deux fonctions, map() et reduce() qui peuvent être utilisées pour de nombreux types de traitement
des données, les fouilles de données, les graphes…
• Le système découpe automatiquement les données en entrée en blocs de données de même taille.
Puis, il planifie l’exécution des tâches sur les nœuds disponibles,
• Il fournit une tolérance aux fautes à grain fin grâce à laquelle il peut redémarrer les nœuds ayant
rencontré une erreur ou affecter la tâche à un autre nœud,
• La parallélisation est invisible à l'utilisateur afin de lui permettre de se concentrer sur le traitement
des données.
10
MapReduce
• Points faibles de MapReduce :
• Les méthodes map() et reduce() sont bloquantes. Cela signifie que pour passer à l'étape suivante, il
faut attendre que toutes les tâches de l'étape courante soient terminées,
• N'a pas de plan spécifique d'exécution et n'optimise pas le transfert de données entre les nœuds.
11
Paradigme MapReduce
• Modèle de programmation développé chez Google
• Initialement, il était destiné à leur application de recherche / indexation interne, mais il est maintenant
largement utilisé par de nombreuses organisations (Yahoo, Amazon.com, IBM, etc.).
• C'est une programmation fonctionnelle (par exemple, LISP) qui est naturellement parallélisable sur un grand
cluster de stations de travail ou PCS.
• Le système sous-jacent s’occupe du partitionnement des données d’entrée, planifie l’exécution du programme
sur plusieurs machines, gère les pannes de la machine et la communication requises entre les machines. (C’est
la clé du succès de Hadoop)
12
Comment fonctionne MapReduce ?
• Le temps d’exécution collecte les paires (clé’, valeur’) et les distribue en plusieurs
fonctions de réduction afin que chaque fonction de réduction obtienne les paires avec
la même clé’.
13
Exemple MapReduce
Pour calculer les occurrences de mots dans l'ensemble de
documents donné
map(String key, String value):
// key: document name; value: document contents; map (k1,v1) list(k2,v2)
for each word w in value: EmitIntermediate(w, "1");
(Example: If input string is (“Saibaba is God. I am I”), Map produces {<“Saibaba”,1”>, <“is”, 1>, <“God”,
1>, <“I”,1>, <“am”,1>,<“I”,1>}
reduce(String key, Iterator values):
// key: a word; values: a list of counts; reduce (k2,list(v2)) list(v2)
int result = 0;
for each v in values:
result += ParseInt(v);
Emit(AsString(result));
(Example: reduce(“I”, <1,1>) 2)
14
Exemple d’applications
• Graphe de lien Web inversé : liste de toutes les URL sources associées à une URL
cible donnée
• Tri distribué
15
MapReduce : tolérance aux pannes
• Échec du maître : il est facile d’obliger le maître à écrire des points de contrôle périodiques
des structures de données principales décrites ci-dessus. Si la tâche principale meurt, une
nouvelle copie peut être démarrée à partir du dernier état de point de contrôle. Cependant,
dans la plupart des cas, l'utilisateur redémarre le travail.
16
Mappage des travailleurs aux processeurs
• Les données d'entrée (sur HDFS) sont stockées sur les disques locaux des ordinateurs du
cluster. HDFS divise chaque fichier en blocs de 64 Mo et stocke plusieurs copies de chaque
bloc (généralement 3 copies) sur des ordinateurs différents.
• Le maître MapReduce prend en compte les informations d’emplacement des fichiers d’entrée et
tente de planifier une tâche de Map sur une machine contenant une réplique des données
d’entrée correspondantes. À défaut, il tente de planifier une tâche de Map à proximité d'une
réplique des données d'entrée de cette tâche. Lors de l'exécution d'opérations MapReduce
volumineuses sur une fraction significative des travailleurs d'un cluster, la plupart des données
d'entrée sont lues localement et ne consomment pas de bande passante réseau.
17
Granularité des tâches
• La phase de Map comporte M pièces et la phase Reduce, R pièces.
• Le fait que chaque utilisateur effectue de nombreuses tâches différentes améliore l’équilibrage
dynamique de la charge et accélère également la récupération en cas de défaillance d’un travailleur.
• R est souvent contraint par les utilisateurs car la sortie de chaque tâche Reduce aboutit dans un
fichier de sortie séparé.
• En générale (sur Google), M = 200 000 et R = 5 000, en utilisant 2 000 postes de travail.
18
Fonctions de support supplémentaires
• Fonction de combinaison : L'utilisateur peut spécifier une fonction de combinaison qui fusionne
partiellement les données du disque local intermédiaire avant leur envoi sur le réseau. La
fonction de combinaison est exécutée sur chaque machine qui effectue une tâche de Map.
Généralement, le même code est utilisé pour implémenter les fonctions de combinaison et de
Reduce.
19
Qu’est ce que MapReduce ?
• Modèle de programmation parallèle restreint destiné aux grands clusters
• L'utilisateur implémente les fonctions Map() et Reduce()
20
Map & Reduce
• L’idée de Map et Reduce a plus de 40 ans
• Présent dans tous les langages de programmation fonctionnels (APL, Lisp et
ML)
21
Fonctions Map & Reduce
• Fonctions empruntées à des langages de programmation fonctionnels (par
exemple, Lisp)
• Map()
• Traiter une paire clé/valeur pour générer des paires clé/valeur
intermédiaires
• Reduce()
• Fusionner toutes les valeurs intermédiaires associées à la même clé
22
Exemple : Compteur de mots
• Map()
• Input <filename, file text>
• Analyse le fichier et émet des paires <word, count>
• exemple <”hello”, 1>
• Reduce()
• Somme toutes les valeurs pour la même clé et émet <word, TotalCount>
• exemple <”hello”, (3 5 2 7)> => <”hello”, 17>
23
Exécution sur des clusters
3. Tâche Map
6. Tâche Reduce
7. Retour
24
Map/Reduce : mise en œuvre de cluster
M : tâches Fichiers
Fichier map intermédiaires R : taches Fichiers
Input reduce Output
split 0 Output 0
split 1
split 2
split 3 Output 1
split 4
26
Cluster Map Reduce typique
27
Implémentations de Map Reduce
• Google
• Non disponible en dehors de Google
• Hadoop
• Une implémentation open-source en Java
• Utilise HDFS pour un stockage stable
• Download: http://lucene.apache.org/hadoop/
• Teradata Aster
• Base de données SQL optimisée à base de clusters qui implémente également MapReduce
28
A
• A
29