学习作业启动
This commit is contained in:
parent
a3980b8012
commit
9a5a33e0b2
@ -271,7 +271,7 @@ public void transition(JobImpl job, JobEvent event) {
|
|||||||
handleJobSetup的核心处理逻辑:
|
handleJobSetup的核心处理逻辑:
|
||||||
|
|
||||||
- 创建attempt路径。
|
- 创建attempt路径。
|
||||||
- 触发JobSetupCompletedEvent事件。从事件实现来看会触发JobImpl里面的JOB_SETUP_COMPLETED事件类型,由SetupCompletedTransition来处理当前事件。
|
- 触发JobSetupCompletedEvent事件。从事件实现来看会触发JobImpl里面的JOB_SETUP_COMPLETED事件类型,由SetupCompletedTransition来处理当前事件。在当前函数里面会触发JOB_COMPLETED事件。最终会走到JobImpl的checkReadyForCommit函数里面。
|
||||||
|
|
||||||
```java
|
```java
|
||||||
protected void handleJobSetup(CommitterJobSetupEvent event) {
|
protected void handleJobSetup(CommitterJobSetupEvent event) {
|
||||||
@ -288,3 +288,59 @@ protected void handleJobSetup(CommitterJobSetupEvent event) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
checkReadyForCommit函数的实现如下,可以看到在触发了CommitterJobCommitEvent事件,在CommitterJobCommitEvent里面会触发JOB_COMMIT事件。主要处理逻辑在handleJobCommit里面。
|
||||||
|
|
||||||
|
```java
|
||||||
|
protected JobStateInternal checkReadyForCommit() {
|
||||||
|
JobStateInternal currentState = getInternalState();
|
||||||
|
if (completedTaskCount == tasks.size()
|
||||||
|
&& currentState == JobStateInternal.RUNNING) {
|
||||||
|
eventHandler.handle(new CommitterJobCommitEvent(jobId, getJobContext()));
|
||||||
|
return JobStateInternal.COMMITTING;
|
||||||
|
}
|
||||||
|
// return the current state as job not ready to commit yet
|
||||||
|
return getInternalState();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
handleJobCommit处理逻辑如下,
|
||||||
|
|
||||||
|
```java
|
||||||
|
protected void handleJobCommit(CommitterJobCommitEvent event) {
|
||||||
|
boolean commitJobIsRepeatable = false;
|
||||||
|
try {
|
||||||
|
// 检查作业是否重复。
|
||||||
|
commitJobIsRepeatable = committer.isCommitJobRepeatable(
|
||||||
|
event.getJobContext());
|
||||||
|
} catch (IOException e) {
|
||||||
|
LOG.warn("Exception in committer.isCommitJobRepeatable():", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 创建文件:/tmp/hadoop-yarn/staging//user/.staging/{jobid}/COMMIT_STARTED
|
||||||
|
touchz(startCommitFile, commitJobIsRepeatable);
|
||||||
|
jobCommitStarted();
|
||||||
|
// 检查和RM的心跳。
|
||||||
|
waitForValidCommitWindow();
|
||||||
|
// 提交作业,核心处理函数在commitJobInternal里面
|
||||||
|
committer.commitJob(event.getJobContext());
|
||||||
|
// 创建文件:/tmp/hadoop-yarn/staging//user/.staging/{jobid}/COMMIT_SUCCESS
|
||||||
|
touchz(endCommitSuccessFile, commitJobIsRepeatable);
|
||||||
|
context.getEventHandler().handle(
|
||||||
|
new JobCommitCompletedEvent(event.getJobID()));
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.error("Could not commit job", e);
|
||||||
|
try {
|
||||||
|
// 失败之后创建:/tmp/hadoop-yarn/staging//user/.staging/{jobid}/COMMIT_FAIL
|
||||||
|
touchz(endCommitFailureFile, commitJobIsRepeatable);
|
||||||
|
} catch (Exception e2) {
|
||||||
|
LOG.error("could not create failure file.", e2);
|
||||||
|
}
|
||||||
|
context.getEventHandler().handle(
|
||||||
|
new JobCommitFailedEvent(event.getJobID(),
|
||||||
|
StringUtils.stringifyException(e)));
|
||||||
|
} finally {
|
||||||
|
jobCommitEnded();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Loading…
Reference in New Issue
Block a user