Hadoop MapReduce

Hadoop MapReduce est un framework de calcul parallèle distribué sur de grosses quantités de données. Le calcul distribué se fait via un cluster de machines. MapReduce gère entièrement le cluster et la répartition de la charge. Cela permet de faire du calcul distribué sans aucune connaissance l’infrastructure sous-jacente.

Un certain nombre d’experts Hadoop, dont Doug Cutting définit Hadoop (HDFS & MapReduce) comme étant le noyau d’un système d’exploitation distribué sur lequel des applications distribuées sont construites.

Hadoop est composé deux modules majeurs :

  • HDFS : il s’agit d’un système de fichier distribué.

  • MapReduce : un module pour l’exécution et la synchronisation des taches relatives à la requête du client.

1. Concept

Hadoop MapReduce est basé sur la notion de job. Un job est devisé en un ensemble de tâches (task). Les tâches sont de deux types :

  • Tache de Map (Map task)

  • Tache de Reduce (Reduce task)

Une requête client est traduite par des taches de type Map et d’autres de type Reduce.

Ces tâches sont exécutées d’une manière distribuée sur une grappe de machine. Chaque tache traite un sous ensemble de données (une partie de la donnée globale à traiter). Comme le montre la figure 1.

 

MapReduce + HDFS

Chaque tache Reduce est responsable du traitement d’un sous ensemble de la sortie de la tache Map. Un large éventail de problèmes peut être résolu avec ce paradigme (Map et Reduce).

Ce paradigme peut s’appliquer à de simples agrégations numériques ou à des opérations complexes jointure et de produits cartésiens.

 

Un job MapReduce prend en entrée généralement un ou un ensemble de fichiers (répertoire) répartis sur le système de fichiers distribué Hadoop (HDFS). Dans un future article d’autre type d’entrée seront abordées.

 

Les jobs MapReduce peuvent être sérialisés. La sortie du premier job devient l’entrée du second job, comme le montre la figure 2.

mapreduce-02

2. Map et Reduce

3.1 Map

Map est une fonction qui applique une série de traitement aux éléments d’une liste. Par défaut, un élément de la liste représente une ligne d’un fichier. La résultante des traitements de la fonction Map est une liste de couples clé/valeur.

 

Le workflow de la tâche Map se subdivise en cinq parties, qui sont :

Record Reader : Lecture et analyse des données contenues dans le split, avec création d’une structure de donnée de type clé/valeur. Généralement, la valeur représente une ligne et la clé son identifiant.

Mapper : Une nouvelle Map est créée à partir de la précédente Map. La décision de ce qui est la clé et la valeur ici n’est pas arbitraire. Elle représente ce que MapReduce doit accomplir.

Combiner : Cette étape est optionnelle, elle permit de faire un Reduce local.

Partitionner : Cette étape consiste à regrouper la sortie du mapper en s’appuyant sur les clés. Cette étape s’appuie sur une fonction Hash.

Output format: Une liste de clé/valeur qui fera l’objet de la tache Reduce.

3.2 Reduce

La fonction Reduce prend en argument une clé et la liste des valeurs intermédiaire générées par les différentes instances de la fonction Map pour cette clé et fait quelque chose avec… (Agrégation, moyenne, moyenne mobile, …etc)

 

Le workflow de la tâche Reduce se subdivise aussi en cinq parties, qui sont :

Shuffle : Dans cette étape les fichiers générés dans l’étape Map, sont chargés sur le système local

Sort/Merge : Le but de cette étape est de regrouper un ensemble de clé équivalents, en vue de leurs utilisations future.

Reduce : Le Reduce prend les données groupées en entrée et exécute une fonction de Reduce une fois par regroupement clé. Les données peuvent être agrégées, filtrées et combinées de différentes manières.

Output format: La Map transmise par la fonction Reduce est écrite dans un fichier. Une ligne représenté un enregistrement, dont le formatage est key tabulation valeur.

 

mapreduce-03

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *


+ 2 = 6

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>