Driver程序
在Driver程序中,我们需要设置MapReduce任务的输入路径、输出路径、Mapper类、Reducer类等参数,并启动MapReduce任务。具体实现如下:
代码语言:javascript复制public class OrderDriver {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "group sort");
job.setJarByClass(OrderDriver.class);
job.setMapperClass(OrderMapper.class);
job.setReducerClass(OrderReducer.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(OrderBean.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(NullWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
OrderDriver类中设置了MapReduce任务的各种参数,包括Mapper类、Reducer类、输入输出路径、Map输出键值类型、Reduce输出键值类型等参数。其中,我们使用FileInputFormat和FileOutputFormat来设置输入路径和输出路径。
示例程序
下面是一个基于MapReduce实现分组排序的示例程序。假设我们有一个输入文件input.txt,其中每行数据包含一个group和一个value属性,以逗号分隔。我们需要将输入数据按照group分组,并对每个组内的数据按照value进行排序。输出结果包含每个group内排序后的所有数据。
输入数据input.txt:
代码语言:javascript复制A,3
B,2
A,2
C,1
B,3
运行MapReduce程序:
代码语言:javascript复制hadoop jar group-sort.jar input.txt output
输出结果:
代码语言:javascript复制A,2
A,3
B,2
B,3
C,1