Programmation parallèle et distribuée (GIF-4104/7104) 5a - (hiver 2015) Marc Parizeau, Département de génie électrique et de génie informatique
Plan Données massives («big data») Architecture Hadoop distribution des données processus map / shuffle / reduce extensibilité Exemples 2
Données massives Voici quelques données à propos du WWW en 2013 14 x 10 12 pages web sur Internet 48 x 10 9 pages indexées par Google 14 x 10 9 pages indexées par Bing 672 x 10 18 octets de données accessibles 44 x 10 18 octets de traffic Internet Temps de lecture d un disque de 4 To 11 heures (en supposant 100 Mo/sec) 3
Problèmes trop de données pour un seul ordinateur; les données ne rentrent même pas dans la mémoire d un ordinateur; elles ne rentrent pas non plus sur un seul disque! Solution utiliser Hadoop 4
Hadoop Projet Apache (http://hadoop.apache.org/) logiciel libre implanté en Java en fait, une boite à outils contenant divers composants Créé en 2004 par Doug Cutting, à partir d articles publiés par Google le nom Hadoop était celui de l éléphant en pluches de son fils Pour la programmation distribuée sur de grosses grappes de calcul pas nécessairement très performantes mais qui résistent aux défaillances (elles surviennent fréquemment) et qui sont extensibles (linéairement) 5
Qui l utilise? 6
Traitement vs data Traditionnellement, on sépare les traitements des données Cependant, beaucoup d applications peu exigeante en CPU viennent taxer les entrées / sorties 7
Avec Hadoop, on tente de regrouper le traitement et le stockage sur un même nœud le code est généralement petit relativement aux données 8
Résilience Pour un grand nombre de nœuds de traitement, les défaillances sont communes à chaque semaine parfois à chaque jour Hadoop est conçu pour résister aux pannes les données sont répliquées les tâches sont redémarrées au besoin 9
Abstraction de la complexité Beaucoup de la complexité inhérente aux applications concurrentes et distribuées est assumée par Hadoop l utilisateur n a qu à définir un petit nombre de composants et à spécifier des interfaces simples entre ces composants Tous les défis tels que la gestions des courses critiques, la construction de pipeline, le partitionnement des données, etc., sont gérés automatiquement L utilisateur peut se concentrer sur les spécificités de son application 10
Environnement Hadoop Deux composants principaux HDFS : «Hadoop Distributed File System» MapReduce : cadriciel pour le traitement distribué Mais également d autres composants HBase : «Hadoop column database» Pipes : permet de travailler en C++ Streaming : permet de travailler avec un langage quelconque, en utilisant les «standard input/output» Spark : permet d exécuter Hadoop en mémoire (sans passer par des disques). etc. 11
HDFS Système de fichiers distribué Inspiré du système équivalent chez Google apparaît comme un seul disque mais est en fait distribué sur les nœuds de la grappe Résiste aux pannes de disque les fichiers sont découpés en gros blocs les blocs sont copiés sur plusieurs disques Conçu pour un nombre modéré de gros fichiers mal adapté à un grand nombre de petits fichiers 12
HDFS : architecture Deux types de nœuds Namenode : pour gérer les métadonnées Datanode : pour stocker les blocs de données 13
HDFS : fichiers et blocs 14
HDFS : taille des blocs Typiquement 64 Mo ou 128 Mo par défaut 64 Mo afin d amortir les mouvements de têtes de lecture des disques Les petits fichiers gaspillent cependant beaucoup d espace! 15
HDFS : réplication Les Namenodes déterminent les l emplacement des bloc répliqués En tenant compte de l emplacement des cabinets on recherche un équilibre entre la fiabilité et la performance afin notamment de réduire la bande passante Par défaut on sauvegarde 3 copies dans un nœud d un cabinet dans un nœud différent du même cabinet dans un cabinet différent 16
HDFS : écriture 17
HDFS : lecture 18
MapReduce : architecture On commence par déplacer les données HDFS qui s occupe de les distribuer pour vous Puis on effectue un Map / Shuffle / Reduce 19
20
Couples (clé:valeur) Avec Hadoop, on manipule toujours des couples (clé: valeur) autant en entrée qu en sortie Et on définit des fonctions «map» et «reduce» map : (c1: v1) > liste de (c2: v2) reduce : (c2: liste de v2) > list de (c3: v3) Algorithme 1. on applique map à tous les couples (c1: v1) 2. map génère une liste des couples (c2: v2) intermédiaires 3. les couples intermédiaires de même clés sont groupées et triées afin de produire le couple (c2: liste de v2) 4. reduce est appliquée sur les couples (c2: liste de v2) afin de produire de nouveaux couples (c3: v3) 21
Exemple simple Compter les mots dans un corpus d une multitude de fichiers chacun de grande dimension On veut connaître la liste des mots et leur fréquence respective Le «map» reçoit des lignes de texte et pour chaque mot de la ligne produit le couple (mot: 1) Le «reduce» reçoit alors en entrée des couples (mot: [liste_de_nombres]) et produit en sortie des couples (mot: fréquence), après avoir fait la somme des nombres de la liste 22
Comptage et somme 23
24
nœud 1 nœud 2 25
Autre exemple Dans un corpus, compter le nombre de mots ayant une longueur de 1, 2, 3, 4, etc. map(mot) > (long: mot) reduce(long: liste de mots) > (long: nombre) 26
Étape du «shuffle» On applique simplement une fonction de hachage («hash function») afin d associé un id unique à chaque nœud en supposant n nœuds de réduction hash(clé) % n Le nombre de nœuds de réduction est fixé à l avance ainsi chaque processus de map peut déterminer luimême à qui transmettre ses couples de sortie 27
Comptage et somme 29
L algorithme précédent engendre beaucoup de valeurs unitaires; le map suivant corrige le problème: On peut aussi faire appel à une fonction d agrégation («combiner») 30
31
Traitement de graphes Problème: on possède un réseau d entités et de relations pour chaque entité, on veut calculer son état qui dépend de celui de ses voisins Cet état peut par exemple représenter une agrégation de propriétés associées aux voisins Solution: le réseau est représenté par un ensemble de sommets et chacun de ceux-ci est associé à une liste des identifiants des sommets adjacents Le «map reduce» est appliqué de façon itérative en transmettant des messages aux voisins; à chaque itération le sommet ajuste son état en fonction des messages reçus; le processus se termine après un nombre fixe d itérations ou lorsqu aucun changement d état survient. 32
33
34
Conclusion Hadoop est un cadriciel qui permet de distribuer des tâches de type MapReduce sur une grappe de serveurs en fait un map suivi d un shuffle suivi d un sort suivi d un reduce les maps sont affectés à un grand nombre de nœuds les reduces aussi, potentiellement aux mêmes nœuds les nombres de maps et de reduces sont programmables Hadoop possède une grande extensibilité car les tâches MapReduce sont indépendantes («they share nothing») D autres composants de plus haut niveau sont également disponibles 35
Remarques diverses Les processus de map ne traitent typiquement que les blocs des fichiers qui sont physiquement stockés sur le nœud local Ce sont les lignes du fichier qui sont typiquement transmises aux processus de map en fait, le processus reçoit un couple (offset: ligne) HDFS va répartir automatiquement les différents blocs des différents fichiers sur l ensemble des nœuds On peut appliquer un MapReduce sur la sortie d un autre MapReduce on crée ainsi une cascade de traitement 36
Pour en savoir plus Tutoriels http://developer.yahoo.com/hadoop/tutorial/ http://www.coreservlets.com/hadoop-tutorial/ https://hadoop.apache.org/docs/r1.2.1/ mapred_tutorial.html Design patterns http://highlyscalable.wordpress.com/2012/02/01/ mapreduce-patterns/ 37