Vous êtes sur la page 1sur 3

École Nationale Supérieure d’Informatique et d’Analyse des Systèmes

Pr T. RACHAD. - Année universitaire 2020/2021


Atelier 2 du Big Data
Introduction au MapReduce

1. Objectif
• Savoir la structure d’un programme mapreduce
• Savoir le mode de fonctionnement d’un programme mapreduce
• Savoir comment exécuter un job mapreduce
2. Prérequis
• Configuration d’un cluster Hadoop.
• Manipulation du système de fichier HDFS.
• Installation d’Eclipse
3. Structure d’un programme MapReduce
3.1. Exemple (WordCount)

Pour bien comprendre le fonctionnement du framework MapReduce, nous allons considérer un job
qui consistera à compter le nombre d’occurrences de chaque mot contenu dans un fichier texte et
qu’on va passer comme argument d’entrée au job.

La définition d’un job MapReduce doit spécifier au minimum l’emplacement des données d’entrée,
l’emplacement où les données de sortie seront stockées et la définition des tâches map et reduce.

La classe implémentant la tâche du Map est une classe interne au Job qui hérite de la classe Mapper:

public class WordCountJobClient{


………
public static void main(String[] args) throws Exception{
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "word count");
job.setJarByClass(WordCountJobClient.class);
job.setMapperClass(MyMapper.class);
job.setCombinerClass(MyReducer.class);
job.setReducerClass(MyReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1); } }

public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> . La classe doit implémenter la


fonction : public void map(KEYIN key, VALUEIN value, Context context).


Le Framework MapReduce exécutera la méthode map pour chaque split des données d’entrée. Les
outputs des différents map exécutés seront regroupés est envoyés comme données d’entrée au
Reducers.

A chaque fois que le mapper est appelé pour un split du fichier texte d’entrée, il va le subdiviser en
plusieurs mots tel que chacun sera considéré comme une clé de sortie possédant comme valeur 1.
.
public class MyMapper extends Mapper<Object, Text, Text, IntWritable>
{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context) throws IOException,
InterruptedException
{
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}


La classe implémentant la tâche du Reduce est une classe interne au Job qui hérite de la classe
Reducer: public class Reducer<KEYIN ,VALUEIN, KEYOUT, VALUEOUT>. La classe doit
implémenter la fonction : public void reduce(KEYIN key, VALUEIN value, Context context).

Une tâche de Reduce transforme un ensemble valeurs qui partagent la même clé en un ensemble de
valeurs de taille réduite (en appliquant des fonctions d’agrégation).

Le Reducer passe par trois étapes:

1. Shuffle : Le Reducer rassemble les output reçus de la part du Mapper et les considère
comme des input des tache du reduce.
2. Sort : Le Reducer fait le tri des inputs par clé.
3. Reduce : la fonction reduce est exécutée pour chaque clév(collection de valeurs ).

2
public static class MyReducer extends
Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();

public void reduce(Text key, Iterable<IntWritable> values, Context context ) throws IOException,
InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}


3.2. Exécution
• Créer un nouveau projet sur Eclipse et créer la classe WordCountJobClient.
• Importer le Jars nécessaires pour l’accomplissement du job à partir projet Hadoop.
• Configurer l’exécution du job pour avoir comme fichier d’entrée le fichier
/user/cloudera/ateliers/atelier2/wordCount/input/speech.txt et comme répertoire de sortie
/usr/haddop/wordCount/output/
• Exécuter le jeb et afficher le contenu de l’output.
4. Exercices
Exercice 1 : Recherche d'anagrammes
Écrire un programme MapReduce qui détermine les anagrammes des mots lus dans un dictionnaire.
Comme fichier dictionnaire on utilisera le fichier des mots de la langue anglaise dico.txt.
1. On veut tous les mots en résultats, même ceux qui n'ont pas d'anagramme.
2. On ne conserve que les mots du dictionnaire qui ont un autre mot comme anagramme.

Exercice 2 : Min, Max, Count
Écrire un programme MapReduce qui à partir du fichier bank-data.csv calcule pour chaque âge le
salaire minimal, maximal et le nombre de personnes de cet âge.

Exercice 3: statistique
Complétez progressivement le programme précèdent pour calculer aussi : la moyenne, l'écart type et
la médiane

Exercice 4 : détection du topic
Écrire un programme MapReduce qui permet de détecter le topic le plus dominant dans le discours
du président Obama. Trois topics sont possibles et qui sont représentés par les fichiers economic.txt,
polytics.txt et social.txt contenant le vocabulaire de chaque topic.

Exercice 5 : analyse de sentiments
Écrire un programme MapReduce qui à partir du fichier sppech.txt et des fichiers negative-words.txt,
positive-words.txt et stop-words.txt fait l’analyse du sentiment le plus dominant dans le speech du
président Obama.

Vous aimerez peut-être aussi