diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/MapredLocalTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/MapredLocalTask.java index d8ba9d9..dd0efc7 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/MapredLocalTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/MapredLocalTask.java @@ -58,6 +58,8 @@ import org.apache.hadoop.hive.serde2.ColumnProjectionUtils; import org.apache.hadoop.hive.serde2.objectinspector.InspectableObject; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; +import org.apache.hadoop.hive.shims.HadoopShims; +import org.apache.hadoop.hive.shims.ShimLoader; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.util.ReflectionUtils; @@ -195,6 +197,14 @@ public int execute(DriverContext driverContext) { // } + //Set HADOOP_USER_NAME env variable for child process, so that + // it also runs with hadoop permissions for the user the job is running as + // This will be used by hadoop only in unsecure(/non kerberos) mode + HadoopShims shim = ShimLoader.getHadoopShims(); + String endUserName = shim.getShortUserName(shim.getUGIForConf(job)); + console.printInfo("setting HADOOP_USER_NAME\t" + endUserName); + variables.put("HADOOP_USER_NAME", endUserName); + if (variables.containsKey(HADOOP_OPTS_KEY)) { variables.put(HADOOP_OPTS_KEY, variables.get(HADOOP_OPTS_KEY) + hadoopOpts); } else {