hadoop提交流程源码
1、源码流程
//进入Job类的waitForCompletion()方法
waitForCompletion()
submit();
// 1建立连接
connect();
// 1)创建提交Job的代理
new Cluster(getConfiguration());
// (1)判断是本地运行环境还是yarn集群运行环境
initialize(jobTrackAddr, conf);
// 2 提交job
submitter.submitJobInternal(Job.this, cluster)
// 1)创建给集群提交数据的Stag路径
Path jobStagingArea = JobSubmissionFiles.getStagingDir(cluster, conf);
// 2)获取jobid ,并创建Job路径
JobID jobId = submitClient.getNewJobID();
// 3)拷贝jar包到集群
copyAndConfigureFiles(job, submitJobDir);
rUploader.uploadFiles(job, jobSubmitDir);
// 4)计算切片,生成切片规划文件
writeSplits(job, submitJobDir);
maps = writeNewSplits(job, jobSubmitDir);
input.getSplits(job);
// 5)向Stag路径写XML配置文件
writeConf(conf, submitJobFile);
conf.writeXml(out);
// 6)提交Job,返回提交状态
status = submitClient.submitJob(jobId, submitJobDir.toString(), job.getCredentials());
2、提交任务过程中主要事项
-
在connect方法中,主要通过cluster对象提供一种进入访问mr集群的方式。进入Cluster中,再进入initialize(jobTrackAddr,conf)中包含initProviderList();ProviderList中有YarnClient和LocalClient;通过for循环遍历initProviderList(),并验证参数。
通过参数mapreduce.framework.name来决定是由什么环境运行
如果值为yarn 那就是yarn环境
如果值为local 那就是local环境 -
通过当前环境去获取提交器,
-
验证输出路径是否存在;
-
提供一个staging临时目录;产生jobID;准备创建staging临时目录+jobID路径
-
在staging临时目录+jobID的临时目录中上传Job.xml配置文件、切片信息、(jar包–yarn模式)
集群模式:提交jar包
本地模式:不提交jar包
-