Tp en Big Data : Le paradigme MapReduce
TAF : Saisir sous Eclipse le code suivant:
package org.tpmr.hadoop.wordcount;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.IntWritable;
// Notre classe Driver
// (contient le main du programme Hadoop).
public class WCount
{
// Le main du programme.
public static void main(String[] args) throws Exception
{
// Cr er un object de configuration Hadoop.
Configuration conf=new Configuration();
// Permet Hadoop de lire ses arguments g n riques,
Publicité
// r cup re les arguments restants dans ourArgs.
String[] ourArgs=new GenericOptionsParser(conf, args).getRemainingArgs();
// Obtient un nouvel objet Job: une t che Hadoop. On
// fournit la configuration Hadoop ainsi qu'une description
// textuelle de la t che.
Job job=Job.getInstance(conf, "Compteur de mots v1.0");
// D fini les classes driver, map et reduce.
job.setJarByClass(WCount.class);
job.setMapperClass(WCountMap.class);
job.setReducerClass(WCountReduce.class);
// D fini types clefs/valeurs de notre programme Hadoop.
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
// D fini les fichiers d'entr e du programme et le r pertoire
// des r sultats. On se sert du premier et du deuxi me
//argument restants pour permettre // l'utilisateur de les
// sp cifier lors de l'ex cution.
FileInputFormat.addInputPath(job, new Path(ourArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(ourArgs[1]));
// On lance la t che Hadoop. Si elle s'est effectu e
// correctement, on renvoie 0. Sinon, on renvoie -1.
Publicité
if(job.waitForCompletion(true))
System.exit(0);
System.exit(-1);
}
}
package org.tpmr.hadoop.wordcount;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.IntWritable;
import java.util.StringTokenizer;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
// Notre classe MAP.
public class WCountMap extends Mapper
{
// IntWritable contant de valeur 1.
private static final IntWritable ONE=new IntWritable(1);
// La fonction MAP elle-m me.
protected void map(Object offset, Text value, Context context) throws IOException, InterruptedException
{
// Un StringTokenizer va nous permettre de parcourir chacun
Publicité
// des mots de la ligne qui est pass e notre op ration MAP.
StringTokenizer tok=new StringTokenizer(value.toString(), " ");
while(tok.hasMoreTokens())
{
Text word=new Text(tok.nextToken());
// On renvoie notre couple (clef;valeur): le mot courant suivi
// de la valeur 1 (d finie dans la constante ONE).
context.write(word, ONE);
}
}
}
package org.tpmr.hadoop.wordcount;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Reducer;
import java.util.Iterator;
import java.io.IOException;
// Notre classe REDUCE - param tr e avec un type Text pour la
// clef, un type de valeur IntWritable, et un type de retour (le retour
//final de la fonction Reduce) Text.
public class WCountReduce extends Reducer<text, intwritable, text, text>
Publicité
{
// La fonction REDUCE elle-m me. Les arguments: la clef key,
// un Iterable de toutes les valeurs qui sont associ es la clef
// en question, et le contexte Hadoop (un handle qui nous
//permet de renvoyer le r sultat Hadoop).
public void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException
{
// Pour parcourir toutes les valeurs associ es la clef
// fournie.
Iterator i=values.iterator();
int count=0;
// Notre total pour le mot concern .
while(i.hasNext()) // Pour chaque valeur...
count+=i.next().get(); // ...on l'ajoute au total.
// On renvoie le couple (clef;valeur) constitu de notre clef
// key et du total, au format Text.
context.write(key, new Text(count+" occurences."));
}
}