You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@twill.apache.org by "Martin Serrano (JIRA)" <ji...@apache.org> on 2017/02/23 20:31:44 UTC
[jira] [Comment Edited] (TWILL-217) AppMaster launcher should
include eventHandler dependencies and nothing else from application
[ https://issues.apache.org/jira/browse/TWILL-217?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15881207#comment-15881207 ]
Martin Serrano edited comment on TWILL-217 at 2/23/17 8:31 PM:
---------------------------------------------------------------
Seems then that we will need some way to get the list of all org.apache.twill.api.* classes off of the classpath in order to do this dependency walk:
* We could do this ourselves with some custom code.
* Guava 14 introduced such a utility: [ClassPath|https://github.com/google/guava/wiki/ReflectionExplained#classpath]. What is the history around using guava 13 versus later libraries?
* Could sort of cheat, and do something like what {{YarnTwillRunnerService}} does but restrict for the api package:
{code:language=java}
// Find all the classpaths for Twill classes. It is used for class filtering when building application jar
// in the YarnTwillPreparer
Dependencies.findClassDependencies(getClass().getClassLoader(), new ClassAcceptor() {
@Override
public boolean accept(String className, URL classUrl, URL classPathUrl) {
if (!className.startsWith("org.apache.twill.")) {
return false;
}
twillClassPaths.add(classPathUrl);
return true;
}
}, getClass().getName());
{code}
Thoughts?
was (Author: mserrano):
Seems then that we will need some way to get the list of all org.apache.twill.api.* classes off of the classpath in order to do this dependency walk:
* We could do this ourselves with some custom code.
* Guava 14 introduced such a utility: [ClassPath|https://github.com/google/guava/wiki/ReflectionExplained#classpath]. What is the history around using guava 13 versus later libraries?
* Could sort of cheat, and do something like what {{YarnTwillRunnerService}} does but just for the api package:
{code:language=java}
// Find all the classpaths for Twill classes. It is used for class filtering when building application jar
// in the YarnTwillPreparer
Dependencies.findClassDependencies(getClass().getClassLoader(), new ClassAcceptor() {
@Override
public boolean accept(String className, URL classUrl, URL classPathUrl) {
if (!className.startsWith("org.apache.twill.")) {
return false;
}
twillClassPaths.add(classPathUrl);
return true;
}
}, getClass().getName());
{code}
Thoughts?
> AppMaster launcher should include eventHandler dependencies and nothing else from application
> ---------------------------------------------------------------------------------------------
>
> Key: TWILL-217
> URL: https://issues.apache.org/jira/browse/TWILL-217
> Project: Apache Twill
> Issue Type: Improvement
> Components: yarn
> Affects Versions: 0.9.0
> Reporter: Martin Serrano
> Assignee: Martin Serrano
>
> Currently the launcher for the appmaster includes the application.jar libraries. This is to support user code that adds an EventHandler. The application may have many dependencies and including them in the appmaster classpath can lead to otherwise inaddressable incompatibilities.
> In my case, something in my application's large dependency graph was interfering with the Kafka server operation. I was not able to determine what it was but tweaking the appmaster loader to not include my application jars fixed the issue.
> Instead the bundler that creates the twill.jar should include the EventHandler extension (if any) as an explicit dependency. In this way, only the jars needed to support the event handler will be on the twill classpath.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)