Hadoop et MapReduce : introduction

Hadoop et MapReduce en Java

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com

Plusieurs applications ont atteint leur maturité en matière de la taille des données collectées il y a bien longtemps. Facebook, Wikipedia, Twitter, Yahoo pour ne pas en citer quelques-unes, doivent se confronter quotidiennement à de plusieurs GB de nouvelles données. Ce traitement serait bien plus compliqué sans un outil incontournable qui s'appelle Hadoop.

Cet article sera le premier qui nous montrera les capacités de ce système adapté à de grandes quantités de données. Ce sera une partie introductive dans laquelle on expliquera les principes de Hadoop ainsi qu'on définira ses utilités. Dans d'autres articles on se focalisera sur l'aspect pragmatique de cet outil par l'élaboration d'une application dont le but sera traiter de grands volumes des données. A travers d'article suivants, on analysera la configuration et l'analyse de Hadoop, mais aussi sa mise en place avec une librairie Java.

Qu'est-ce que c'est Hadoop ?
Hadoop est un acronyme du High-availability distributed object-oriented platform. Il s'agit donc d'une plate-forme open source qui fournit aussi bien les capacités de stockage que de traitement. Elle tourne autour des 2 concepts fondamenteaux : HDFS et MapReduce. On les verra plus en détail dans les paragraphes suivants.

Bien qu'il peut aussi bien fonctionner sur une seule machine, sa vraie puissance n'est visible qu'à partir d'un environnement composé de plusieurs ordinateurs. 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 diviser 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 problématiques à résoudre. Avant tout, comment garantir une intégrité de données perpetuelle ? La deuxième question qu'on devrait se poser dans cette architecture est, comment composer correctement et rapidement une donnée finale à partir de plusieurs sources ? Hadoop répond correctement à ces deux questions à travers ses concepts déjà mentionnés : HDFS et MapReduce.

Qu'est-ce que c'est 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. Chaque composant du réseau peut donc accéder à chaque ressource d'autres ordinateurs composant ce réseau. En plus, HDFS est un système adapté au travail avec de grands volumes des données (1 GB et plus). 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 designé pour fonctionner sur les machines ordinaires.

Les objectifs de HDFS sont :

- garantir l'intégrité des données malgré une défaillance système (plantage d'une machine)

- permettre un traitement rapide des fichiers d'une grande taille (GB et plus); HDFS est moins adapté à beaucoup de fichiers d'une petite taille

- rapprocher la lecture de la localisation des fichiers plutôt que de rapprocher les fichiers à la lecture; HDFS intégre des interfaces qui permettent aux applications de localiser plus rapidement les ressources demandées dans le cluster

Les concepts de base de HDFS sont :

- blocks : c'est un endroit dans le système de fichiers qui stocke les fichiers. 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.

- master-worker pattern : ce modèle suppose le traitement parallel d'un ou plusieurs opérations à travers plusieurs workers et un master. Dans HDFS, le master qui ordonne toutes les opérations et maintient la cohérence des méta-données, s'appelle namenode. C'est lui qui réceptionne la demande du client et la passe directement à ses workers qui s'appellent datanodes. Ces datanodes stockent et récupèrent les blocks démandés. Sans le master, HDFS ne pourrait pas fonctionner car ce serait impossible de reconstruire les fichiers recherchés à partir des blocks placés souvent sur des machines différentes.

HDFS est un système très complexe, dont l'explication correcte dans un seul paragraphe est impossible. C'est pourquoi on présentera ce système de fichiers d'une manière plus détaillée, dans un des articles suivants.

Qu'est-ce que c'est MapReduce ?
Comme on a déjà mentionné, Hadoop se caractérise par un traitement des données en parallèle. MapReduce est un modèle de programmation qui permet de traiter de grands volumes de données dans plusieurs processus simultanés. Ce modèle se base sur 2 étapes :

- é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 fichiers stockés sur HDFS pour en sortir les données correctement formattées. Les données sont considérées comme "correctement formattées" à partir du moment où elles se base sur le princip déjà présenté dans l'article introduction au Solr, sur le principe "clé:valeur".

- é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 analyser dans le but d'en extraire les informations les plus importantes.

Pour illustrer ce processus, on peut imaginer qu'on possède plusieurs fichiers avec tous les buteurs de tous les championnats mondiaux depuis 1900. Le but est alors d'extraire une liste des 5 meilleurs buteurs par pays de la décennie. Pour ce faire, notre fonction de mapping peut traiter les fichiers et sortir une liste des buteurs par année. Ensuite la fonction de réduction peut grouper les buteurs par décennie et de n'en garder que 5 meilleurs. 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 combiner functions ou des filtres. Cependant ils seront présentés plus exactement dans l'article qui abordera MapReduce.

L'article nous a permis de bien entrer dans le monde du traitement des fichiers dans un système de fichiers distribué. On a vu que HDFS et MapReduce sont deux paliers importants de ce système basé sur la parallélisation et que grâce à eux, l'analyse et l'écriture peuvent être vraiement rapides. Les articles suivants montreront en quoi consiste cette rapidité et comment la mettre en place.

Bartosz KONIECZNY 08-09-2013 15:53 Hadoop
Moi

Développeur d'applications Internet et journaliste passionné par l'adjectif français. Un aigle polonais orienté vers la progression, volant très haut et écoutant du zouk après les matches du foot français.

Vous appréciez mon travail ?

Pour contribuer au développement de ce site, ou pour remercier pour des articles rédigés, vous pouvez faire un don.

Un conseil Symfony2

A quoi peut être lié le problème "Unknown Entity namespace alias" ?

Ce problème peut apparaître dans Symfony2 parce que le bundle de l'entité peut ne pas être défini dans AppKernel.