Vous êtes sur la page 1sur 84

Institut Supérieur des Etudes Technologiques de

Mahdia
Département: Technologies de
l’informatique

Gestion des Données


Massives
Chebbi_ikram@yahoo.fr
Chebbi Ikram
Moufida Jguirim moufidajguirim@yahoo.com

Master AU: 2020-2021


Plan du cours

Chapitre 01 Chapitre 03
01 Introduction au
Big Data
03 Hadoop, HDFS
et Map-Reduce

Chapitre 02 Chapitre 04
Domaines
02 Les bases de
données NoSQL
04 d’application du
big data

0
2
Institut Supérieur des Etudes Technologiques de
Mahdia
Département: Technologies de
l’informatique

Chapitre 2: Hadoop,
HDFS & MapReduce
Chebbi_ikram@yahoo.fr
Chebbi Ikram
https://sites.google.com/site/chebbiikramiset

DSI 5 AU: 2020-2021


PLAN

Hadoop MapReduce Exemples


HDFS

4
Présentation du Framework

Hadoop est un framework open source conçu pour réaliser d’une façon distribuée des traitements sur des
volumes de données massives, de l’ordre de plusieurs pétaoctets;

Hadoop Il est destiné à faciliter la création d’applications distribuées et échelonnables (scalables)


Il s’inscrit typiquement sur le terrain du Big Data

Hadoop est géré sous l’égide de la fondation Apache, il est écrit en03
Java;

Hadoop a été conçu par Doug Cutting en 2004 et été inspiré par les publications MapReduce, GoogleFS et
BigTable de Google
Modèle simple pour les développeurs: il suffit de développer des tâches MapReduce depuis des interfaces
02 dans des langages multiples (Java,
simples accessibles via des librairies 04 Python, C/C++…)

Déployable très facilement (paquets Linux préconfigurés), configuration très simple elle aussi.

05
5
Historique

Hadoop

03

02 04

05
6
6
Historique : le détail

2002: Doug Cutting (directeur archive.org) et Mike Cafarella (étudiant) développent Nutch, un moteur de
recherche Open Source exploitant le calcul distribué. L’implémentation peut tourner seulement sur
quelques machines et a de multiples problèmes.
Hadoop 2003-2004: le département de recherche de Google publie deux whitepapers, le premier sur GFS(un
système de fichiers distribué) et le second sur le paradigme Map/Reduce pour le calcul distribué
2004 : Doug Cutting and Mike Cafarella développent un framework (encore assez primitif) inspiré des
papiers de Google et portent leur projet Nutch sur ce framework
2006: Doug Cutting (Désormais chez Yahoo) est en charge d’améliorer 03
l’indexation du moteur de recherche de Yahoo. Il exploite le framework réalisé
précédemment.
Il créé une nouvelle version améliorée du framework en tant que projet Open
Source de la fondation Apache, qu’il nomme Hadoop (le nom d’un éléphant en
peluche de son fils );
A l’époque, Hadoop est encore largement 02 en développement: un cluster04
pouvait alors comporter au maximum 5 à 20 machines

05
7
7
Historique: le détail
2008: le développement est maintenant très abouti, et Hadoop est
exploité par le moteur de recherche de Yahoo ainsi que par de
nombreuses autres divisions de l’entreprise
2011: Hadoop est désormais utilisé par de nombreuses autres
Hadoop entreprises et des universités, et le cluster Yahoo comporte 42000
machines et des centaines de pétaoctets
2012 Jan: - Hadoop 1.0
2013 Mai:. 1,42 To/min sur 2 100 nœuds (YARN)
2013 Oct: Hadoop 2.0 03
2015: Hadoop se généralise notamment avec le buzz Big Data et Cloud
16 janvier 2019: dernière version Hadoop 3.2.0

02 04

05
8
8
Composants Fondamentaux
Le projet Hadoop consiste en deux grandes parties:
Stockage des données : HDFS (Hadoop Distributed File System)
Traitement des données : MapReduce / Yarn (Yet Another Resource
Negotiator)

Hadoop Principe :
- Diviser les données
- Les sauvegarder sur une collection de machines, appelées cluster
- Traiter les données directement là où elles sont stockées, plutôt que
03
de les copier à partir d’un serveur distribué

Il est possible d’ajouter des machines à votre cluster, au fur et à mesure


que les données augmentent
04

05
9
9
Ecosystème Hadoop
MapReduce utilise des langages de programmation pour traiter les
Données: Java, Ruby, Python…
Plusieurs outils facilitant le travail
En plus des briques de base Yarn Map Reduce/HDFS, plusieurs outils
existent pour permettre:
Hadoop - L’extraction et le stockage des données de/sur HDFS
- La simplification des opérations de traitement sur ces données
- La gestion et coordination de la plateforme
- Le monitoring du cluster
03

04

05
10
10
Ecosystème Hadoop
HUE
Les jobs MapReduce peuvent prendre beaucoup de temps Oozie
pour s’exécuter sur de larges quantités de données
Mahout
Autres projets pour simplifier
Impala : PIG HIVE
Extraction des données directement
à partir de HDFS avec SQL Sqoop
Optimisé pour les requêtes à faible
Hadoop
Latence M-R Impala HBase Flume
Requêtes plus rapides que Hive
HBase : Base de données temps réél HDFS
Connexion du HDFS à partir d’outils Mahout :
externes Bibliothèque d’apprentissage automatique;
Sqoop : Prend les données à partir d’une Permet de :
base de données traditionnelle, et • Déterminer des éléments qu’un utilisateur pourra apprécier selon
les met dans HDFS, comme étant son comportement
des fichiers délimités, pour être • Grouper des documents
traitées avec d’autres données 04
• Affecter automatiquement des catégories aux documents
dans le cluster
Flume : Système distribué permettant de Hue :
collecter, regrouper et déplacer Front-end graphique pour le cluster
Fournit :
efficacement un ensemble de
- un navigateur pour HDFS et Hbase
données (des logs) à partir de
plusieurs sources vers le HDFS
05- Des éditeurs pour Hive, Pig, Impala et Sqoop
Oozie :
Outil de gestion de Workflow 11
11
Permet de gérer les jobs Hadoop
Ecosystème Hadoop: Pour conclure
Spark : un moteur d’analyse unifié pour le
traitement de données à grande échelle
PIG, HIVE : Services de traitement de données à
l’aide de requêtes du type SQL
HBase : système de gestion de base de données
Hadoop non-relationnelles distribué
Mahout, SparkMLib : des services pour faire du
Machine Learning
Apache Drill : Moteur de requête SQL sur
Hadoop
ZooKeeper : Pour la gestion de Cluster
Oozie : Système de planification de workflow
pour gérer les jobs Hadoop
Flume,Sqoop : Services d’ingestion de données
Solr & Lucene : Pour la recherche et 04
Kafka (messaging): Système orienté message de
l’indexation type publish/subscribe implémenté comme système
Ambari : Mise à disposition, monitoring et de traces transactionnel distribué, adapté pour la
maintenance de cluster consommation de messages en ligne et hors-ligne.
05
12
12
Ecosystème Hadoop: Pour retenir un peu plus…

Hadoop

04

05
13
13
Ecosystème Hadoop: Pour retenir un peu plus…

Hadoop

04

05
14
14
Les choix sur le marché

Hadoop

Pourquoi les distributions? Comment choisir une solution Hadoop?


Pour regrouper de façon homogène les • Modèle économique (Open Source, Commercial)
différentes extensions • Les composantes
Pour faciliter l’installation, la diffusion et le • Maturité de la solution, le support, la documentation, le
support; retour d’expérience
04avec Hadoop, la rapidité des évolutions
• Le rapport
Pour permettre d’incuber des Business
Model pour les éditeurs qui contrribuent • Partenaires
largement à Hadoop
3 acteurs majeurs dans l’écosystème:
• HortonWorks 05
• Cloudera
15
15
• MapR
Et qui utilise Hadoop?

Hadoop

04

05
16
16
HDFS: Présentation
HDFS (Hadoop Distributed Filesystem)
HDFS est un système de fichiers distribué: Cela veut dire qu'il utilise le réseau pour manipuler les
accès au système.
HDFS est un système de fichiers extensible et portable
HDFS Développé par Hadoop, inspiré de GoogleFS et écrit en Java
Chaque composant du réseau peut donc accéder à chaque ressource d'autres ordinateurs
composant ce réseau.
Conçu pour stocker de très gros volumes de données sur03
un grand nombre de machines peu
couteuses équipées de disques durs banalisées
Le grand point positif de ce système est l'universalité: Il n'a pas besoin d'une machine très puissante
pour fonctionner correctement. Il est désigné pour fonctionner sur les machines ordinaires
02 04
HDFS permet l’abstraction de l’architecture physique de stockage, afin de manipuler un système de
fichier distribué comme s’il s’agissait d’un disque dur unique.
HDFS reprend de nombreux concepts proposés par des systèmes de fichiers classiques comme ext2
05 de blocs, les métadonnées qui permettent de retrouver
pour Linux ou FAT pour Windows : la notion
les blocs à partir d’un nom de fichier, les droits ou encore l’arborescence des répertoires. 17
HDFS: Présentation

Mais HDFS n’est pas un système de fichiers classique pour les principales raisons suivantes:
HDFS n’est pas solidaire du noyau du système d’exploitation: il assure une portabilité et peut être
HDFS déployé sur différents systèmes d’exploitation
Sur un système classique, la taille du disque est généralement considérée comme la limite globale
d’utilisation. Dans un système distribué comme HDFS, chaque nœud d’un cluster correspond à un
03augmenter ce volume global, il suffira
sous-ensemble du volume global de données du cluster. Pour
d’ajouter de nouveaux nœuds.
HDFS utilise des tailles de blocs largement supérieurs à ceux des systèmes classiques: par défaut, la
taille est fixée à 64 Mo. Mais, il est possible de monter à 128Mo, 256 Mo, 512 Mo voire 1Go. Pour les
systèmes classiques , la 02 04 de fournir des tailles plus grandes
taille est généralement de 4Ko. L’intérêt
permet de réduire le temps d’accès.

05
18
HDFS: Objectifs

Garantir l'intégrité des données même en cas de défaillance système (plantage d'une
HDFS machine)
Permettre un traitement rapide des fichiers d'une grande taille (GB et plus)
HDFS est moins adapté à beaucoup de fichiers de petites tailles
03
Rapprocher la lecture de la localisation des fichiers
HDFS intègre des interfaces qui permettent aux applications de localiser plus rapidement
les ressources demandées dans le cluster
02 04

05
19
HDFS: Architecture Nœuds

HDFS Permet de stocker de très gros volumes de données sur un


Cluster
Un cluster est un grand nombre de machines (noeuds) équipées
de disques durs et connectées entre elles. Ces machines sont
généralement appelées « Serveurs lames » ou « rack server ».
HDFS Notion de Blocks : c'est un endroit dans le système de fichiers qui
stocke les fichiers. Cluster
La taille par défaut est supérieure à celle dans les systèmes de
fichiers standards, car elle est de 64MB.
Une autre différence repose dans le fait que le fichier plus petit
que le block, n'occupe pas toute la taille du block. 03
Exemple:

Quand un fichier mydata.txt est enregistré dans HDFS, il est


décomposé en grands blocs 02(par défaut 64Mo), chaque bloc04 ayant
un nom unique: blk_1, blk_2…
Les blocs sont numérotés et chaque fichier sait quels blocs il
occupe.
Les blocs d’un même fichier ne sont pas forcément tous sur la
même machine. 05
La répartition d’un fichier sur plusieurs machines permet d’y
accéder simultanément par plusieurs processus. 20
HDFS: Architecture
Une architecture de machines HDFS (aussi appelée cluster HDFS)
repose sur trois types de composants majeurs:

NameNode (nœud de nom):


• C’est un service central (généralement appelé aussi maître)
HDFS • Il s’occupe de gérer l’état du système de fichiers
• Il maintient l’arborescence du système de fichiers et les
métadonnées de l’ensemble des fichiers et répertoires d’un
système Hadoop
• le master ordonne toutes les opérations et maintient la
cohérence des méta-données 03
• C'est lui qui réceptionne la demande du client et la passe
directement à ses workers qui s'appellent datanodes.

Datanode:
• Un Datanode contient 02les blocs de données 04
• Il y a un Datanode pour chaque machine au sein du cluster
• Les Datanodes sont sous les ordres du Namenode et sont
surnommés Workers
• Ils sont sollicités par les Namenodes lors des opérations de
lecture et d’écriture 05
• C'est lui qui apporte au namenode une liste des blocks
stockés. Ce rapport est envoyé périodiquement. 21
HDFS: Architecture
Chaque NameNode est composé des parties suivantes :
VERSION : le fichier qui contient les informations sur le namenode.
On y retrouve :
• l'identifiant pour le système de fichiers,
• le temps de création,
• le type de stockage,
HDFS • la version de la structure des données HDFS.
FEDITS: C’est un fichier très important qui regroupe toutes les
opérations effectuées dans le système. Chaque fois qu’une action
d'écriture est effectuée, elle est d'abord placée dans ce fichier de
logs. 03
• Ce n'est que par la suite que la mémoire est notifiée de cette
nouvelle opération.
• Les données stockées dans la mémoire sont utilisées pour les
opérations de lecture.
• Le fichier Edits sert un peu comme le backup qui doit
02 l'état de fichiers si le système 04
permettre à reconstruire plante.
FSIMAGE: c'est un fichier binaire utilisé comme un point de
contrôle pour les métadonnées.
• Il joue aussi un rôle important dans la récupération des
données dans le cas d'une défaillance de système.
FSTIME: C’est aussi un fichier binaire. 05
• Il stocke les informations sur la dernière opération de
contrôle sur les données. 22
HDFS: Architecture
En ce qui concerne la structure des répertoires datanode, elle possède
aussi un fichier VERSION.
A part les mêmes informations que celles stockées dans ce fichier dans

HDFS namenode, il contient un champ storageID. Cet identifiant permet au


namenode d'identifier le datanode.
En plus de cela, les fichiers des blocks y sont stockés (noms constitués
03 :
d'u préfixe blk_ et d'un suffixe sous forme d'identifiant du block)
• le premier fichier est un fichier sans extensions qui représente le
block en lui-même (par exemple : blk_1)
• le second fichier est un fichier des méta-données du block
02 04

05
23
HDFS: Architecture
Opération de lecture
L’opération de lecture d'un fichier placé dans le système
HDFS se base sur plusieurs étapes composées
HDFS d'interactions entre namenode et datanode:
• Le client se connecte à l'HDFS. Le système demande
alors namenode.
• Namenode répond et indique les emplacements des
blocks composant le fichier recherché par le client.
• Il retourne les adresses les plus proches de la machine
03
du cluster qui effectue l'appel.
• Les datanodes choisis retournent ensuite les données
au client.
• Une fois le retour des données terminé, la connexion
du client est fermée. 02 04

05
24
HDFS: Architecture
Opération d’écriture
• Le client demande la création d'un nouveau fichier.
• Le système informe alors namenode de cette demande.
• Namenode crée le nouveau fichier sans aucun block
associé (donc sans datanodes).
HDFS • Si les données à écrire sont correctes (fichier n'existe
pas et le client a les droits d'écrire dans le système), le
fichier est divisé en plusieurs paquets. Ils sont ensuite
placés dans la queue interne appelée data queue
(queue des données).
• L'écriture se fait ensuite par paquets, dans les
03
datanodes.
• Chaque paquet est répliqué dans plusieurs datanodes
(nombre déterminé par l'entrée de configuration
dfs.replication.min).
• 02 le paquet est alors
Une fois la réplication terminée, 04
supprimé d'une autre queue, acknowledged queue (la
queue de reconnaissance).
• Quand tous les blocks sont écrits, datanodes envoient
les informations avec les emplacements de ces blocks
au namenode. 05
• Grâce à cette information, namenode pourra à l'avenir
retrouver les fichiers demandés par le client. 25
HDFS: Architecture
Quels sont les problèmes possibles?
Panne de réseau ?
Panne de disque sur les DataNodes ?
HDFS
Pas tous les DN sont utilisés ?

Les tailles des blocks sont différentes ?

Panne de disque sur les NameNodes ? 03

02 04

05
26
HDFS: Architecture
Quels sont les problèmes possibles?
Panne de réseau ?
Panne de disque sur les DataNodes ?
HDFS
Pas tous les DN sont utilisés ?

Les tailles des blocks sont différentes ?

Panne de disque sur les NameNodes ? 03

02 04

05
27
HDFS: Architecture
Les solutions:
Si l’un des nœuds a un problème, les données seront
perdues
HDFS • Hadoop réplique chaque bloc 3 fois (par défaut)
• Il choisit 3 nœuds au hasard, et place une copie du bloc
dans chacun d’eux
• Si le nœud est en panne, le NN le détecte, et s’occupe de
03avoir
répliquer encore les blocs qui y étaient hébergés pour
toujours 3 copies stockées
Concept de Rack Awareness (rack = baie de stockage)

02 04

05
28
HDFS: Architecture
Les solutions:
Si le NameNode a un problème ?
• Si c’est un problème d’accès (réseau), les données sont
HDFS temporairement inaccessibles
• Si le disque du NN est défaillant, les données seront perdues à
jamais= Mort de HDFS

Pour éviter cela, le NameNode sera dupliqué, non seulement


03
sur son propre disque, mais également quelque part sur le
système de fichiers du réseau:

• Définition d’un namenode de secours appelé secondary


namenode 02
• Il enregistre des sauvegardes du namenode à
intervalles réguliers
• Il permet de reprendre le travail si le Namenode actif
est défaillant
05
29
HDFS: Architecture
Secondary namenode
• Ce namenode secondaire est important dans le processus
de récupération du système en cas de plantage du namenode
principal.
HDFS • Il ne s'agit donc pas d'un remplaçant du namenode
primaire.
• Secondary namenode vérifie périodiquement l'état du
namenode principal. A chaque vérification il copie les fichiers
de backup : fedits et fsimage. 03
• Sa structure des dossiers est donc quasi identique que celle
du namenode principal.

02

05
30
HDFS: Architecture
Pour Conclure
Le Namenode est vital pour HDFS mais il est unique.
Dans les versions 2.x de Hadoop, une nouvelle configuration
appelée High Availability est introduite.
HDFS Dans cette version :
• Il existe 2 namenodes de secours qui se comportent
comme des clones ;
• Ils sont en état d’attente et sont mis à jour en
03
permanence à l’aide de services appelés JournalNodes ;
• Les namenodes de secours sont capables de prendre le
relai instantanément en cas de panne du namenode ;
• Secondary namenode devient, de ce fait, inutile.

02

05
31
MapReduce:Présentation
Pour exécuter un problème large de manière distribuée, il faut pouvoir le
découper en plusieurs problèmes de taille réduite à exécuter sur chaque machine
MapReduce du cluster (diviser pour régner)
MapReduce est un Framework de traitement de données en clusters.
C’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 (capacité à continuer de fonctionner en cas de
panne) et distribué d’ensembles de données non structurées 03 massives sur des
clusters d’ordinateurs, au sein desquels chaque noeud possède son propre
espace de stockage.
A la base, le langage Java est utilisé, mais grâce à une caractéristique de Hadoop
appelée Hadoop Streaming, il est possible d’utiliser d’autres langages comme
Python ou Ruby 02 04

05
32
MapReduce: Opérations
MapReduce définit deux opérations distinctes à effectuer sur les données d’entrée:

MapReduce
La première MAP va transformer les données d’entrée en une série de couples clef/valeur
• Elle va regrouper les données en les associant à des clefs, choisies de telle sorte que
les couples clef/valeur aient un sens par rapport au problème à résoudre
• Cette opération doit être parallélisable: on doit pouvoir découper les données
d’entrée en plusieurs fragments et faire exécuter l’opération MAP à chaque machine
du cluster sur un fragment distinct.

La seconde REDUCE va appliquer un traitement à toutes les valeurs 03de chacune des clefs
distinctes produite par l’opération MAP.
• Au terme de l’opération REDUCE, on aura un résultat pour chacune des clefs distinctes
• On attribuera à chacune des machines du cluster une des clefs uniques produites par
MAP, en lui donnant la liste des valeurs associées à la clef.
• Chacune des machines effectuera alors l’opération REDUCE pour cette clef.
02 04
On distingue donc 4 étapes distinctes dans un traitement MapReduce:

Découper (split): les données d’entrée en plusieurs fragments


Mapper chacun de ces fragments pour obtenir des couples (clefs;valeur)
05clef
Grouper (shuffle) ces couples (clef;valeur) par
Réduire (reduce) les groupes indexés par clef en une forme finale avec une valeur pour
33
chacune des clefs distinctes
MapReduce: Opérations
Pour résoudre un problème via la méthodologie MapReduce avec Hadoop on doit:

MapReduce 1. Choisir une manière de découper les données d’entrée de telle sorte que
l’opération MAP soit parallélisable
2. Définir quelle clef utiliser pour notre problème
3. Ecrire le programme pour l’opération MAP
4. Ecrire le programme pour l’opération REDUCE
03
Et Hadoop se chargera du reste

02 04

05
34
MapReduce: Exemple Explicatif (Le jus de pomme)
Comment faire du jus de pomme?

MapReduce • Etape1 : L’épluchage, on épluche les pommes une à une


• Etape2 : Le pressage, on met toutes les pommes dans un pressoir et
on récupère le jus

03
Pouvons-nous simplifier?
• Au lieu de presser des pommes entières, on préfère les couper au
préalable en quartiers. La phase d’épluchage devient une phase
d’épluchage/découpage.
02 04

05
35
MapReduce: Exemple Explicatif (Le jus de pomme)
Si nous voulons beaucoup de jus de pomme
• Une seule personne ne suffit plus à la tâche.
MapReduce • Heureusement la méthode employée se généralise facilement à
une brigade de n éplucheurs.

03
Parallélisation/Scalabilité/Robustesse

02

05
36
MapReduce: Exemple Explicatif (Le jus de pomme)
Jus de Fruits MapReduce
On peut envisager de produire du jus d’orange, du jus d’ananas, et
MapReduce ainsi de suite.
Le processus consistant en une double phase de transformation
individuelle des ingrédients, puis d’élaboration collective convient
tout à fait, à une adaptation près: comme on ne peut pas presser
ensemble des oranges et les pommes, Il faut ajouter une étape de
tri/regroupement dans l’atelier d’assemblage.
La première phase d’épluchage reste inchangée
03

02

05
36
MapReduce: Exemple Explicatif (Le jus de pomme)
Configuration avec plusieurs ateliers d’assemblage
Dans une configuration avec plusieurs ateliers d’assemblage, chacun est
MapReduce donc spécialisé pour traiter une ou plusieurs catégories. Bien entendu, il
faut s’assurer que chaque catégorie est prise en charge par un atelier.
C’est le rôle d’une nouvelle machine, le répartiteur

03

02

05
37
MapReduce: Exemple Explicatif (Le jus de pomme)
Configuration avec plusieurs ateliers d’assemblage
Dans une configuration avec plusieurs ateliers d’assemblage, chacun est
MapReduce donc spécialisé pour traiter une ou plusieurs catégories. Bien entendu, il
faut s’assurer que chaque catégorie est prise en charge par un atelier.
C’est le rôle d’une nouvelle machine, le répartiteur

03

02

05
38
MapReduce: Exemple Concret
Exemple classique : le comptage de mots

MapReduce Fichiers d'entrée textuels


On veut connaître le nombre d'occurrences de chacun des mots dans ces fichiers
Il faut décider :
• De la manière dont on découpe les textes
• Des couples à émettre lors du Map appliqué à chaque morceau de texte
• Du traitement à opérer lors du regroupement des clés communes (Reduce)
03
Fichier d’entrée

Celui qui croyait au ciel Celui qui n'y croyait


(Louis Aragon, La rose et le
pas […]
02qui fait le délicat Réséda, 1943, fragment)
Fou
Fou qui songe à ses querelles

Pour simplifier, on retire tout symbole de ponctuation et caractères spéciaux. On


passe l'intégralité du texte en minuscules 05
39
MapReduce: Exemple Concret
celui qui croyait au ciel
1
celui qui n y croyait pas
MapReduce Découpage des données d'entrée :
fou qui fait le délicat par exemple par ligne
fou qui songe a ses querelles Ici, 4 unités de traitement après découpage

2 MAP
On doit déterminer la clef à utiliser Notre opération03MAP sera aussi très simple: on va parcourir
pour note opération MAP et écrire le le fragment et pour chacun des mots générer le couple
code de l’opération MAP elle-même clef/valeur: (MOT,1). La valeur indique ici l’occurrence pour
Puisqu’on s’intéresse aux occurrences cette clef, puisqu’on a croisé le mot une seule fois, on donne
des mots dans le texte, et qu’à chaque la valeur 1
terme on aura après l’opération 02
REDUCE un résultat pour chacune des
clefs distinctes, la clé qui s’impose
logiquement est le mot-lui-même.
05
40
MapReduce: Exemple Concret
Le code de notre opération MAP sera donc (en pseudo code)

POUR MOT dans LIGNE, FAIRE:


MapReduce GENERER COUPLE (MOT;1)

2 MAP

celui qui croyait au ciel 03


(celui;1) (qui;1) (croyait;1) (au;1) (ciel;1)

celui qui n y croyait pas (celui;1) (qui;1) (ny;1) (croyait;1) (pas;1)

fou qui fait le délicat (fou;1) (qui;1) (fait;1) (le;1) (delicat;1)


02
fou qui songe a ses querelles (fou;1) (qui;1) (songe;1) (a;1) (ses;1) (querelles;1)

Opération Map :
Séparation de l'unité en mots (selon les espaces)
05
Emission d'une paire <mot,1> pour chaque mot
41
MapReduce: Exemple Concret
(celui;1) (celui; 1) (fou;1) (fou;1)

(qui;1) (qui;1) (qui;1) (qui;1) (fait;1) (le;1) (delicate;1)


MapReduce
(croyait;1) (croyait;1) (a;1) (ses;1) (querelles;1)
(au;1) (ny;1) (ciel;1) (pas;1) 3 Après le Map : regroupement
(shuffle) des clés
communes
• Une fois notre opération MAP
4 REDUCE effectuée (de manière distribuée),
qui: 4 Hadoop groupera (shuffle) tous les
• L’opération REDUCE sera appelée
celui: 2 couples par clef commune.
pour chacun des groupes/clef
croyait: 2
distincte
02 à fou: 2
• Elle va simplement consister
au: 1
additionner toutes les valeurs liées à
ciel: 1
la clef spécifiée
ny: 1
TOTAL=0 05 pas: 1
POUR COUPLE dans GROUPE, FAIRE: fait: 1
TOTAL=TOTAL+1 […] 42
RENVOYER TOTAL
MapReduce: Exemple Concret-Conclusion

• Notre exemple est évidemment trivial et son exécution aurait été instantanée même
MapReduce
sur une machine unique, mais il est utile: on pourrait tout à fait utiliser les mêmes
implémentations de MAP et REDUCE sur l’intégralité des textes d’une bibliothèque
Française, et obtenir ainsi un bon échantillon des mots les plus utilisés dans la langue
Française

• L’intérêt du modèle MapReduce est qu’il nous suffit de développer les deux
opérations réellement importantes du traitement MAP et REDUCE et de bénéficier
automatiquement de la possibilité d’effectuer le traitement sur un nombre variable
de machines de manière distribuée

02

05
43
MapReduce: Expliqué autrement

MapReduce

02

05is Map-Reduce? »
Posté par Mirko Krivanek: « What
https://www.datasciencecentral.com/forum/topics/what-is-map-reduce 44
MapReduce: Le fameux exemple de Graphe social

MapReduce On suppose qu'on administre un réseau social comportant des millions d'utilisateurs.
Pour chaque utilisateur, on a dans notre base de données la liste des utilisateurs qui sont
ses amis sur le réseau (via une requête SQL).
On souhaite afficher quand un utilisateur va sur la page d'un autre utilisateur une indication
« Vous avez N amis en commun ».
On ne peut pas se permettre d'effectuer une série de requêtes SQL à chaque fois que la
page est accédé (trop lourd en traitement).
On va donc développer des programmes MAP et REDUCE pour cette opération et exécuter
02
le traitement toutes les nuits sur notre base de données, en stockant le résultat dans une
nouvelle table.

05
45
MapReduce: Le fameux exemple de Graphe social
Nos données d’entrée sont sous la forme Utilisateur=>Amis
Split
MapReduce

Puisqu’on est intéressé par l’information« amis en commun entre deux utilisateurs »
et qu’on aura à terme une valeur par clef, on va choisir pour clef la concaténation
entre deux utilisateurs.
Par exemple, la clef «A-B » désignera « les amis en commun des utilisateurs A et B »
02
On peut segmenter les données par ligne

05
46
MapReduce: Le fameux exemple de Graphe social
Notre opération MAP va se contenter de prendre la liste des amis fournie en entrée et va
générer toutes les clefs distinctes possibles à partir de cette liste. La valeur sera simplement
MapReduce
la liste d’amis, telle quelle.
On fait également en sorte que la clef soit toujours triée par ordre alphabétique (clef « B-A»
sera exprimée sous la forme « A-B»)
Mapper
Le pseudo code de notre opération MAP sera donc:

02

Pour: 05
On obtient:
47
MapReduce: Le fameux exemple de Graphe social
Pour la seconde ligne: On obtiendra:

MapReduce

Pour la troisième ligne: On obtiendra:

Et ainsi de suite pour le reste des lignes……

02

05
48
MapReduce: Le fameux exemple de Graphe social
Une fois l’opération MAP effectuée, Hadoop va récupérer les couples (clef;valeur)

MapReduce
de tous les fragments et les grouper par clef distincte.

SHUFFLE

02
On obtient bien, pour chaque clef « USER1-USER2 », deux listes d’amis: les amis de
USER1 et ceux de USER2

05
49
MapReduce: Le fameux exemple de Graphe social
Il nous faut enfin écrire notre programme REDUCE (en Pseudo-code)
REDUCE
MapReduce
Il va recevoir en entrée toutes les valeurs associées à une clef.
Son rôle va être très simple: déterminer quels sont les amis qui apparaissent dans
la liste (les valeurs) qui nous sont fournies

02

05
50
MapReduce: Le fameux exemple de Graphe social
-Conclusion-
En utilisant le modèle MapReduce, on a ainsi pu créer deux programmes très simples de
MapReduce
quelques lignes de code seulement, qui permettent d’effectuer un traitement somme
assez complexe.
Mieux encore notre traitement est parallélisable: même avec des dizaines de millions
d’utilisateurs, du moment qu’on a assez de machines au sein du cluster Hadoop, le
traitement sera effectué rapidement. Pour aller plus vite, il nous suffit de rajouter plus de
machines.
Pour notre réseau social, il suffira d’effectuer ce traitement toutes les nuits à heure fixe
et de stocker les résultats02
dans une table. Ainsi lorsqu’un utilisateur visitera la page d’un
autre utilisateur, un seul SELECT dans la base suffira pour obtenir la liste des amis en
commun avec un poids en traitement très faible pour le serveur.
05
51
MapReduce V1 (MRv1): Composants
MapReduce v1 intègre trois composants
API
MapReduce
• Pour permettre au programmeur l’écriture
d’applications MapReduce
Framework
• Services permettant l’exécution des Jobs MapReduce,
le Shuffle/Sort…

Resource Management
• Infrastructure pour gérer les noeuds du cluster, allouer
des ressources et ordonnancer les jobs
02

05
51
MapReduce V1 (MRv1): Daemons
JobTracker TaskTracker

MapReduce • Reçoit la tâche à exécuter (un • En communication constante avec le


.jar Java) ainsi que les données JobTracker
d’entrée (nom des fichiers
stockés sur HDFS) et le • Reçoit les opérations simples à effectuer
répertoire où stocker les (MAP/Reduce) ainsi que les blocs de données
données de sortie (toujours correspondantes.
sur HDFS) • S’exécute sur chacun des nœuds pour exécuter
• Divise le travail sur les Mappers les vraies tâches de Map- Reduce: il y a
et Reducers, s’exécutant sur les un TaskTracker sur chaque machine du cluster
différents nœuds • Choisit en général de traiter (Map ou Reduce)
• Il y a un seul JobTracker d’un bloc sur la même machine que lui
02 sur une
seule machine du cluster • S’il est déjà occupé, la tâche revient à un autre
Hadoop tracker, qui utilisera le réseau (rare)
• Le JobTracker est en
communication avec le 05
NameNode de HDFS et sait donc 52
où sont les données.
MapReduce V1 (MRv1): Fonctionnement
Un job Map-Reduce (ou une Application Map-Reduce) est divisé sur
plusieurs tâches appelées mappers et reducers
MapReduce
• Chaque tâche est exécutée sur un nœud du cluster
• Chaque nœud a un certain nombre de slots prédéfinis:
- Map Slots
- Reduce Slots
Un slot est une unité d’exécution qui représente la capacité du TaskTracker à
exécuter une tâche (map ou reduce) individuellement, à un moment donné
Le JobTracker se charge à la fois:
• D’allouer les ressources (mémoire, CPU…) aux différentes tâches
• De coordonner l’exécution des jobs Map-Reduce
• De réserver et ordonnancer les slots, et de gérer les fautes en réallouant
les slots au besoin 02

05
53
MapReduce V1 (MRv1): Fonctionnement

MapReduce

02

05
54
MapReduce V1 (MRv1): Fonctionnement
Le JobTracker
1. Le client (un outil Hadoop console ) va soumettre le travail à effectuer au JobTracker:
MapReduce
un archive java.jar implémentant les opérations Map et Reduce. Il va également
soumettre le nom des fichiers d’entrée et l’endroit où stocker les résultats.

2. Le JobTracker communique avec le NameNode HDFS pour savoir où se trouvent les


blocs correspondants aux noms de fichiers donnés par le client.

3. Le JobTracker, détermine quels sont les nœuds TaskTracker les plus appropriés, c.à.d
ceux qui contiennent les données sur lesquelles travailler sur la même machine ou le
plus proche possible (même rack/rack proche)

4. Pour chaque « morceau» des données d’entrée, le JobTracker envoie au TaskTracker


02
sélectionné le travail à effectuer (MAP/REDUCE) et les blocs de données
correspondants

05
55
MapReduce V1 (MRv1): Fonctionnement
Le JobTracker
5. Le JobTracker communique avec les nœuds TaskTracker en train d'exécuter les tâches.
MapReduce Ils envoient régulièrement un « heartbeat », un message signalant qu'ils travaillent
toujours sur la sous-tâche reçue. Si aucun heartbeat n'est reçu dans une période donnée,
le JobTracker considère la tâche comme ayant échouée et donne le même travail à
effectuer à un autre TaskTracker.

6. Si par hasard une tâche échoue (erreur java, données incorrectes, etc.), le TaskTracker
va signaler au JobTracker que la tâche n'a pas pu être exécutée. Le JobTracker va alors
décider de la conduite à adopter: redonner la sous-tâche à un autre TaskTracker,
demander au même TaskTracker de ré-essayer, marquer les données concernées comme
invalides, etc. il pourra même blacklister le TaskTracker concerné comme non-fiable dans
certains cas
02

05
56
MapReduce V1 (MRv1): Fonctionnement
Le JobTracker
7. Une fois que toutes les opérations envoyées aux TaskTracker (MAP +REDUCE) ont été
MapReduce effectuées et confirmées comme effectuées par tous les nœuds, le JobTracker marque la
tâche comme « effectuée ».

Des informations détaillées sont disponibles (statistiques, TaskTracker ayant posé


problème, etc.).

Par ailleurs, on peut également obtenir à tout moment de la part du JobTracker

des informations sur les tâches en train d'être effectuées: étape actuelle (MAP,

SHUFFLE, REDUCE), pourcentage de complétion, etc.


02

05
57
MapReduce V1 (MRv1): Fonctionnement
Le TaskTracker
Le TaskTracker dispose d'un nombre de « slots » d'exécution. A chaque« slot » correspond une
MapReduce tâche exécutable (configurable). Ainsi, une machine ayant par exemple un processeur à 8 cœurs
pourrait avoir 16 slots d'opération configurés.

Lorsqu'il reçoit une nouvelle tâche à effectuer (MAP, REDUCE, SHUFFLE) depuis le JobTracker, le
TaskTracker va démarrer une nouvelle instance de Java avec le fichier .jar fourni par le
JobTracker, en appelant l'opération correspondante.

Une fois la tâche démarrée, il enverra régulièrement au JobTracker ses messages heartbeats. En
dehors d'informer le JobTracker qu'il est toujours fonctionnels, ces messages indiquent
également le nombre de slots disponibles sur le TaskTracker concerné.

Lorsqu'une sous-tâche est02terminée, le TaskTracker envoie un message au JobTracker pour l'en


informer, que la tâche se soit bien déroulée ou non (il indique évidemment le résultat au
JobTracker).
05
58
MapReduce V1 (MRv1): Fonctionnement

MapReduce

02

05
59
MapReduce V1 (MRv1): Avantages de
l’architecture
MapReduce
Le principal avantage de ce framework est sa tolérance aux erreurs

Une tâche est transférée d’un nœud à l’autre, et si le nœud principal remarque qu’un nœud a
été silencieux pendant un intervalle de temps plus long que prévu, le nœud principal assigne à
nouveau la tâche à un autre nœud.

Ceci crée une résilience et facilite le lancement de cette structure logicielle sur des serveurs
peu coûteux.

02

05
60
MapReduce V1 (MRv1): Problèmes
Le Job Tracker s’exécute sur une seule machine, et fait plusieurs tâches (gestion de
ressources, ordonnancement et monitoring des tâches…)
MapReduce
Problème de scalabilité: les nombreux datanodes existants ne sont pas exploités, et
le nombre de noeuds par cluster limité à 4000

Si le Job Tracker tombe en panne, tous les jobs doivent redémarrer


Problème de disponibilité
Le nombre de map slots et de reduce slots est prédéfini
Problème d’exploitation: si on a plusieurs map jobs à exécuter, et que les
map slots sont pleins, les reduce slots ne peuvent pas être utilisés, et vice- versa
Le Job Tracker est fortement intégré à Map Reduce
Problème d’intéroperabilité: impossible d’exécuter des applications non-
MapReduce sur HDFS
02

MapReduce V2 05
61
MapReduce V2 (MRv2): YARN
Présentation
YARN (Yet-Another-Resource-Negotiator) appelé aussi MRv2
MapReduce C’est une évolution du framework MapReduce

YARN répond aux problématiques suivantes du Map Reduce:

• Problème de limite de « Scalability »: par une meilleure séparation de la gestion de


l’état du cluster et des ressources.

• Problème d’allocation des ressources

02

05
62
MapReduce V2 (MRv2): Composants

Pas de notion de slots:


MapReduce
les nœuds ont des ressources (CPU, mémoire..) allouées aux applications à la demande

Définition de nouveaux démons

La plupart des fonctionnalités du Job Tracker sont déplacées vers Application Master

Un cluster peut avoir plusieurs Application Masters

Support les applications MR et non-MR

02

05
63
MapReduce V2 (MRv2): Architecture

MapReduce

02

05
64
MapReduce V2 (MRv2): Architecture

MapReduce

02

05
65
MapReduce V2 (MRv2): Architecture

MapReduce

02

05
66
MapReduce V2 (MRv2): Architecture

MapReduce

02

05
67
MapReduce V2 (MRv2): Architecture

MapReduce

02

05
68
MapReduce V2 (MRv2): Architecture

MapReduce

02

05
69
MapReduce V2 (MRv2): Déroulement d’une
exécution
1. Un client se connecte au ResourceManager, et annonce l’exécution du programme /
fournit son code (jar).
MapReduce
2. L’Application Manager du ResourceManager prépare un container libre pour y
exécuter l’Application Master du programme (son main).
3. L’application Master du programme est lancé; il s’enregistre immédiatement auprés
du ResourceManager et effectue ses demandes de ressources (containers pour
exécuter tâches map et reduce, par exemple).
4. Il contacte alors directement les NodeManager correspondants aux containers qui lui
ont été attribués pour leur soumettre les tâches.
5. Pendant l’exécution des différentes tâches, les containers (par le biais des démons
NodeManager) mettent à jour l’Application Master sur leur statut continuellement. En
cas de problème, celui-ci peut demander de nouveaux containers au Resource
Manager pour ré-exécuter une tâche.
02 obtenir une mise à jour sur le statut de l’exécution soit
6. L’utilisateur peut par ailleurs
en contactant le ResourceManager, soit en contactant l’Application Master
directement.
7. Une fois toutes les tâches exécutées, l’Application Master signale le ResourceManager
et s’arrète. 05
8. Le ResourceManager libère alors le container occupé restant, qui exécutait le code de
l’Application Master. 70
MapReduce V2 (MRv2): Déroulement d’une
exécution
MapReduce

02

05
71
MapReduce V2 (MRv2): Déroulement d’une
exécution
MapReduce

02

05
72
MapReduce V2 (MRv2): Déroulement d’une
exécution
MapReduce

02

05
73
MapReduce V2 (MRv2): Déroulement d’une
exécution
MapReduce

02

05
74
MapReduce V2 (MRv2): Déroulement d’une
exécution
MapReduce

02

05
75
MapReduce V2 (MRv2): Déroulement d’une
exécution
MapReduce

02

05
76
MapReduce V2 (MRv2): Déroulement d’une
exécution
MapReduce

02

05
77
MapReduce V2 (MRv2): Déroulement d’une
exécution
MapReduce

02

05
78
MapReduce V2 (MRv2): Déroulement d’une
exécution
MapReduce

02

05
79
MapReduce V2 (MRv2): Déroulement d’une
exécution
MapReduce

02

05
81
MapReduce V2 (MRv2): Déroulement d’une
exécution
MapReduce

02

05
82
MapReduce V2 (MRv2): Déroulement d’une
exécution
MapReduce

02

05
83

Vous aimerez peut-être aussi