diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapredLocalTask.java ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapredLocalTask.java index 540a9a1..1c5b8ed 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapredLocalTask.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapredLocalTask.java @@ -230,8 +230,7 @@ public int execute(DriverContext driverContext) { if(ShimLoader.getHadoopShims().isSecurityEnabled() && - conf.getBoolVar(HiveConf.ConfVars.HIVE_SERVER2_ENABLE_DOAS) == true - ){ + ShimLoader.getHadoopShims().isLoginKeytabBased()) { //If kerberos security is enabled, and HS2 doAs is enabled, // then additional params need to be set so that the command is run as // intended user diff --git shims/0.20/src/main/java/org/apache/hadoop/hive/shims/Hadoop20Shims.java shims/0.20/src/main/java/org/apache/hadoop/hive/shims/Hadoop20Shims.java index 623ebcd..31c2aad 100644 --- shims/0.20/src/main/java/org/apache/hadoop/hive/shims/Hadoop20Shims.java +++ shims/0.20/src/main/java/org/apache/hadoop/hive/shims/Hadoop20Shims.java @@ -624,6 +624,11 @@ public void reLoginUserFromKeytab() throws IOException{ throwKerberosUnsupportedError(); } + @Override + public boolean isLoginKeytabBased() throws IOException { + return false; + } + private void throwKerberosUnsupportedError() throws UnsupportedOperationException{ throw new UnsupportedOperationException("Kerberos login is not supported" + " in this hadoop version (" + VersionInfo.getVersion() + ")"); diff --git shims/common-secure/src/main/java/org/apache/hadoop/hive/shims/HadoopShimsSecure.java shims/common-secure/src/main/java/org/apache/hadoop/hive/shims/HadoopShimsSecure.java index fd274a6..faa3334 100644 --- shims/common-secure/src/main/java/org/apache/hadoop/hive/shims/HadoopShimsSecure.java +++ shims/common-secure/src/main/java/org/apache/hadoop/hive/shims/HadoopShimsSecure.java @@ -593,6 +593,11 @@ public void reLoginUserFromKeytab() throws IOException{ } @Override + public boolean isLoginKeytabBased() throws IOException { + return UserGroupInformation.isLoginKeytabBased(); + } + + @Override abstract public JobTrackerState getJobTrackerState(ClusterStatus clusterStatus) throws Exception; @Override diff --git shims/common/src/main/java/org/apache/hadoop/hive/shims/HadoopShims.java shims/common/src/main/java/org/apache/hadoop/hive/shims/HadoopShims.java index 62ff878..4cd77a4 100644 --- shims/common/src/main/java/org/apache/hadoop/hive/shims/HadoopShims.java +++ shims/common/src/main/java/org/apache/hadoop/hive/shims/HadoopShims.java @@ -367,6 +367,13 @@ void setTokenStr(UserGroupInformation ugi, String tokenStr, String tokenService) */ public void reLoginUserFromKeytab() throws IOException; + /*** + * Check if the current UGI is keytab based + * @return + * @throws IOException + */ + public boolean isLoginKeytabBased() throws IOException; + /** * Move the directory/file to trash. In case of the symlinks or mount points, the file is * moved to the trashbin in the actual volume of the path p being deleted