Author: virag
Date: Wed Jan  2 19:51:46 2013
New Revision: 1427979

URL: http://svn.apache.org/viewvc?rev=1427979&view=rev
Log:
 OOZIE-1148 Set the renewer correctly for JT/RM delegation tokens (rohini via 
virag)

Modified:
    
oozie/trunk/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java
    
oozie/trunk/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java
    
oozie/trunk/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java
    oozie/trunk/release-log.txt

Modified: 
oozie/trunk/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java
URL: 
http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java?rev=1427979&r1=1427978&r2=1427979&view=diff
==============================================================================
--- 
oozie/trunk/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java
 (original)
+++ 
oozie/trunk/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java
 Wed Jan  2 19:51:46 2013
@@ -46,7 +46,6 @@ import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.permission.AccessControlException;
-import org.apache.hadoop.io.Text;
 import org.apache.hadoop.mapred.JobClient;
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.hadoop.mapred.JobID;
@@ -729,8 +728,9 @@ public class JavaActionExecutor extends 
                 XLog.getLog(getClass()).debug("Submitting the job through Job 
Client for action " + action.getId());
 
                 // setting up propagation of the delegation token.
-                Token<DelegationTokenIdentifier> mrdt = 
jobClient.getDelegationToken(new 
Text(HadoopAccessorService.MR_DELEGATION_TOKEN));
-                launcherJobConf.getCredentials().addToken(new 
Text(HadoopAccessorService.MR_DELEGATION_TOKEN), mrdt);
+                Token<DelegationTokenIdentifier> mrdt = 
jobClient.getDelegationToken(HadoopAccessorService
+                        .getMRDelegationTokenRenewer(launcherJobConf));
+                
launcherJobConf.getCredentials().addToken(HadoopAccessorService.MR_TOKEN_ALIAS, 
mrdt);
 
                 // insert credentials tokens to launcher job conf if needed
                 if (needInjectCredentials()) {

Modified: 
oozie/trunk/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java
URL: 
http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java?rev=1427979&r1=1427978&r2=1427979&view=diff
==============================================================================
--- 
oozie/trunk/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java
 (original)
+++ 
oozie/trunk/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java
 Wed Jan  2 19:51:46 2013
@@ -55,6 +55,8 @@ import java.util.concurrent.ConcurrentMa
  */
 public class HadoopAccessorService implements Service {
 
+    private static XLog LOG = XLog.getLog(HadoopAccessorService.class);
+
     public static final String CONF_PREFIX = Service.CONF_PREFIX + 
"HadoopAccessorService.";
     public static final String JOB_TRACKER_WHITELIST = CONF_PREFIX + 
"jobTracker.whitelist";
     public static final String NAME_NODE_WHITELIST = CONF_PREFIX + 
"nameNode.whitelist";
@@ -63,9 +65,14 @@ public class HadoopAccessorService imple
     public static final String KERBEROS_AUTH_ENABLED = CONF_PREFIX + 
"kerberos.enabled";
     public static final String KERBEROS_KEYTAB = CONF_PREFIX + "keytab.file";
     public static final String KERBEROS_PRINCIPAL = CONF_PREFIX + 
"kerberos.principal";
-    public static final String MR_DELEGATION_TOKEN = "oozie mr token";
+    public static final Text MR_TOKEN_ALIAS = new Text("oozie mr token");
 
     private static final String OOZIE_HADOOP_ACCESSOR_SERVICE_CREATED = 
"oozie.HadoopAccessorService.created";
+    /** The Kerberos principal for the job tracker.*/
+    private static final String JT_PRINCIPAL = 
"mapreduce.jobtracker.kerberos.principal";
+    /** The Kerberos principal for the resource manager.*/
+    private static final String RM_PRINCIPAL = 
"yarn.resourcemanager.principal";
+    private static final Map<String, Text> mrTokenRenewers = new 
HashMap<String, Text>();
 
     private Set<String> jobTrackerWhitelist = new HashSet<String>();
     private Set<String> nameNodeWhitelist = new HashSet<String>();
@@ -362,8 +369,8 @@ public class HadoopAccessorService imple
                     return new JobClient(conf);
                 }
             });
-            Token<DelegationTokenIdentifier> mrdt = 
jobClient.getDelegationToken(new Text(MR_DELEGATION_TOKEN));
-            conf.getCredentials().addToken(new Text(MR_DELEGATION_TOKEN), 
mrdt);
+            Token<DelegationTokenIdentifier> mrdt = 
jobClient.getDelegationToken(getMRDelegationTokenRenewer(conf));
+            conf.getCredentials().addToken(MR_TOKEN_ALIAS, mrdt);
             return jobClient;
         }
         catch (InterruptedException ex) {
@@ -449,6 +456,26 @@ public class HadoopAccessorService imple
         }
     }
 
+    public static Text getMRDelegationTokenRenewer(JobConf jobConf) {
+        // Getting renewer correctly for JT principal also though JT in hadoop 
1.x does not have
+        // support for renewing/cancelling tokens
+        String servicePrincipal = jobConf.get(RM_PRINCIPAL, 
jobConf.get(JT_PRINCIPAL));
+        Text renewer;
+        if (servicePrincipal != null) { // secure cluster
+            renewer = mrTokenRenewers.get(servicePrincipal);
+            if (renewer == null) {
+                // Remove host and domain
+                renewer = new Text(servicePrincipal.split("[/@]")[0]);
+                LOG.info("Delegation Token Renewer for " + servicePrincipal + 
" is " + renewer);
+                mrTokenRenewers.put(servicePrincipal, renewer);
+            }
+        }
+        else {
+            renewer = MR_TOKEN_ALIAS; //Doesn't matter what we pass as renewer
+        }
+        return renewer;
+    }
+
     public void addFileToClassPath(String user, final Path file, final 
Configuration conf)
             throws IOException {
         ParamChecker.notEmpty(user, "user");

Modified: 
oozie/trunk/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java
URL: 
http://svn.apache.org/viewvc/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java?rev=1427979&r1=1427978&r2=1427979&view=diff
==============================================================================
--- 
oozie/trunk/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java
 (original)
+++ 
oozie/trunk/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java
 Wed Jan  2 19:51:46 2013
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -21,6 +21,7 @@ import org.apache.oozie.test.XTestCase;
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.hadoop.mapred.JobClient;
 import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.io.Text;
 import org.apache.oozie.util.IOUtils;
 
 import java.io.File;
@@ -113,4 +114,14 @@ public class TestHadoopAccessorService e
         }
     }
 
+    public void testGetMRDelegationTokenRenewer() throws Exception {
+        JobConf jobConf = new JobConf();
+        assertEquals(new Text("oozie mr token"), 
HadoopAccessorService.getMRDelegationTokenRenewer(jobConf));
+        jobConf.set("mapreduce.jobtracker.kerberos.principal", 
"mapred/[email protected]");
+        assertEquals(new Text("mapred"), 
HadoopAccessorService.getMRDelegationTokenRenewer(jobConf));
+        jobConf = new JobConf();
+        jobConf.set("yarn.resourcemanager.principal", 
"rm/[email protected]");
+        assertEquals(new Text("rm"), 
HadoopAccessorService.getMRDelegationTokenRenewer(jobConf));
+    }
+
 }

Modified: oozie/trunk/release-log.txt
URL: 
http://svn.apache.org/viewvc/oozie/trunk/release-log.txt?rev=1427979&r1=1427978&r2=1427979&view=diff
==============================================================================
--- oozie/trunk/release-log.txt (original)
+++ oozie/trunk/release-log.txt Wed Jan  2 19:51:46 2013
@@ -69,6 +69,7 @@ OOZIE-944 Implement Workflow Generator U
 
 -- Oozie 3.3.1 (unreleased)
 
+OOZIE-1148 Set the renewer correctly for JT/RM delegation tokens (rohini via 
virag)
 OOZIE-1147 HCatCredentialHelper uses the wrong API for getDelegationToken 
(rohini via virag)
 OOZIE-1149 Update 3.3 branch POM's to 3.3.1-SNAPSHOT (virag)
 OOZIE-1139 bump up Tomcat version to 6.0.36 (tucu via rkanter)


Reply via email to