场景:一些复杂的任务难以用一次mapreduce处理完成,需要多次mapreduce才能完成任务。如在日志解析系统中,会分为拆分、session_id,、上下文三个job。
在map/reduce迭代过程中,思想还是比较简单,就像类似for循环一样,前一个mapreduce的输出结果,作为下一个mapreduce的输入,任务完成后中间结果都可以删除。
如代码:
Configuration conf = new Configuration();
Job job1 = new Job(conf1,"job1");
.....
FileInputFormat.addInputPath(job1,InputPaht1);
FileOutputFromat.setOoutputPath(job1,Outpath1);
job1.waitForCompletion(true);
//sub Mapreduce
//Configuration conf = new Configuration();
Job job2 = new Job(conf,"job2");
.....
FileInputFormat.addInputPath(job2,Outpath1);
FileOutputFromat.setOoutputPath(job2,Outpath2);
job2.waitForCompletion(true);
//sub Mapreduce
//Configuration conf = new Configuration();
Job job3 = new Job(conf,"job3");
.....
FileInputFormat.addInputPath(job3,Outpath2);
FileOutputFromat.setOoutputPath(job3,Outpath3);
job3.waitForCompletion(true);
.....