Hadoop et MapReduce : introduction

Cet article sera le premier d’une serie qui présentent la mise en oeuvre de ce système ainsi que ses capacités adapté à de grands volumes de données (Big Data). Dans cette une introduction je vais expliquer les principes de Hadoop ainsi que son utilité. Dans la suite des articles on se focalisera sur l’aspect pragmatique de ce framework par l’élaboration d’un exemple, dont le but sera de traiter un grand volume de données. De même, dans les prochains articles, on analysera la configuration et comment le mettre en place.

Qu’est-ce que c’est Hadoop ?
Hadoop est l’acronyme du High-availability distributed object-oriented platform. Il s’agit d’une plate-forme open source qui fournit aussi bien les capacités de stockage que de traitement. La communaité Apache (Yahoo) a repris le modèle MapReduce introduit par Google en 2004 et a proposé sa solution open-source Hadoop .Cette solution est construite autour de 2 concepts fondamenteaux : HDFS et MapReduce. Deux composantes qu’on verra plus en détail par la suite.

Bien qu’il puisse aussi bien s’installer et fonctionner sur une seule machine, la vraie puissance de Hadoop ne sera visible qu’à partir d’un environnement composé de plusieurs ordinateurs (un cluster). Hadoop est donc la réponse à un constat simple : la multiplication de l’espace disque ne va pas avec l’accélération de la lecture des données. La solution serait alors de distribuer les données en plusieurs parties pour les stocker sur plusieurs machines. L’enjeu se situe alors dans le mécanisme qui gère l’accès partagé à cette ressource.

Cependant, ce partage des ressources amène quelques nouvelles problématiques à résoudre telles que: comment garantir l’intégrité des données ? comment composer correctement et rapidement une donnée finale à partir de plusieurs sources ? Hadoop apporte sa propre solution à ces deux problématiques à travers ses concepts déjà mentionnés : HDFS et MapReduce.


Qu’est-ce que c’est HDFS ?
Le modèle MapReduce ne définit aucun sytème de fichier à utiliser. Hadoop Distributed Filesystem (HDFS) est un système de fichiers distribué fournit par Hadoop. HDFS utilise le réseau pour manipuler et accéder aux données et utilise les ressources des autres ordinateurs clients présents sur ce réseau. De plus, HDFS est un système de fichier adapté pour travailler avec de très grands volumes des données tel que Google BigTable (1 GB et plus). Le grand plus de ce système est l’universalité. Il n’a pas besoin d’une machine très puissante pour fonctionner correctement tout comme Il a été conçu pour fonctionner sur des machines “ordinaires”.

Le système HDFS intègre un mécanisme de tolérances aux pannes, et peut ainsi garantir la disponibilité et l’intégrité des données malgré une défaillance système (plantage d’une machine). Il permet un traitement rapide des fichiers d’une grande taille, cependant HDFS est moins adapté aux fichiers de fichiers de petite taille.

HDFS permet de rapprocher la lecture de la localisation des fichiers plutôt que de rapprocher les fichiers de la lecture (la localisation des données est une problématique essentielle liée au Big Data) ; en outre, il intégre des interfaces qui permettent aux applications de localiser plus rapidement les ressources demandées dans le cluster (ensemble des machines clientes).

Un block  HDFS désigne un portion de données stockée dans le système de fichier. La taille d’un block est par défaut de 64 MB, ce qui est supérieure à celle des systèmes de fichiers standards. Lorsque la taille d’une donnée est inférieure à 64MB, elle n’oocupe pas toute la taille du block, ce qui représente une autre différence par rapport aux systèmes de fichiers standard.

HDFS met en oeuvre le pattern master-worker, lequel est un modèle de traitement parallèle d’une ou de plusieurs opérations à travers plusieurs workers et un master (un modèle similaire au modèle client/serveur). Dans HDFS, le master orchestre toutes les opérations et maintient la cohérence des méta-données, on l’appelle namenode. C’est lui qui réceptionne la demande du client et la passe directement à ses workers appellés datanodes. Les datanodes stockent et récupèrent les blocks démandés. Lors de la création d’un fichier au sein de HDFS, l’utilisateur peut spécifier un nombre de réplicat. Ainsi HDFS placera ces données sur plusieurs datanodes ce qui permet leurs disponibilités pour les workers et une extraction plus rapide.

 

HDFS Architecture

HDFS Architecture

 

Qu’est-ce que c’est MapReduce ?
Comme on a déjà mentionné, Hadoop est un système de traitement parallèle des données qui met en oeuvre le modèle MapReduce lequel est un modèle de programmation parallèle permetttant de traiter de grands volumes de données. Ce modèle se base sur 2 étapes principales:

Map(), ou étape de mapping (map tasks) : le développeur définit une fonction de mappage dont le but sera d’analyser les données brutes contenues dans les blocks de données stockés sur HDFS pour en sortir des données “correctement formattées”. Les données sont considérées comme “correctement formattées” à partir du moment où elles respectent la forme key-value (clé-valeur).

Reduce(), ou étape de réduction (reduce tasks) : cette tâche récupère les données construites dans l’étape du mappage et s’occupe de les trier et les regroupper dans le but de produire les données en sortie.

Pour illustrer ce processus, on peut imaginer qu’on possède plusieurs livres (au format texe) et l’objectif étant de calculer le nombre d’apparition de chacun des mots de ces livres. Pour ce faire, notre fonction de mapping peut traiter les fichiers et produire une ou plusieurs listes des mots ayant apparus dans chaque livre. Ensuite la fonction de réduction peut grouper ces listes par mot et de n’en produire qu’une seule liste. Le but de jeu est que toutes ces opération soient effectuées sur plusieurs machines tout en gardant les résultats corrects. Grâce à cette parallélisation, le temps de calcul sera totalement optimisé.

Entre ces deux processus peuvent s’incruster d’autres, comme les filtres ou combiner functions. Ceux-ci seront présentés plus exactement dans l’article qui abordera MapReduce en détail.

 

MapReduce

MapReduce

 

Conclusion

Cet  article nous a permis d’introduire le traitement des fichiers dans un système de fichiers distribué. On a vu que HDFS et MapReduce sont deux composantes importantes du système Hadoop. Les articles suivants aborderont la mise en place et la configuration de Hadoop.

 

Leave a Reply