Présentation de MapReduce

Présentation de MapReduce

Les systèmes d’information ont de plus en plus de données à stocker et à traiter. Des entreprises comme Google, Facebook, Twitter mais encore bien d’autre stockent des quantités d’information astronomiques en provenance de leurs clients et doivent être en mesure de les servir par les meilleurs recommandation tout en assurant la pérennité de leurs systèmes.

MapReduce est un moyen de modéliser un programme pour traiter de large volume de donnée. Par large, on entend massif, par exemple de l’ordre du petabytes. Orginallement créer par Google et décrit en détails dans la publication “MapReduce: Simplified Data Processing on Large Clusters” publiée en 2004, une implémentation Open Source existe au travers d’Hadoop et de son écosystème de la fondation Apache.

Une tâche MapReduce est constituée de 2 phases. Le développeur implémente une fonction “map” qui décompose une donnée en clé/valeur et une autre fonction “reduce” qui fusionne toutes les valeurs associées à une même clé. Combinées entre elles, ce paradigme permet d’exprimer un grand nombre de problématique.

Le grand avantage de cette méthode est ça faculté de décomposer un processus en plusieurs tâches distribuables sur un très grand nombre de machines normales. Par machines normales, on entend des serveurs dont le prix peut varier entre 3000 et 5000 euros. Pour prendre un exemple concret, en 2010, nous avons commandé des serveurs à 4500 € constitués de 2 processors AMD Optéron à 8 coeurs, 32 Go de RAM et 4 disques de 1T à 7500 tours. Deux machines à 2000 euros chacune auraient très bien pu faire l’affaire. Nous avons opté pour cette configuration à cause de l’économie de place engendrée.

Le traitement des données est réparti sur l’ensemble des serveurs du cluster sans pénalité d’échelle. Si vous données doublent, vous doublez le nombre de machines. Si vous avez besoins de plus de puissance de calcul, idem.

Pour le programmeur, le travail se limite à la création de tâches MapReduce qui sont facile à comprendre et à écrire. Le système se charge des détails dont le partitionnement des données, l’exécution et la coordination des tâches, la duplication des informations en cas de panne machine et la communication entre elles.

Je vais terminer cet article par un exemple en JavaScript pour illustrer le concept. Le but de l’exercice est de compter le nombre d’utilisateur pour un même code postal, partant de données CSV comprenant 3 utilisateurs avec leur nom et leur code postal comme champs.

Le fichier source (format CSV)

La fonction “map” (en javascript) L’argument fournit, “value” correspond à une ligne de notre fichier source. Cette ligne est convertie sous forme d’array comprend 2 éléments: le nom de l’utilisateur et son code postal. Finalement, la fonction “emit” prend 2 arguments qui sont la clé à émettre et la valeur associée soit le code postal pour la clé et 1 pour signifier que ce code postal a été rencontré une fois. La fonction “reduce” (en Javascript) Les argument fournits sont une clé et les valuers associés à cette clé. Ils résultent de la fonction “map” appelée précédemment. L’argument “key” est donc un code postal et l’argument “values” une array de nombre. Attention toutefois, la function reduce peut être appelée plusieurs fois et son écriture doit prendre cela en compte. MapReduce étant destiné à de très larges volumes, values pourrait autrement prendre des proportions trop grandes. Ici, values est consituée de numéros “1” la première fois mais ce nombre sera différent si la méthode est appelée à nouveau. Le résultat final [/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]
By | 2017-11-21T20:20:57+00:00 June 26th, 2010|Categories: Big Data|0 Comments

About the Author:

Passionate with programming, data and entrepreneurship, I participate in shaping Adaltas to be a team of talented engineers to share our skills and experiences.

Leave A Comment

Time limit is exhausted. Please reload the CAPTCHA.