Java搭建MapReduce完成二次排序步骤

1、构建新的作业

Configuration conf=getConf();
Job job=Job.getInstance(conf);
job.setJarByClass(SortYearAndTemp2.class);

2、设置输入输出目录

Path inpath=new Path(conf.get("inpath"));
Path outpath=new Path(conf.get("outpath"));
FileInputFormat.addInputPath(job, inpath);
FileOutputFormat.setOutputPath(job, outpath);

3、设置Mapper Reducer函数

job.setMapperClass(SortYearAndTemp2.SortYearAndTemp2Mapper.class);
  public static class SortYearAndTemp2Mapper extends Mapper<LongWritable, Text, Weather, Text>
job.setReducerClass(SortYearAndTemp2.SortYearAndTemp2Reducer.class);
  public static class SortYearAndTemp2Reducer extends Reducer<Weather, Text, Text, NullWritable>

4、设置输出格式

job.setMapOutputKeyClass(Weather.class);
job.setMapOutputValueClass(Text.class);
job.setOutputValueClass(Text.class);
job.setOutputKeyClass(NullWritable.class);

5、指定分区方式

job.setPartitionerClass(WeatherPartitioner.class);  //参数为Partitioner的子类
  创建Partitioner的子类:public static class WeatherPartitioner extends Partitioner<Weather, Text>
    重写getPartition()方法,返回int //指定分区方式

6、指定分组方式

job.setGroupingComparatorClass(WeatherGroup.class);  //参数为WritableComparator的子类
  创建WritableComparator的子类:public static class WeatherGroup extends WritableComparator
    构造无参构造器WeatherGroup(){super(Weather, true);} //重写父类带有参数的构造器
    重写compare()方法 //指定分组方式

7、提交执行作业,等待作业完成之后退出虚拟机

return job.waitForCompletion(true)?0:1;

8、创建传递给key的类

public static class Weather implements WritableComparable<Weather> 
  重写write()方法 //序列化
  重写readFields()方法 //反序列化
  重写compareTo()方法 //规定key参数类的排序规则
  设置set() get()方法
  构造带有全部参数和无参的构造器
原文地址:https://www.cnblogs.com/qiangang/p/13686953.html