Job提交流程源码

// 1. 开始提交程序
boolean result = job.waitForCompletion(true);

// 2. 当Job运行状态为为DEFINE, 提交Job
if (state == JobState.DEFINE) {
      submit();
}

// 3. 确保Job状态 
ensureState(JobState.DEFINE);

// 4. 兼容新旧API
setUseNewAPI();

// 5. 创建一个连接, 判断是本地连接还是集群连接
connect();
// 5.1如若有集群的连接信息, connect()方法结束, 否则. 使用配置信息创建一个新的集群连接
if (cluster == null) {
    cluster = 
    ugi.doAs(new PrivilegedExceptionAction<Cluster>() {
             public Cluster run()
                  throws IOException, InterruptedException, 
                         ClassNotFoundException {
                  return new Cluster(getConfiguration());
             }
          });
}

// 6 使用配置好的集群HDFS对象和客户端对象创建一个JobSubmitter
final JobSubmitter submitter = 
        getJobSubmitter(cluster.getFileSystem(), cluster.getClient());

//7 submitter.submitJobInternal(Job.this, cluster);

// 7.1 对输出的命名空间进行检查, 如果存在:
// 7.1.1 输出路径存在, 抛出路径存在异常
// 7.1.2 输出路=路径没有设置, 抛出路径未设置异常
checkSpecs(job);
// 7.2 构建建一个能放临时文件的Path对象.
fs.mkdirs(stagingArea, new FsPermission(JOB_DIR_PERMISSION));
// 7.3 得到一个唯一的JobID, 并设置
JobID jobId = submitClient.getNewJobID();
job.setJobID(jobId);
// 7.4 将7.2和7.3的路径组合起来形成一个新的临时文件存放目录
Path submitJobDir = new Path(jobStagingArea, jobId.toString());
// 7.4.1拷贝Jar包到集群, 本地模式无此步骤
copyAndConfigureFiles(job, submitJobDir);
rUploader.uploadFiles(job, jobSubmitDir);
// 7.4.2 进行文件输入切片, 下一节详细说
int maps = writeSplits(job, submitJobDir);
// 7.5 缓存相关设置
try {
    xxx // 缓存相关
    // 7.5.1 将配置文件写入到临时文件目录 submitJobDir 下
    copyAndConfigureFiles(job, submitJobDir);
    // 7.5.2 将Job配置文件写入到 submitJobDir
    writeConf(conf, submitJobFile);
        // 7.5.2.1 具体实现
    	FSDataOutputStream out = 
      		FileSystem.create(jtFs, jobFile, 
                        		new FsPermission(JobSubmissionFiles.JOB_FILE_PERMISSION));
    		try {
      			conf.writeXml(out);
    		} finally {
      			out.close();
    		}
   
}

// 7.6 开始提交Job
status = submitClient.submitJob(
          jobId, submitJobDir.toString(), job.getCredentials());

// 7.6.1 当提交方式为 LocalJobRunner
Job job = new Job(JobID.downgrade(jobid), jobSubmitDir);
job.job.setCredentials(credentials);
// 7.6.2 当提交方式为 YarnJobRunner, 将Job提交给 ResourceManager
ApplicationId applicationId =
          resMgrDelegate.submitApplication(appContext);

// 7.7 监控任务状态
monitorAndPrintJob();
// 当执行成功 , 返回 isSuccessful()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值