每次配置job的时候,最后一步总是
System.exit(job.waitForCompletion(true) ? 0 : 1);
进入waitForCompletion方法
public boolean waitForCompletion(boolean verbose
) throws IOException, InterruptedException,
ClassNotFoundException {
if (state == JobState.DEFINE) {
submit();
}
if (verbose) {
jobClient.monitorAndPrintJob(conf, info);//设置参数是否打印执行过程
} else {
info.waitForCompletion();
}
return isSuccessful();
}
submit()方法是根据你设置的job属性来执行job,以下是submit()方法:
public void submit() throws IOException, InterruptedException,
ClassNotFoundException {
ensureState(JobState.DEFINE);//确认job开始执行
setUseNewAPI();
// 连接到jobTrack并且提交job
connect();
info = jobClient.submitJobInternal(conf);
super.setJobID(info.getID());
state = JobState.RUNNING;
}
在connect()方法中实例化了jobClient,然后调用jobClient.submitJobInternal 提交job