Présentation de MapReduce

Présentation de MapReduce

By WORMS David

26 juin 2010

Catégories : Big Data | Tags : MapReduce, Big Data, Java, JavaScript

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 recommandations tout en assurant la pérennité de leurs systèmes.

Description

MapReduce est un moyen de modéliser un programme pour traiter de larges volumes de donnée. Par large, on entend massif, par exemple de l’ordre du petabytes. Orginellement créé 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ématiques.

Le grand avantage de cette méthode est sa faculté à 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 vos données doublent, vous doublez le nombre de machines. Si vous avez besoin de plus de puissance de calcul, idem.

Pour le programmeur, le travail se limite à la création de tâches MapReduce qui sont faciles à 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’utilisateurs 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)

Hadoop,75006
Cassandra,75019
Hive,75006

La fonction “map”

L’argument fourni, “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.

function map(row){
  row = row.split(',');
  this.emit(row[1],1); }

La fonction “reduce”

Les argument fournis sont une clé et les valeurs associées à 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 fonction 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.

function reduce(key,values){
  return values.reduce(function(previous,current){
    return previous + current
  })
}

Le résultat final

75006, 2
75019, 1

Canada - Morocco - France

International locations

10 rue de la Kasbah
2393 Rabbat
Canada

Nous sommes une équipe passionnées par l'Open Source, le Big Data et les technologies associées telles que le Cloud, le Data Engineering, la Data Sciencem le DevOps…

Nous fournissons à nos clients un savoir faire reconnu sur la manière d'utiliser les technologies pour convertir leurs cas d'usage en projets exploités en production, sur la façon de réduire les coûts et d'accélérer les livraisons de nouvelles fonctionnalités.

Si vous appréciez la qualité de nos publications, nous vous invitons à nous contacter en vue de coopérer ensemble.