GitHub user vanzin opened a pull request:

    https://github.com/apache/spark/pull/19591

    [SPARK-11035][core] Add in-process Spark app launcher.

    This change adds a new launcher that allows applications to be run
    in a separate thread in the same process as the calling code. To
    achieve that, some code from the child process implementation was
    moved to abstract classes that implement the common functionality,
    and the new launcher inherits from those.
    
    The new launcher was added as a new class, instead of implemented
    as a new option to the existing SparkLauncher, to avoid ambigous
    APIs. For example, SparkLauncher has ways to set the child app's
    environment, modify SPARK_HOME, or control the logging of the
    child process, none of which apply to in-process apps.
    
    The in-process launcher has limitations: it needs Spark in the
    context class loader of the calling thread, and it's bound by
    Spark's current limitation of a single client-mode application
    per JVM. It also relies on the recently added SparkApplication
    trait to make sure different apps don't mess up each other's
    configuration, but currently no cluster manager client implements
    that.
    
    I also chose to keep the same socket-based communication for in-process
    apps, even though it might be possible to avoid it for in-process
    mode. That helps both implementations share more code.
    
    Tested with new and existing unit tests, and with a simple app that
    uses the launcher; also made sure the app ran fine with older launcher
    jar to check binary compatibility.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/vanzin/spark SPARK-11035

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/spark/pull/19591.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 #19591
    
----
commit 928a0520677ea89aaacb59d48dd08b52b80462ad
Author: Marcelo Vanzin <[email protected]>
Date:   2017-08-15T21:39:23Z

    [SPARK-11035][core] Add in-process Spark app launcher.
    
    This change adds a new launcher that allows applications to be run
    in a separate thread in the same process as the calling code. To
    achieve that, some code from the child process implementation was
    moved to abstract classes that implement the common functionality,
    and the new launcher inherits from those.
    
    The new launcher was added as a new class, instead of implemented
    as a new option to the existing SparkLauncher, to avoid ambigous
    APIs. For example, SparkLauncher has ways to set the child app's
    environment, modify SPARK_HOME, or control the logging of the
    child process, none of which apply to in-process apps.
    
    The in-process launcher has limitations: it needs Spark in the
    context class loader of the calling thread, and it's bound by
    Spark's current limitation of a single client-mode application
    per JVM. It also relies on the recently added SparkApplication
    trait to make sure different apps don't mess up each other's
    configuration, but currently no cluster manager client implements
    that.
    
    I also chose to keep the same socket-based communication for in-process
    apps, even though it might be possible to avoid it for in-process
    mode. That helps both implementations share more code.
    
    Tested with new and existing unit tests, and with a simple app that
    uses the launcher; also made sure the app ran fine with older launcher
    jar to check binary compatibility.

----


---

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to