diff --git a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java index 73ec6f2..006835a 100644 --- a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java +++ b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java @@ -179,6 +179,7 @@ PLAN("hive.exec.plan", ""), SCRATCHDIR("hive.exec.scratchdir", "/tmp/hive-" + System.getProperty("user.name")), LOCALSCRATCHDIR("hive.exec.local.scratchdir", System.getProperty("java.io.tmpdir") + File.separator + System.getProperty("user.name")), + SCRATCHDIRPERMISSION("hive.scratch.dir.permission", "700"), SUBMITVIACHILD("hive.exec.submitviachild", false), SCRIPTERRORLIMIT("hive.exec.script.maxerrsize", 100000), ALLOWPARTIALCONSUMP("hive.exec.script.allow.partial.consumption", false), diff --git a/ql/src/java/org/apache/hadoop/hive/ql/Context.java b/ql/src/java/org/apache/hadoop/hive/ql/Context.java index 5340e99..0ef0c12 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/Context.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/Context.java @@ -40,6 +40,7 @@ import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; +import org.apache.hadoop.fs.permission.FsPermission; import org.apache.hadoop.hive.common.FileUtils; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.exec.TaskRunner; @@ -73,6 +74,9 @@ // scratch directory to use for local file system tmp folders private final String localScratchDir; + // the permission to scratch directory (local and hdfs) + private final String scratchDirPermission; + // Keeps track of scratch directories created for different scheme/authority private final Map fsScratchDirs = new HashMap(); @@ -117,6 +121,7 @@ public Context(Configuration conf, String executionId) { executionId); localScratchDir = new Path(HiveConf.getVar(conf, HiveConf.ConfVars.LOCALSCRATCHDIR), executionId).toUri().getPath(); + scratchDirPermission= HiveConf.getVar(conf, HiveConf.ConfVars.SCRATCHDIRPERMISSION); } @@ -184,6 +189,9 @@ private String getScratchDir(String scheme, String authority, if (!fs.mkdirs(dirPath)) { throw new RuntimeException("Cannot make directory: " + dirPath.toString()); + } else { + FsPermission fsPermission = new FsPermission(scratchDirPermission); + fs.setPermission(dirPath, fsPermission); } if (isHDFSCleanup) { fs.deleteOnExit(dirPath);