Cet article sera le premier d’une série 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 communauté 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 systè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 (128 MB pour les versions plus récentes de Hadoop), ce qui est supérieure à celle des systèmes de fichiers standards. Lorsque la taille d’une donnée est inférieure à 64 MB, elle n’occupe pas toute la taille du bloc, 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 blocs démandés. Lors de la création d’un fichier au sein de HDFS, l’utilisateur peut spécifier un nombre de réplication. Ainsi HDFS placera ces données sur plusieurs datanodes ce qui permet leurs disponibilités pour les workers et une extraction plus rapide.
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 permettant 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 blocs de données stockés sur HDFS pour en sortir des données “correctement formatées”. Les données sont considérées comme “correctement formaté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 agréger. Les tri et les regroupement sont effectués par Hadoop avant de présenter les données aux reducers. Les reducers vont tous collaborer pour produire le résultat final (les données en sortie).
Pour illustrer ce processus, on peut imaginer qu’on possède plusieurs livres (au format texte) et l’objectif étant de calculer le nombre d’apparition de chacun des mots de ces livres. Pour ce faire, notre fonction map peut traiter les fichiers et produire une ou plusieurs listes des mots ayant apparus dans chaque livre. Ensuite la fonction de reduce groupera ces listes par mot et calculera le total pour chaque mot. Le résultat sera produit sous forme d’une 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 en détail dans l’article qui abordera 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.