package tdd.tp03; import java.io.IOException; import java.util.Collection; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; class SubstringCountMapper extends Mapper { @Override public void map(Object o, Text in, Context ctx) throws IOException, InterruptedException { for (String word : in.toString().toLowerCase().split("[ \n\t.,;:!?]+")) { ctx.write(new Text(word), NullWritable.get()); } } } class SubstringCountReducer extends Reducer { @Override public void reduce(Text str, Iterable nulls, Context ctx) throws IOException, InterruptedException { if (nulls instanceof Collection) { ctx.write(str, new IntWritable(((Collection)nulls).size())); } else { int total = 0; for (Object o : nulls) { total++; } ctx.write(str, new IntWritable(total)); } } } public class DriverWordCount { public static void main(String[] args) { if (args.length < 2) System.exit(2); try { //Création d'une nouvelle configuration Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "tdd.tp03"); //Le nom de la classe 'main' job.setJarByClass(DriverWordCount.class); //Le format d'entrée du Map //TextInputFormat est un alias pour //InputFormat; job.setInputFormatClass(TextInputFormat.class); //Initialisation du Map job.setMapperClass(SubstringCountMapper.class); //Initialisation du Reduce job.setReducerClass(SubstringCountReducer.class); //Sortie du Map job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(NullWritable.class); //Sortie (du Reduce) job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileOutputFormat.setOutputPath(job, new Path(args[0])); for(int i = 1; i < args.length; i++) FileInputFormat.addInputPath(job, new Path(args[i])); System.exit(job.waitForCompletion(true) ? 0 : 1); } catch (Exception e) { System.err.println("Erreur : " + e); } } }