Hello All, We could really use Twill if there is some good working examples out there. I am trying to run hello world and I am seeing this issue. Can someone tell me where is twill looking for the jar and how can I tell it look in a certain folder?
java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.io.FileNotFoundException: /twillsample-0.0.1-SNAPSHOT.one-jar.jar (No such file or directory) at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:294) at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:281) at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116) at com.google.common.util.concurrent.Uninterruptibles.getUninterruptibly(Uninterruptibles.java:132) at org.apache.twill.internal.AbstractExecutionServiceController.awaitTerminated(AbstractExecutionServiceController.java:117) at com.progressive.twillsample.HelloWorld.main(HelloWorld.java:83) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.simontuffs.onejar.Boot.run(Boot.java:340) at com.simontuffs.onejar.Boot.main(Boot.java:166) Caused by: java.lang.RuntimeException: java.io.FileNotFoundException: /twillsample-0.0.1-SNAPSHOT.one-jar.jar (No such file or directory) at com.google.common.base.Throwables.propagate(Throwables.java:160) at org.apache.twill.internal.ApplicationBundler.saveEntry(ApplicationBundler.java:309) at org.apache.twill.internal.ApplicationBundler.putEntry(ApplicationBundler.java:232) at org.apache.twill.internal.ApplicationBundler.access$200(ApplicationBundler.java:57) at org.apache.twill.internal.ApplicationBundler$3.accept(ApplicationBundler.java:208) at org.apache.twill.internal.utils.Dependencies.findClassDependencies(Dependencies.java:80) Command to run this : /opt/share/oracle/jvm/jdk1.8.0_92/bin/java -jar twillsample-0.0.1-SNAPSHOT.one-jar.jar zk:2181 Code is used from twill examples: public class HelloWorld { public static final Logger LOG = LoggerFactory.getLogger(HelloWorld.class); /** * Hello World runnable that is provided to TwillRunnerService to be run. */ private static class HelloWorldRunnable extends AbstractTwillRunnable { @Override public void run() { LOG.info("Hello World. My first distributed application."); } @Override public void stop() { } } public static void main(String[] args) { if (args.length < 1) { System.err.println("Arguments format: <host:port of zookeeper server>"); System.exit(1); } String zkStr = args[0]; YarnConfiguration yarnConfiguration = new YarnConfiguration(getConf()); final TwillRunnerService twillRunner = new YarnTwillRunnerService(yarnConfiguration, zkStr); twillRunner.start(); LOG.info("Twill Runner Started"); String yarnClasspath = yarnConfiguration.get(YarnConfiguration.YARN_APPLICATION_CLASSPATH, Joiner.on(",").join(YarnConfiguration.DEFAULT_YARN_APPLICATION_CLASSPATH)); List<String> applicationClassPaths = Lists.newArrayList(); Iterables.addAll(applicationClassPaths, Splitter.on(",").split(yarnClasspath)); final TwillController controller = twillRunner.prepare(new HelloWorldRunnable()) .addLogHandler(new PrinterLogHandler(new PrintWriter(System.out, true))) .withApplicationClassPaths(applicationClassPaths) .withBundlerClassAcceptor(new HadoopClassExcluder()) .start(); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { try { Futures.getUnchecked(controller.terminate()); } finally { twillRunner.stop(); } } }); try { controller.awaitTerminated(); } catch (ExecutionException e) { e.printStackTrace(); } } private static Configuration getConf() { Configuration conf = new Configuration(); conf.set(MRConfig.FRAMEWORK_NAME, MRConfig.YARN_FRAMEWORK_NAME); conf.addResource(new Path("file:///etc/hadoop/conf/yarn-site.xml")); conf.addResource(new Path("file:///etc/hadoop/conf/core-site.xml")); conf.addResource(new Path("file:///etc/hadoop/conf/hdfs-site.xml")); conf.addResource(new Path("file:///etc/hadoop/conf/mapred-site.xml")); return conf; } static class HadoopClassExcluder extends ClassAcceptor { @Override public boolean accept(String className, URL classUrl, URL classPathUrl) { // exclude hadoop but not hbase package return !(className.startsWith("org.apache.hadoop") && !className.startsWith("org.apache.hadoop.hbase")); } } } Thanks, Krishna