YARN-9482. DistributedShell job with localization fails in unsecure cluster. Contributed by Prabhu Joseph.

This commit is contained in:
Giovanni Matteo Fumarola 2019-05-23 13:27:52 -07:00
parent b4b9120e28
commit 6a0e7dd454
1 changed files with 18 additions and 8 deletions

View File

@ -774,15 +774,25 @@ public class ApplicationMaster {
} }
private void cleanup() { private void cleanup() {
Path dst = null;
try { try {
appSubmitterUgi.doAs(new PrivilegedExceptionAction<Void>() {
@Override
public Void run() throws IOException {
FileSystem fs = FileSystem.get(conf); FileSystem fs = FileSystem.get(conf);
dst = new Path(fs.getHomeDirectory(), getRelativePath(appName, Path dst = new Path(getAppSubmitterHomeDir(),
appId.toString(), "")); getRelativePath(appName, appId.toString(), ""));
fs.delete(dst, true); fs.delete(dst, true);
} catch(IOException e) { return null;
LOG.warn("Failed to remove application staging directory {}", dst);
} }
});
} catch(Exception e) {
LOG.warn("Failed to remove application staging directory", e);
}
}
private Path getAppSubmitterHomeDir() {
return new Path("/user/" +
System.getenv(ApplicationConstants.Environment.USER.name()));
} }
/** /**
@ -1485,7 +1495,7 @@ public class ApplicationMaster {
String relativePath = String relativePath =
getRelativePath(appName, appId.toString(), fileName); getRelativePath(appName, appId.toString(), fileName);
Path dst = Path dst =
new Path(fs.getHomeDirectory(), relativePath); new Path(getAppSubmitterHomeDir(), relativePath);
FileStatus fileStatus = fs.getFileStatus(dst); FileStatus fileStatus = fs.getFileStatus(dst);
LocalResource localRes = LocalResource.newInstance( LocalResource localRes = LocalResource.newInstance(
URL.fromURI(dst.toUri()), URL.fromURI(dst.toUri()),