需要注意的是:JobControl类实现了Runnable接口,因此需要用一个Thread实例start启动它,不能直接用run方法
具体代码片段见下面:
@Override
public int run(String[] arg0) throws Exception {JobConf jobConfMediate = new JobConf(getConf(), TudouEpisodeAnalyzer.class);
Job jobMediate = Job.getInstance(jobConfMediate, "TudouEpisodeMediate");
jobMediate.setMapperClass(TudouEpisodeMediateMapper.class);
jobMediate.setReducerClass(TudouEpisodeMediateReducer.class);
jobMediate.setInputFormatClass(TextInputFormat.class);
jobMediate.setOutputFormatClass(TextOutputFormat.class);
jobMediate.setMapOutputKeyClass(Text.class);
jobMediate.setMapOutputValueClass(Episode.class);
jobMediate.setOutputKeyClass(Text.class);
jobMediate.setOutputValueClass(Text.class);
jobMediate.setNumReduceTasks(10);
FileInputFormat.addInputPath(jobMediate, new Path(arg0[0]));
FileOutputFormat.setOutputPath(jobMediate, new Path(arg0[1]));
jobMediate.waitForCompletion(true);
ControlledJob mediateJob=new ControlledJob(jobConfMediate);
mediateJob.setJob(jobMediate);
JobConf jobConfResult=new JobConf(getConf(), TudouEpisodeAnalyzer.class);
Job jobResult=Job.getInstance(jobConfResult, "TudouEpisodeResult");
jobResult.setMapperClass(TudouEpisodeMapper.class);
jobResult.setInputFormatClass(TextInputFormat.class);
jobResult.setOutputFormatClass(TextOutputFormat.class);
jobResult.setMapOutputKeyClass(Text.class);
jobResult.setMapOutputValueClass(Text.class);
jobResult.setOutputKeyClass(Text.class);
jobResult.setOutputValueClass(Text.class);
jobResult.setNumReduceTasks(1);
FileInputFormat.addInputPath(jobResult, new Path(arg0[1]));
FileOutputFormat.setOutputPath(jobResult, new Path(arg0[2]));
jobResult.waitForCompletion(true);
ControlledJob ultimateJob=new ControlledJob(jobConfResult);
ultimateJob.setJob(jobResult);
ultimateJob.addDependingJob(mediateJob);
JobControl jobControl=new JobControl("TudouEpisode");
jobControl.addJob(mediateJob);
jobControl.addJob(ultimateJob);
Thread hadoopJob=new Thread(jobControl);
hadoopJob.start();
while(true){
if(jobControl.allFinished()){
System.out.println(jobControl.getSuccessfulJobList());
jobControl.stop();
return 0;
}
}
}
public static void main(String[] args) throws Exception {
ToolRunner.run(new Configuration(), new TudouEpisodeAnalyzer(), args);
}