As Vinod mentioned, package your dirs so that they untar into the CWD. 

If you have a directory structure in your .tgz  (e.g. lib.tgz -> lib/foo.jar) 
you'll need to set your classpath to be ./foo/*.

hth,
Arun

On Sep 20, 2011, at 10:26 AM, Chris Riccomini wrote:

> Hey All,
> 
> I'm trying to use YARN's LocalResource stuff to ship a tgz file that has all 
> the jars that I need on my Classpath (for my ApplicationMaster and my 
> container tasks). I'm having trouble figuring out what my client should put 
> in the ApplicationMaster exec command that it sends to the Resource manager. 
> I tried -cp :./*:, but it didn't seem to pick anything up.
> 
> Here are some code snippets:
> 
>    // tell resource manager to execute kafka's application master
>    new ApplicationMasterExecutor(packagePath)
>      .addCommand("java -cp :./*: kafka.yarn.ApplicationMaster " + 
> streamerClass + " " + tasks + " "
>        + "1>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stdout "
>        + "2>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stderr")
>      .execute(new Configuration)
> 
> When I run that, I see in my log output dir that it could not find 
> kafka.yarn.ApplicationMaster. I'm the code sample above, packagePath is a 
> local FS path to my .tgz file. It's uploaded by my ApplicationMasterExecutor 
> with:
> 
>    val packageFile = new File(packagePath);
>    val packageUrl = 
> ConverterUtils.getYarnUrlFromPath(FileContext.getFileContext.makeQualified(new
>  Path(packagePath)));
> 
>    packageResource.setResource(packageUrl);
>    packageResource.setSize(packageFile.length());
>    packageResource.setTimestamp(packageFile.lastModified());
>    packageResource.setType(LocalResourceType.ARCHIVE);
>    packageResource.setVisibility(LocalResourceVisibility.APPLICATION);
> 
>    resource.setMemory(memory)
>    containerCtx.setResource(resource)
>    containerCtx.setCommands(cmds.toList)
>    containerCtx.setLocalResources(Collections.singletonMap("package", 
> packageResource))
>    appCtx.setApplicationId(appId)
>    appCtx.setUser(user.getShortUserName)
>    appCtx.setAMContainerSpec(containerCtx)
>    request.setApplicationSubmissionContext(appCtx)
>    applicationsManager.submitApplication(request)
> 
> When I poke around in /tmp/nm-local-dir/usercache/criccomi, I see nothing in 
> there after a run. Before, when I was running with visibility set to USER 
> (instead of APPLICATION), I could see the unzipped data in the filecache, but 
> that's gone now that I switched to APPLICATION.
> 
> I'm probably just not putting the proper classpath. How do I do this?
> 
> Cheers,
> Chris

Reply via email to