connect():
submitter.submitJobInternal(Job.this, cluster):
1.Job提交
编写的Driver类中最后的job提交语句。
job.waitForCompletion(true);
1.1Job提交
submit();
1.1.1建立连接
connect();
//创建提交Job的代理
new Cluster(getConfiguration());
//判断是本地运行环境还是yarn集群运行环境。如果是本地创建LocalJobRunner如果是集群创建YARNRunner
initialize(jobTrackAddr, conf);
1.1.2提交job
submitter.submitJobInternal(Job.this, cluster)
1.1.2.1输出检查(TextOutputFormat)
//①输出路径是否设置 ②输出路径是否存在
checkSpecs(job);
1.1.2.2创建给集群提交数据的Stag路径
//如果是本地那么该路径就在当前工程所在的盘符的根目录
//如果是集群就在HDFS上/tmp
Path jobStagingArea = JobSubmissionFiles.getStagingDir(cluster, conf);
1.1.2.3获取jobid ,并创建Job路径
JobID jobId = submitClient.getNewJobID();
1.1.2.4将jobStagingArea和jobId合成一个新的路径。用来存放jar包,切片信息,配置信息
Path submitJobDir = new Path(jobStagingArea, jobId.toString());
1.1.2.5拷贝jar包到集群(如果是本地不上传jar包)
copyAndConfigureFiles(job, submitJobDir);
rUploader.uploadFiles(job, jobSubmitDir);
1.1.2.6计算切片,生成切片规划文件
writeSplits(job, submitJobDir);
maps = writeNewSplits(job, jobSubmitDir);
//input是TextInputFormat --- 生成切片信息
input.getSplits(job);
1.1.2.7向Stag路径写XML配置文件
writeConf(conf, submitJobFile);
conf.writeXml(out);
1.1.2.8提交Job,返回提交状态
//如果是本地submitClient是LocalJobRunner,如果是集群submitClient是YARNRunner
status = submitClient.submitJob(jobId, submitJobDir.toString(), job.getCredentials());