[ https://issues.apache.org/jira/browse/TWILL-63?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14950908#comment-14950908 ]
ASF GitHub Bot commented on TWILL-63: ------------------------------------- Github user chtyim commented on a diff in the pull request: https://github.com/apache/incubator-twill/pull/66#discussion_r41661046 --- Diff: twill-yarn/src/main/java/org/apache/twill/yarn/YarnTwillRunnerService.java --- @@ -175,6 +187,36 @@ protected void shutDown() throws Exception { }; } + public Location createTwillJar() throws IOException { + ApplicationBundler applicationBundler = new ApplicationBundler(new ClassAcceptor()); + List<Class<?>> classes = Lists.newArrayList(); + classes.add(ApplicationMasterMain.class); + classes.add(TwillContainerMain.class); + // Stuck in the yarnAppClient class to make bundler being able to pickup the right yarn-client version + classes.add(yarnAppClient.getClass()); + + twillDependencyClasses = getTwillDependencyClasses(classes); + File tempFile = File.createTempFile("twill", ".jar"); + Location twillJar = new LocalLocationFactory().create(tempFile.toURI()); + applicationBundler.createBundle(twillJar, classes); + return twillJar; + } + + private Set<String> getTwillDependencyClasses(List<Class<?>> classes) throws IOException { + Iterable<String> classNames = Iterables.transform(classes, new Function<Class<?>, String>() { + @Override + public String apply(Class<?> input) { + return input.getName(); + } + }); + + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + if (classLoader == null) { + classLoader = getClass().getClassLoader(); + } + return Dependencies.getClassDependencies(classLoader, new ClassAcceptor(), classNames); --- End diff -- The `getClassDependencies` doesn't give you all twill classes. It only gives you all classes in the dependencies. I think the better way is using all classPathURL encountered during the creation of the twill jar to create a `URLClassLoader`. To check if a class is inside the twill.jar, you can use `ClassLoader.getResource()` on the `URLClassLoader`. > Speed up application launch time > -------------------------------- > > Key: TWILL-63 > URL: https://issues.apache.org/jira/browse/TWILL-63 > Project: Apache Twill > Issue Type: Improvement > Components: yarn > Affects Versions: 0.2.0-incubating > Reporter: Terence Yim > Assignee: Shankar Selvam > Fix For: 0.7.0-incubating > > > Currently when launching an application, two new jars are always created > locally, one for AM (appMaster.jar) and one for Container (container.jar) and > copied to HDFS before submitting the application. The jar files could > potentially be big and if it doesn't changed, it should require copying to > HDFS again. -- This message was sent by Atlassian JIRA (v6.3.4#6332)