Rate this post

Nous sommes entrés dans l’ère du Big Data depuis plusieurs années maintenant. Cette ère se traduit par la génération d’une énorme quantité de données. La valorisation de ces dernières étant l’une des clés de réussite d’une entreprise de nos jours, leurs traitements deviennent primordiaux. Cependant, la manipulation d’un tel volume de données n’est pas prise en charge par les systèmes traditionnels. C’est là que des modèles tels que MapReduce ont été introduits afin de faire face aux défis soulevés par cela.

Dans cet article, nous allons voir ce qu’est MapReduce et la manière de l’utiliser dans les systèmes Big Data.

MapReduce : qu’est-ce que c’est ?

Le map reduce est un modèle algorithmique permettant d’effectuer des calculs parallèles sur des données volumineuses en les répartissant sur un système distribué. Ce programme consiste à diviser le traitement des données en plusieurs petites tâches indépendantes. Ces dernières s’exécutent de manière automatique et parallèle dans des clusters.

Les données à traiter avec MapReduce sont sous forme de fichier contenant des données de différents types (structurées, semi-structurées, non structurées). Et celles issues du traitement se présentent également sous forme de fichier.

Le but en utilisant ce patron cette conception est de réduire le volume de données à traiter puis de consolider le résultat une fois les traitements achevés.

Ce modèle a été initialement créé par Google afin de faciliter l’analyse des résultats des recherches effectuées sur sa plateforme. En effet, en utilisant MapReduce, les données sont traitées directement dans les serveurs standards où elles sont stockées. Cela permet d’éviter l’envoi des données à un autre serveur qui effectue le traitement et ainsi accélérer ce dernier.

De nos jours, il est de plus en plus vulgarisé et plusieurs frameworks permettent de l’implémenter. Le plus populaire de ces frameworks est Hadoop. En le couplant au système de stockage distribué de ce framework, le HDFS, l’utilisation de MapReduce augmente considérablement la vitesse de traitement des informations, et ce sans perdre en efficacité et en fiabilité.

Comment fonctionne-t-il ?

Comme son nom l’indique, MapReduce contient deux grandes parties à savoir la phase Map et Reduce. Cependant, il existe une autre étape intermédiaire entre ces deux phases à savoir la partie Shuffle. Nous allons voir chacune de ces étapes dans les sections qui suivent.

Map

Il faut savoir que l’exécution de la phase Map se passe après que les données soient réparties dans le système distribué. Cette phase consiste à attribuer à chaque donnée d’entrée un ensemble de clés/valeurs. Cependant, la clé utilisée ici n’est pas du tout unique, car il s’agit d’un identifiant aléatoire servant simplement à identifier la valeur et chaque valeur identique se voit octroyer la même clé.

Shuffle

C’est dans cette phase que l’on va trier les paires clé/valeur par clé pour les regrouper dans une liste. Ces listes vont passer par une fonction de hachage. Cela va servir à la tâche Reduce de pouvoir identifier les fichiers Map qui leur sont dédiés afin qu’elle puisse effectuer une jointure verticale sur ces derniers.

Reduce

C’est dans cette partie que s’effectue donc la jointure verticale mentionnée ci-dessus. C’est grâce à cette jointure que l’on va obtenir le résultat final. Une fois cette étape faite, l’utilisateur peut décider de ce qu’il souhaite effectuer, soit un affichage des résultats, soit le stockage de ces derniers ou encore le repasser dans un autre processus MapReduce.

Pourquoi utiliser MapReduce ?

Comme nous l’avons déjà évoqué un peu plus haut, les données font partie des enjeux majeurs de l’avancement d’une société de nos jours. La valorisation de celles-ci aide fortement lors de la prise de décision et cela passe par un bon traitement. L’utilisation de MapReduce lors de ce traitement aide beaucoup les intervenants afin d’atteindre cet objectif. En effet, il offre de nombreux avantages à savoir :

  • La flexibilité qu’il offre, car tous les types de données peuvent être traités avec MapReduce. Il prend en charge les données structurées comme les fichiers Excel ou les tables d’une base de données traditionnelle. Les données semi-structurées telles que les fichiers JSON ou XML ainsi que les données non structurées telles que les fichiers audios ou les images peuvent également traitées. Cela veut également dire que l’on peut récolter et manipuler des données provenant de différentes sources ;
  • L’évolutivité du système, surtout lorsqu’on utilise Hadoop, puisqu’il suffit de rajouter des nœuds si le traitement devient trop lourd ou si la quantité de données à traiter évolue considérablement ;
  • Le coût minimal qu’il engendre, car l’ajout d’un nœud consiste à la procuration d’un simple serveur ou d’une machine ordinaire. Cela est bien plus pratique que la mise en place d’un gros serveur qui peut coûter plus cher ;
  • La vitesse du traitement qui est provoquée par de nombreuses raisons. Tout d’abord, il y a le traitement parallèle qui permet aux nœuds de se concentrer sur une petite partie des données, et ce de manière simultanée. Puis, il y a la séparation de l’opération Map et Reduce, qui réduit également la vitesse de traitement globale. Enfin, avec MapReduce, chaque nœud dispose d’un algorithme de traitement qui lui est propre. De ce fait, les données sont manipulées directement dans son emplacement, ce qui évite les appels d’autres serveurs qui risquent de ralentir les opérations ;
  • La sécurité qu’il garantit, surtout lorsqu’on l’utilise avec HDFS, car l’accès aux données est restreint. La sécurité des données en elles-mêmes est également assurée puisque des réplicas existent pour chaque portion de données ;
  • Le choix du langage d’implémentation de l’algorithme MapReduce qui est assez large. Cela laisse aux développeurs le champ libre leur permettant d’évoluer dans celui avec lequel ils sont le plus à l’aise.

Comment l’exécuter dans un projet Big Data ?

La meilleure manière d’exécuter MapReduce dans un projet Big Data est de l’implémenter via l’écosystème Hadoop. En effet, c’est la plateforme la plus utilisée à cet effet en ce moment.

Avec Hadoop, il y a deux entités qui entrent en jeu lors de l’exécution d’un job MapReduce : le JobTracker et les Task Trackers.

La première entité agit en tant que maître, c’est-à-dire que c’est à lui de coordonner les opérations à effectuer pour une tâche MapReduce précise.

Les Task Trackers, quant à eux, sont ceux qui exécutent les opérations en elles-mêmes. Chacun d’entre eux se voit attribuer une partie de la tâche et effectue donc une opération de MapReduce, puisqu’il s’agit d’une exécution en parallèle indépendante. Chaque Task Tracker est stocké et exécuté à l’intérieur d’un conteneur. Un nœud peut contenir plusieurs conteneurs, donc plusieurs Task Trackers.

Pour ce qui est du cas pratique, les opérations se déroulent de la manière suivante :

  • En premier lieu, l’utilisateur configure le job MapReduce (un job MapReduce est le traitement MapReduce spécifié par l’utilisateur) ;
  • Dans un second temps, HDFS (Hadoop Distributed File System) partitionne le fichier d’entrée en plusieurs blocs de 64 Mo afin que chaque bloc puisse s’exécuter de manière équilibrée. Ensuite, il réplique chaque bloc puis les distribue dans différents nœuds du cluster ;
  • Chaque Task Tracker lit le contenu de sa partition et le transforme à l’aide d’une fonction de hachage en une paire de clés/valeurs ;
  • Le Task Tracker effectue également par moment une sérialisation sur les paires clé/valeur. Le résultat de cette opération est envoyé sur un fichier situé sur le disque dur local du nœud et ce fichier sera de nouveau partitionné en plusieurs régions. Les informations concernant ces régions seront transmises au Job Tracker ;
  • D’autres Task Trackers récupèrent les informations concernant les tâches qu’ils doivent effectuer, lisent le contenu qui leur est dédié puis le trient avant d’effectuer la tâche Reduce qu’ils doivent réaliser ;
  • Une fois toutes les opérations achevées, Hadoop demandera à l’utilisateur la manière dont il souhaite obtenir le résultat (en affichage, par chargement d’un SGBD ou en entrée dans un autre job MapReduce).