[
https://issues.apache.org/jira/browse/FLINK-4540?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15857997#comment-15857997
]
ASF GitHub Bot commented on FLINK-4540:
---------------------------------------
GitHub user MayerRoman opened a pull request:
https://github.com/apache/flink/pull/3287
[FLINK-4540][yarn] Delayed cluster startup until the job has been fully
assembled, in the case of launching detached jobs
[FLINK-4540] Detached job execution may prevent cluster shutdown.
**workflow description:**
In the process of launching detached jobs on YARN
`FlikYarnSession#createCluster` method call
`AbstractYarnClusterDescriptor#deploy`, this method triggers deployment of a
flink-cluster on YARN.
After that `CliFrontend#executeProgram` calls `ClusterClient#run`, causing
the start of the job preparation process.
Further method `YarnClusterClient#submitJob` calls
`YarnClusterClient#stopAfterJob` which ensures that the YarnJobManager shuts
down after the job completes, and calls `ClusterClient#runDetached` that sends
job on the cluster.
**how the bug occurs:**
If the error will be thrown after `AbstractYarnClusterDescriptor#deploy`,
but before sending job on the cluster, the jobmanager never shuts down the
cluster.
**changes:**
This pull request defers cluster startup until the job has been fully
assembled.
**additional Information:**
- these changes do not affect the work of FLIP-6
- explanation for rows 330-331 in `FlinkYarnSessionCli`:
After` "flink run ..."` in command line Flink creates instance of
`CliFronted`.
Befor creating instance of `CliFrontend` static block in this class is
executed. It creates instances of `FlinkYarnSessionCli`, `FlinkYarnCli`,
`DefaultCli `and puts it in static LinkedList.
In the case of real work, every time a new JVM starts.
In the case of executing tests in flink-yarn-tests, launchig job in
different modes occures in one JVM and static block in `CliFrontend ` is
executed only once.
Therefore once created instance of `FlinkYarnSessionCli ` is reused by all
tests in class.
`YARNSessionCapacitySchedulerITCase#testDetachedPerJobYarnCluster` and
`#testDetachedPerJobYarnClusterWithStreamingJob` during execution change
`private boolean detachedMode` in `FlinkYarnSessionCli `to true.
If after them will run
`YARNSessionCapacitySchedulerITCase#perJobYarnCluster` or
`#perJobYarnClusterWithParallelism`, because of the changed `detachedMode `in
`FlinkYarnSessionCli `they will go the wrong execution way.
A previous version of this part of the code was based on the fact that the
field is a priori false and only checks whether it is necessary to change it to
true.
```
if (cmd.hasOption(DETACHED.getOpt()) ||
cmd.hasOption(CliFrontendParser.DETACHED_OPTION.getOpt())) {
this.detachedMode = true;
yarnClusterDescriptor.setDetachedMode(true);
}
```
The new version of this part of the code changes `detachedMode `anyway,
whereby if it was true and it isn't launch of detached Job, it will be changed
into false.
```
this.detachedMode = cmd.hasOption(DETACHED.getOpt()) ||
cmd.hasOption(CliFrontendParser.DETACHED_OPTION.getOpt());
yarnClusterDescriptor.setDetachedMode(this.detachedMode);
```
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/MayerRoman/flink FLINK-4540
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/flink/pull/3287.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #3287
----
commit cca5c31767a76a560e66193f28e023210d592dbf
Author: Roman Maier <[email protected]>
Date: 2017-02-08T08:04:15Z
[FLINK-4540][yarn] Delayed cluster startup until the job has been fully
assembled, in the case of launching detached jobs
----
> Detached job execution may prevent cluster shutdown
> ---------------------------------------------------
>
> Key: FLINK-4540
> URL: https://issues.apache.org/jira/browse/FLINK-4540
> Project: Flink
> Issue Type: Bug
> Components: YARN
> Affects Versions: 1.2.0, 1.1.2
> Reporter: Maximilian Michels
> Assignee: Roman Maier
> Priority: Minor
>
> There is a problem with the detached execution of jobs. This can prevent
> cluster shutdown 1) when eager jobs are executed, i.e. the job calls
> `collect()/count()`, and 2) when the user jar doesn't contain a job.
> 1) For example, {{./flink -d -m yarn-cluster -yn 1
> ../examples/batch/WordCount.jar}} will throw an exception and only disconnect
> the YarnClusterClient afterwards. In detached mode, the code assumes the
> cluster is shutdown through the {{shutdownAfterJob}} method which ensures
> that the YarnJobManager shuts down after the job completes. Due to the
> exception thrown when executing eager jobs, the jobmanager never receives a
> job and thus never shuts down the cluster.
> 2) The same problem also occurs in detached execution when the user jar
> doesn't contain a job.
> A good solution would be to defer cluster startup until the job has been
> fully assembled.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)