Vous êtes sur la page 1sur 29

Big Data / Business Intelligence

« Pilotage de la performance pour une bonne gouvernance des entreprises »

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.

• Le concept du MapReduce est de décomposer le traitement des données en deux phases :


• La phase Map : les données sont extraites par les mappers, transformées puis préparées pour les
reducers.
• La phase Reduce : les données sont collectées des mappers puis traitées et analysées.

4
MapReduce

• MapReduce permet de manipuler de grandes quantités de données en les distribuant dans un


cluster de machines pour être traitées,

• MapReduce connais un succès auprès de sociétés possédant d'importants centres de traitement


de données telles Amazon.com ou Facebook,

• MapReduce est utilisé au sein du Cloud Computing,

5
MapReduce
• MapReduce consiste en deux fonctions map() et reduce(),

• Dans l'étape Map, le nœud analyse un problème, le découpe en sous-problèmes, et les


délègue à d'autres nœuds (qui peuvent en faire de même récursivement). Les sous-problèmes
sont ensuite traités par les différents nœuds à l'aide de la fonction Map() qui à un couple (clé,
valeur) associe un ensemble de nouveaux couples (clé, valeur) :

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)

Opération qui prendrait beaucoup de temps !


• Avec MapReduce :
• Répartir cette tâche entre 26 personnes : chacune prendrait une page, en écrirait chaque mot sur
des feuilles de papier, un par feuille, avant de changer de page.

La fonction de distribution (Map)


• Si une personne s'absentait, une autre prendrait sa place. de MapReduce

La tolérance aux pannes de MapReduce


• Une fois toutes les pages du livre traitées, les utilisateurs rangeraient chaque feuille, selon la
première lettre du mot, dans l'une des 26 boîtes – une par lettre de l'alphabet. Chaque utilisateur
prendrait ensuite une boîte pour trier les feuilles par ordre alphabétique.

Le nombre de pages comportant le même mot


représente l'aspect Reduce de MapReduce
8
MapReduce
• Composants de MapReduce :

• 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),

• JobHistoryServer : généralement déployé en tant que fonction distincte ou avec JobTracker, ce


composant assure le suivi des tâches effectuées.

9
MapReduce
• Caractéristiques de MapReduce :

• Le modèle de programmation du MapReduce est simple mais très expressif,

• 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…

• Il est indépendant du système de stockage et peut manipuler de nombreux types de variable,

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

• Ne supporte pas les langages haut niveau comme le SQL

• Ne gère pas les index.

• Utilise un seul flot de données.

• Quelques points peuvent réduire les performances 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

• Trier / fusionner l'informatique distribuée

• 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 moteur d'exécution partitionne l'entrée et la fournit à différentes instances du Map;

Map (clé, valeur)  (clé’, valeur’)

• 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é’.

• Chaque Reduce produit une sortie de fichier unique (ou aucune).

• Map et Reduce sont des fonctions écrites par l'utilisateur

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

• Grep distribué (comme dans la commande Unix grep)

• Nombre de fréquence d'accès aux URL

• Graphe de lien Web inversé : liste de toutes les URL sources associées à une URL
cible donnée

• Index inverse : Produit les paires <mot, liste(DocumentID)>

• Tri distribué

15
MapReduce : tolérance aux pannes

• Échec du « worker » (travailleur) : le maître envoie un ping à chaque travailleur


périodiquement. Si aucune réponse n'est reçue d'un agent au bout d'un certain temps, le
maître le marque comme ayant échoué. Toutes les tâches de carte terminées par le
travailleur sont réinitialisées à leur état initial inactif et deviennent donc éligibles pour la
planification sur d'autres travailleurs. De même, toute tâche de mappage ou tâche de
réduction en cours sur un travailleur en échec est également réinitialisée pour devenir
inactive et devient éligible pour une nouvelle planification.

• É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.

• M et R doivent être beaucoup plus larges que le nombre de machines de travail.

• 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.

• Plus le M et le R sont élevés, plus le maître doit prendre de décisions.

• 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 partitionnement : Les utilisateurs de MapReduce spécifient le nombre de tâches


Reduce / de fichiers de sortie souhaités (R). Les données sont partitionnées entre ces tâches à
l'aide d'une fonction de partitionnement sur la clé intermédiaire. Une fonction de
partitionnement par défaut utilisant le hachage (par exemple .hash (clé) mod R.) est fournie.
Dans certains cas, il peut être utile de partitionner les données selon une autre fonction de la
clé. L'utilisateur de la bibliothèque MapReduce peut fournir une fonction de partitionnement
spéciale.

• 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()

• Framework de calcul parallèle


• Les bibliothèques s'occupent de TOUT le reste
• Parallélisation
• Tolérance aux pannes
• Distribution de données
• Equilibrage de charge

• Modèle utile pour de nombreux jobs pratiques

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)

• Fonctions d'ordre supérieur


• prendre les définitions de fonction comme arguments, ou
• renvoyer une fonction en sortie

• Map et Reduce sont des fonctions d'ordre supérieur.

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

1. Division des fichiers Input (M fractionnement)

2. Affecter un maître et des ouvriers

3. Tâche Map

4. Écriture de données intermédiaires sur le disque (R régions)

5. Lecture et tri des données intermédiaires

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

Plusieurs tâches de Chaque fichier Chaque tâche Reduce


Map ou Reduce intermédiaire est divisé correspond à une
peuvent être exécutées en R partitions, par partition
sur un même fonction de
ordinateur partitionnement
25
Map Reduce Vs. bases de données parallèles

• Map Reduce est largement utilisé pour le traitement en parallèle


• Google, Yahoo et des centaines d'autres entreprises
• Exemples d'utilisations: calculer le « PageRank », construire des index de mots-clés, analyser les données
des journaux de clics Web, …

• Les utilisateurs de bases de données disent :


• Les bases de données parallèles le font depuis des décennies

• Les utilisateurs de Map Reduce disent :


• Nous agissons à des échelles de 1000 machines
• Nous gérons les pannes de manière transparente
• Nous autorisons le code procédural dans Map Reduce et nous autorisons les données de tout type

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

• Et plusieurs autres, comme Cassandra sur Facebook, …

28
A
• A

29

Vous aimerez peut-être aussi