Author: omalley
Date: Tue Mar 8 05:53:29 2011
New Revision: 1079188
URL: http://svn.apache.org/viewvc?rev=1079188&view=rev
Log:
commit 6157dc1e8859ccea4af1943c917efd7d25b94dff
Author: Devaraj Das <[email protected]>
Date: Sun Nov 21 22:47:53 2010 -0800
MAPREDUCE-1959 Removes resolution of the JT short name from the Job client.
Contributed by Kan Zhang.
+++ b/YAHOO-CHANGES.txt
+ MAPREDUCE-1959 Removes resolution of the JT short name from the Job
client.
+ (Kan Zhang via ddas)
+
Modified:
hadoop/mapreduce/branches/yahoo-merge/src/java/org/apache/hadoop/mapreduce/security/TokenCache.java
hadoop/mapreduce/branches/yahoo-merge/src/test/mapred/org/apache/hadoop/mapreduce/security/TestTokenCache.java
Modified:
hadoop/mapreduce/branches/yahoo-merge/src/java/org/apache/hadoop/mapreduce/security/TokenCache.java
URL:
http://svn.apache.org/viewvc/hadoop/mapreduce/branches/yahoo-merge/src/java/org/apache/hadoop/mapreduce/security/TokenCache.java?rev=1079188&r1=1079187&r2=1079188&view=diff
==============================================================================
---
hadoop/mapreduce/branches/yahoo-merge/src/java/org/apache/hadoop/mapreduce/security/TokenCache.java
(original)
+++
hadoop/mapreduce/branches/yahoo-merge/src/java/org/apache/hadoop/mapreduce/security/TokenCache.java
Tue Mar 8 05:53:29 2011
@@ -34,10 +34,10 @@ import org.apache.hadoop.hdfs.security.t
import org.apache.hadoop.hdfs.server.namenode.NameNode;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.JobConf;
+import org.apache.hadoop.mapred.JobTracker;
import org.apache.hadoop.mapreduce.security.token.JobTokenIdentifier;
import org.apache.hadoop.mapreduce.server.jobtracker.JTConfig;
import org.apache.hadoop.security.Credentials;
-import org.apache.hadoop.security.KerberosName;
import org.apache.hadoop.security.SecurityUtil;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.Token;
@@ -92,6 +92,13 @@ public class TokenCache {
}
}
+ static String getJTPrincipal(Configuration conf) throws IOException {
+ String jtHostname = JobTracker.getAddress(conf).getHostName();
+ // get jobtracker principal for use as delegation token renewer
+ return SecurityUtil.getServerPrincipal(conf.get(JTConfig.JT_USER_NAME),
+ jtHostname);
+ }
+
/**
* get delegation token for a specific FS
* @param fs
@@ -102,12 +109,11 @@ public class TokenCache {
*/
static void obtainTokensForNamenodesInternal(FileSystem fs,
Credentials credentials, Configuration conf) throws IOException {
-
- // get jobtracker principal id (for the renewer)
- KerberosName jtKrbName =
- new KerberosName(conf.get(JTConfig.JT_USER_NAME,""));
-
- String delegTokenRenewer = jtKrbName.getShortName();
+ String delegTokenRenewer = getJTPrincipal(conf);
+ if (delegTokenRenewer == null || delegTokenRenewer.length() == 0) {
+ throw new IOException(
+ "Can't get JobTracker Kerberos principal for use as renewer");
+ }
boolean readFile = true;
String fsName = fs.getCanonicalServiceName();
Modified:
hadoop/mapreduce/branches/yahoo-merge/src/test/mapred/org/apache/hadoop/mapreduce/security/TestTokenCache.java
URL:
http://svn.apache.org/viewvc/hadoop/mapreduce/branches/yahoo-merge/src/test/mapred/org/apache/hadoop/mapreduce/security/TestTokenCache.java?rev=1079188&r1=1079187&r2=1079188&view=diff
==============================================================================
---
hadoop/mapreduce/branches/yahoo-merge/src/test/mapred/org/apache/hadoop/mapreduce/security/TestTokenCache.java
(original)
+++
hadoop/mapreduce/branches/yahoo-merge/src/test/mapred/org/apache/hadoop/mapreduce/security/TestTokenCache.java
Tue Mar 8 05:53:29 2011
@@ -149,6 +149,7 @@ public class TestTokenCache {
@BeforeClass
public static void setUp() throws Exception {
Configuration conf = new Configuration();
+ conf.set("hadoop.security.auth_to_local", "RULE:[2:$1]");
dfsCluster = new MiniDFSCluster(conf, numSlaves, true, null);
jConf = new JobConf(conf);
mrCluster = new MiniMRCluster(0, 0, numSlaves,
@@ -226,7 +227,7 @@ public class TestTokenCache {
String nnUri = dfsCluster.getURI().toString();
jConf.set(MRJobConfig.JOB_NAMENODES, nnUri + "," + nnUri);
// job tracker principla id..
- jConf.set(JTConfig.JT_USER_NAME, "jt_id");
+ jConf.set(JTConfig.JT_USER_NAME, "jt_id/foo@BAR");
// using argument to pass the file name
String[] args = {
@@ -304,7 +305,7 @@ public class TestTokenCache {
DelegationTokenSecretManager dtSecretManager =
dfsCluster.getNamesystem().getDelegationTokenSecretManager();
- String renewer = "renewer";
+ String renewer = "renewer/foo@BAR";
jConf.set(JTConfig.JT_USER_NAME,renewer);
DelegationTokenIdentifier dtId =
new DelegationTokenIdentifier(new Text("user"), new Text(renewer), null);
@@ -360,4 +361,20 @@ public class TestTokenCache {
}
}
+ /**
+ * verify _HOST substitution
+ * @throws IOException
+ */
+ @Test
+ public void testGetJTPrincipal() throws IOException {
+ String serviceName = "jt/";
+ String hostName = "foo";
+ String domainName = "@BAR";
+ Configuration conf = new Configuration();
+ conf.set(JTConfig.JT_IPC_ADDRESS, hostName + ":8888");
+ conf.set(JTConfig.JT_USER_NAME, serviceName + SecurityUtil.HOSTNAME_PATTERN
+ + domainName);
+ assertEquals("Failed to substitute HOSTNAME_PATTERN with hostName",
+ serviceName + hostName + domainName, TokenCache.getJTPrincipal(conf));
+ }
}