MapReduce était un modèle introduit par Google comme méthode de résolution d'une classe de problèmes de Big Data avec de grands clusters de machines peu coûteuses. Hadoop intègre ce modèle au cœur de son processus de travail. Cet article donne une idée introductive du modèle MapReduce utilisé par Hadoop pour résoudre le problème du Big Data.
Aperçu
Une application Big Data typique traite un grand ensemble de données évolutives. L'utilisation d'une seule base de données pour stocker et récupérer peut constituer un goulot d'étranglement majeur pour le traitement. Cela est particulièrement vrai si nous utilisons une base de données monolithique pour stocker une énorme quantité de données, comme nous pouvons le voir avec les bases de données relationnelles et comment elles sont utilisées comme référentiel unique. Cela ne fonctionnera pas, surtout que nous devons gérer de grands ensembles de données dans un environnement distribué.
Google a utilisé l'algorithme MapReduce pour remédier à la situation et a proposé une solution. L'idée est de diviser la tâche la plus importante en parties gérables plus petites et de les répartir sur les ordinateurs du réseau pour le traitement. Le résultat ainsi obtenu est intégré pour former le jeu de données final. Cette idée est devenue la base du projet Hadoop de Doug Cutting. Hadoop utilise cet algorithme pour traiter les données en parallèle avec d'autres afin de fournir une analyse statistique complète sur de grands ensembles de données. Par conséquent, Hadoop peut être grossièrement divisé en deux parties :
- Traitement : Exploité par l'algorithme MapReduce
- Stockage : Exploité par HDFS
Hadoop MapReduce est donc une implémentation de l'algorithme développé et maintenu par le projet Apache Hadoop. Il fonctionne comme une machine en soi où nous fournissons une entrée et le moteur répond en transformant l'entrée en sortie rapidement et efficacement, en passant par plusieurs étapes. Cette idée ouvertement simpliste nécessite un peu d'élaboration au fur et à mesure qu'elle suit la ligne.
MapReduce
MapReduce est un modèle de programmation parallèle utilisé pour le traitement rapide des données dans un environnement d'application distribué. Il fonctionne sur des ensembles de données (plusieurs téraoctets de données) répartis sur des clusters (des milliers de nœuds) dans le réseau matériel de base. Les programmes MapReduce s'exécutent sur Hadoop et peuvent être écrits dans plusieurs langages :Java, C++, Python et Ruby. Les principales caractéristiques du programme MapReduce sont qu'il a intrinsèquement intégré l'esprit de parallélisme dans les programmes. Cela le rend idéal pour l'analyse de données à grande échelle qui peut tirer parti du modèle de parallélisme dans sa pratique pour extraire plus efficacement et plus rapidement les résultats d'une infrastructure existante.
Comment ça marche
Hadoop MapReduce divise les tâches en plusieurs étapes, chacune avec un ensemble important de fonctions pour extraire le résultat souhaité du Big Data. Il fonctionne sur les nœuds d'un cluster hébergé sur une collection de serveurs de base. Le processus commence par la demande de l'utilisateur qui exécute le moteur MapReduce et se termine par le stockage du résultat dans HDFS.
Nous pouvons lancer une tâche MapReduce à exécuter en appelant le JobClient.runJob(conf) méthode. C'est une méthode pratique pour créer un nouveau JobClient exemple. Cela appelle à son tour submitJob() et interroge la progression du travail toutes les secondes et signale à la console s'il y a un changement depuis la génération du dernier rapport. Cela a un effet d'entraînement et déclenche un ensemble d'opérations en coulisses. La première étape consiste à rechercher et à lire le fichier d'entrée contenant les données brutes. Le format de fichier est arbitraire et doit être converti dans un format adapté au traitement. C'est le travail pour InputFormat et le RecordReader(RR) . Le Format d'entrée utilise la fonction appelée InputSplit pour diviser le fichier en parties plus petites. Le RecorReader(RR) transforme ensuite les données brutes et les rend disponibles pour le traitement par map .
Cartographie
Une fois que les données peuvent être mappées, il crée une instance distincte pour chaque paire d'entrées (clé et valeur) et commence le traitement. Dès que la fonction de mappage commence à produire une sortie, elle n'est pas directement écrite sur le disque ; au lieu de cela, il est stocké dans la mémoire tampon pour effectuer un pré-tri. Chaque carte maintient un tampon circulaire où elle redirige la sortie. En cas de dépassement de la taille de seuil, le débordement de contenu est réécrit sur le disque. Il divise ensuite les données en partitions acceptables pour le réducteur vers lequel les données sont ensuite redirigées. Cependant, tous ces travaux se déroulent de manière simultanée sur plusieurs nœuds du cluster Hadoop. Une fois les tâches de carte terminées, les résultats intermédiaires sont accumulés dans la partition, et le brassage et le tri ont lieu pour optimiser la sortie afin que la réduction prenne le relais en entrée.
Réduire et fusionner
Ce que reduce obtient est également une clé, une paire de valeurs et agit de la même manière que la carte. Il rassemble la sortie de carte de plusieurs tâches de carte dans le cluster et ne commence le traitement qu'une fois le mappage terminé. Il dispose d'un ensemble de threads de copie pour fusionner et déverser sur le disque la sortie fournie par la carte. Au fur et à mesure que les copies s'accumulent sur le disque, un thread d'arrière-plan se charge de les fusionner dans des fichiers triés plus volumineux. Il fournit également la sortie sous la forme d'une clé, une paire de valeurs et peut nécessiter un reformatage par le OutputFormat avant que l'application puisse accepter le format. Le OutputFormat prend finalement la paire clé-valeur et réécrit les données traitées dans HDFS. Ici, RecordWriter joue le rôle principal, un peu comme RecordReader , sauf qu'il participe à la lecture de HDFS au début.
Conclusion
Ce n'est que la pointe de l'iceberg. Il y a beaucoup de détails complexes et bien plus se passe dans les coulisses. En bref, Hadoop MapReduce offre la possibilité de diviser le Big Data en parties plus petites et gérables, de les traiter en parallèle sur un cluster distribué et, enfin, de rendre les données disponibles pour une consommation ou un traitement supplémentaire. Aujourd'hui, Hadoop est devenu un écosystème plus large d'outils et de technologies pour résoudre les problèmes de Big Data de pointe et évolue rapidement pour affiner ses fonctionnalités.