Pour savoir où on va, il faut savoir d'où l'on vient

Vous avez
une question ?
Un projet ?

Contactez nous !
 

Contactez-nous

Vous avez une question ? un projet ? 
Vous souhaitez plus d'informations sur un produit ? sur notre offre ? 
Contactez-nous, on vous répond sous 4H.

retour

MapReduce et Hadoop

MapReduce et Hadoop

Nous avons parlé jusqu’ici de la répartition de charge temps-réel, c'est-à-dire portant sur le traitement synchrone de requêtes. Mais certains travaux batch, portant sur des téraoctets de données, doivent également être partitionnés.

MapReduce est un mécanisme de partitionnement de tâches en vue d’une exécution distribuée sur un grand nombre de serveurs. Le principe est simple : il s’agit de décomposer une tâche en tâches plus petites, ou plus précisément découper une tâche portant sur de très gros volumes de données en tâches identiques portant sur des sous-ensembles de ces données. Les tâches (et leurs données) sont ensuite dispatchées vers différents serveurs, puis les résultats sont récupérés et consolidés. La phase amont, de décomposition des tâches, est la partie map, tandis que la phase aval, la consolidation des résultats est la partie reduce.

Le principe est simple donc, mais l’apport de l’algorithme MapReduce est de bien conceptualiser, en vue de de normaliser les opérations d’intendance de sorte qu’un même framework puisse prendre en charge une diversité de tâches partitionnables, ce qui permettra aux développeurs de se concentrer sur les traitements proprement dits, tandis que le framework prend en charge la logistique de la répartition.

La normalisation autour de ces principes s’appuie sur la manipulation de couples (clé, valeur). La tâche initiale est un couple (clé, valeur), et chacune des tâches intermédiaires également. Chaque tâche intermédiaire retourne un résultat sous la forme d’un couple (clé, valeur), et la fonction reduce combine tous ces résultats en un couple (clé, valeur) unique.

L’algorithme MapReduce est principalement destiné à des tâches de type batch, de très grande ampleur, portant sur de très grands volumes de données. La décomposition typique consiste à découper le volume de données initial en N volumes plus petits, qui peuvent être traités séparément. L’exemple souvent pris pour illustration est le comptage du nombre d’occurrence de chaque mot d’un très grand fichier. Le grand fichier est décomposé en plus petits fichiers, et les occurrences sont comptées sur chacun d’eux. La fonction reduce additionne les décomptes obtenus sur chaque fichier intermédiaire.

La modélisation a été proposée initialement (2004) par des informaticiens de Google pour mieux gérer les gigantesques tâches portant sur des téra- ou péta-octets de données, et les distribuer sur des dizaines de milliers de serveurs. Puis Doug Cutting, le créateur de Lucene, s’en saisit et lance le projet Hadoop, dans le cadre de la fondation Apache. Cutting sera ensuite embauché par Yahoo pour refondre toute la technologie de recherche du portail, en intégrant Hadoop et HDFS, qui restera intégralement open source tout en intégrant l’essentiel des développements financés par Yahoo.

Dans Hadoop, toutes les entités manipulées, les couples (clé, valeur), doivent être sérialisables, de sorte que l’on puisse les transmettre d’un serveur à un autre. Mais, puisqu’on a dit qu’il s’agissait de très gros volumes, il faut aussi optimiser l’utilisation de la bande passante sur le réseau. C’est pourquoi MapReduce est généralement utilisé en combinaison avec un système de gestion de fichiers distribué, dans le cas de Hadoop il s’agit de HDFS. Dans cette logique, chaque serveur est à la fois un outil de calcul et un outil de stockage. La fonction de mapping cherchera alors à attribuer chaque tâche à un serveur qui stocke déjà les données correspondantes.

Enfin, puisqu’il est destiné à fonctionner sur des milliers de serveurs, Hadoop gère également la tolérance aux pannes, c'est-à-dire qu’il réaffecte les tâches de manière transparente en cas de panne d’un serveur.