[ 
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)

Reply via email to