Просмотр исходного кода

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

Giovanni Matteo Fumarola 6 лет назад
Родитель
Сommit
6a0e7dd454

+ 18 - 8
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/ApplicationMaster.java

@@ -774,17 +774,27 @@ public class ApplicationMaster {
   }
 
   private void cleanup() {
-    Path dst = null;
     try {
-      FileSystem fs = FileSystem.get(conf);
-      dst = new Path(fs.getHomeDirectory(), getRelativePath(appName,
-          appId.toString(), ""));
-      fs.delete(dst, true);
-    } catch(IOException e) {
-      LOG.warn("Failed to remove application staging directory {}", dst);
+      appSubmitterUgi.doAs(new PrivilegedExceptionAction<Void>() {
+        @Override
+        public Void run() throws IOException {
+          FileSystem fs = FileSystem.get(conf);
+          Path dst = new Path(getAppSubmitterHomeDir(),
+              getRelativePath(appName, appId.toString(), ""));
+          fs.delete(dst, true);
+          return null;
+        }
+      });
+    } 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()));
+  }
+
   /**
    * Main run function for the application master
    *
@@ -1485,7 +1495,7 @@ public class ApplicationMaster {
             String relativePath =
                 getRelativePath(appName, appId.toString(), fileName);
             Path dst =
-                new Path(fs.getHomeDirectory(), relativePath);
+                new Path(getAppSubmitterHomeDir(), relativePath);
             FileStatus fileStatus = fs.getFileStatus(dst);
             LocalResource localRes = LocalResource.newInstance(
                 URL.fromURI(dst.toUri()),