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()方法
构造带有全部参数和无参的构造器