import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.*; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.*; import org.apache.hadoop.mapreduce.*; import org.apache.hadoop.mapreduce.lib.input.*; import org.apache.hadoop.mapreduce.lib.output.*; import org.apache.hadoop.util.*; public class Sorting extends Configured implements Tool { public static class TheMapper extends Mapper { public void map(Text key, Text value, Context context) throws IOException, InterruptedException { // INSERT CODE HERE } } public static class ThePartitioner extends Partitioner { public int getPartition(IntWritable key, Text value, int numPartitions) { // INSERT CODE HERE } } public static class TheReducer extends Reducer { public void reduce(IntWritable key, Iterable values, Context context) throws IOException, InterruptedException { // INSERT CODE HERE } } public int run(String[] args) throws Exception { if (args.length < 2) { System.err.printf("Usage: %s.jar in-path out-path", this.getClass().getName()); return 1; } Job job = new Job(getConf(), this.getClass().getName()); job.setJarByClass(this.getClass()); job.setMapperClass(TheMapper.class); job.setPartitionerClass(ThePartitioner.class); job.setReducerClass(TheReducer.class); job.setOutputKeyClass(IntWritable.class); job.setOutputValueClass(Text.class); job.setInputFormatClass(KeyValueTextInputFormat.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); return job.waitForCompletion(true) ? 0 : 1; } public static void main(String[] args) throws Exception { int res = ToolRunner.run(new Sorting(), args); System.exit(res); } }