From 3dd4e284cb8ba8ebcfff2edd8f2857ceec0be7ff Mon Sep 17 00:00:00 2001 From: Denys Kuzmenko Date: Thu, 15 Nov 2018 12:12:59 +0100 Subject: [PATCH] HIVE-20914: MRScratchDir permission denied when 'hive.server2.enable.doAs', 'hive.exec.submitviachild' are set to 'true' and impersonated/proxy user is used --- ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapRedTask.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapRedTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapRedTask.java index 8266906c338c88fa35bc3a3b68e45c1ab6c2243c..cafd13efb4cb654c0b5856510069671002efb3da 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapRedTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapRedTask.java @@ -49,10 +49,13 @@ import org.apache.hadoop.hive.ql.session.SessionState; import org.apache.hadoop.hive.ql.session.SessionState.ResourceType; import org.apache.hadoop.hive.shims.ShimLoader; +import org.apache.hadoop.hive.shims.Utils; import org.apache.hive.common.util.StreamPrinter; import org.apache.hadoop.mapred.RunningJob; import org.json.JSONException; +import static org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod.PROXY; + /** * Extension of ExecDriver: * - can optionally spawn a map-reduce task from a separate jvm @@ -71,6 +74,7 @@ static final String HIVE_MAIN_CLIENT_DEBUG_OPTS = "HIVE_MAIN_CLIENT_DEBUG_OPTS"; static final String HIVE_CHILD_CLIENT_DEBUG_OPTS = "HIVE_CHILD_CLIENT_DEBUG_OPTS"; static final String[] HIVE_SYS_PROP = {"build.dir", "build.dir.hive", "hive.query.id"}; + static final String HADOOP_PROXY_USER = "HADOOP_PROXY_USER"; private transient ContentSummary inputSummary = null; private transient boolean runningViaChild = false; @@ -267,6 +271,10 @@ public int execute(DriverContext driverContext) { configureDebugVariablesForChildJVM(variables); } + if (PROXY == Utils.getUGI().getAuthenticationMethod()) { + variables.put(HADOOP_PROXY_USER, Utils.getUGI().getShortUserName()); + } + env = new String[variables.size()]; int pos = 0; for (Map.Entry entry : variables.entrySet()) { -- 2.15.1 (Apple Git-101)