本节目标:
1、通过一个求topN的案例,掌握MR的开发流程。
2、学会查看官方API
根据已知的数据集,数据集每一行的文本内容是不同年月和时间对应的温度。
Q:求每年每月中出现的最高的两个温度值。
分析:年月、时间升序,温度降序。将年月分组,具有相同年月的数据分组到一起,然后时间按照升序排列,温度降序排列,取前两个。
/**
* Job主类
* 设置与job任务相关的所有信息,提交job任务
* @author devin
*/
public class TempJob {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
//本地测试环境,手动设置(Active NN,Active RM)配置信息
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://master:8020");
conf.set("yarn.resourcemanager.hostname", "slave3");
//实例化job
Job job = Job.getInstance(conf);
//job入口
job.setJarByClass(TempJob.class);
//设置map相关信息,包括自定义的map类,map输出key的类型,输出value的类型
job.setMapperClass(TempMap.class);
job.setMapOutputKeyClass(Weather.class);
job.setMapOutputValueClass(IntWritable.class);
//设置job的shuffle过程操作信息,包括分区,排序,分组
job.setPartitionerClass(TempPartition.class);
job.setSortComparatorClass(TempSort.class);
job.setGroupingComparatorClass(TempGroup.class);
//设置reduce相关信息,包括reduce任务个数,自定义的reduce类
job.setNumReduceTasks(3);
job.setReduce