0% ont trouvé ce document utile (0 vote)
46 vues4 pages

Programme WordCount avec MapReduce

Le document présente un travail pratique sur l'implémentation d'un programme de comptage de mots utilisant MapReduce sous Hadoop. Il décrit les étapes pour créer les classes Mapper et Reducer, configurer et exécuter le job, ainsi que les questions de réflexion et des extensions possibles. Les prérequis incluent une installation de Hadoop, un accès au HDFS et des connaissances en Java.

Transféré par

mo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
46 vues4 pages

Programme WordCount avec MapReduce

Le document présente un travail pratique sur l'implémentation d'un programme de comptage de mots utilisant MapReduce sous Hadoop. Il décrit les étapes pour créer les classes Mapper et Reducer, configurer et exécuter le job, ainsi que les questions de réflexion et des extensions possibles. Les prérequis incluent une installation de Hadoop, un accès au HDFS et des connaissances en Java.

Transféré par

mo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Travaux pratiques (TP – 03)

Programme WordCount avec MapReduce

Objectifs

▪ Comprendre et implémenter un programme de comptage de mots en utilisant le modèle


MapReduce sous Hadoop.

Prérequis :

▪ Hadoop installé et configuré.


▪ Accès au HDFS.
▪ Familiarité avec Java (ou le langage utilisé pour implémenter MapReduce).

Étapes du TP :

1. Présentation du TP

Le programme WordCount est un classique pour commencer avec Hadoop MapReduce. Le but est de
lire un fichier texte, de compter le nombre d'occurrences de chaque mot, et d'afficher le résultat.

2. Création des Classes Map et Reduce

a. Classe Map

La classe Map va lire chaque ligne du fichier, découper la ligne en mots, puis émettre un couple clé-
valeur pour chaque mot, où la clé est le mot et la valeur est 1.

import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {


private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException,
InterruptedException {
String line = value.toString();
String[] words = line.split("\\s+");
for (String w : words) {
word.set(w);
context.write(word, one);
}
}
}
Explications :

• LongWritable : représente le décalage de la ligne dans le fichier d'entrée.

• Text : représente le texte de la ligne.

• IntWritable : représente la valeur 1 pour chaque mot.

b. Classe Reduce

La classe Reduce va recevoir les couples clé-valeur émis par le Mapper, regrouper toutes les
occurrences d’un mot et calculer le total.

import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {


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

Explications :

• La méthode reduce additionne toutes les valeurs associées à une clé (mot) pour obtenir le
nombre total d'occurrences de chaque mot.

3. Configuration et Lancement du Job MapReduce

Classe WordCount

Cette classe configure le Job MapReduce et lance le traitement.

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class WordCount {


public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "word count");

job.setJarByClass(WordCount.class);
job.setMapperClass(WordCountMapper.class);
job.setCombinerClass(WordCountReducer.class); // Optionnel, pour optimiser
job.setReducerClass(WordCountReducer.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);
}
}

4. Compilation et Exécution du Programme

Compilation : Compilez les fichiers Java en un fichier .jar (par exemple, WordCount.jar).

javac -classpath `hadoop classpath` -d . WordCountMapper.java WordCountReducer.java


WordCount.java
jar -cvf WordCount.jar -C . .

Téléchargement du fichier d'entrée dans HDFS : Téléchargez le fichier que vous souhaitez analyser
dans le HDFS.

hadoop fs -mkdir -p /user/nom_utilisateur/input


hadoop fs -put votre_fichier.txt /user/nom_utilisateur/input

Exécution du Job MapReduce : Exécutez le programme WordCount avec Hadoop

hadoop jar WordCount.jar WordCount /user/nom_utilisateur/input /user/nom_utilisateur/output

Visualisation des Résultats : Affichez les résultats du job.

hadoop fs -cat /user/nom_utilisateur/output/part-r-00000

5. Questions :

1. Pourquoi utilise-t-on MapReduce pour le traitement de gros volumes de données ?

2. Comment l'opération de shuffle (mélange) contribue-t-elle à l'efficacité du traitement


distribué ?

3. Pourquoi l'utilisation d'un combiner peut-elle améliorer les performances d'un job
MapReduce ?
6. Extension

1. Modifiez le programme pour qu'il ignore les mots courts (moins de trois lettres).

2. Ajoutez un filtre pour ne compter que les mots apparaissant plus de deux fois.

Vous aimerez peut-être aussi