You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2017/02/08 13:39:41 UTC

[jira] [Commented] (FLINK-4540) Detached job execution may prevent cluster shutdown

    [ 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 <ro...@epam.com>
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)