hadoop集群配置了kerberos后,如何使用JAVA程序调用?
使用的是Cloudera 的CDH5.3,配置好kerberos后,使用如何JAVA代码访问,总是报:Unable to obtain password from user
public static void test1(String user, String keytab, String dir) throws Exception {
Configuration conf = new Configuration();
// conf.set("fs.defaultFS", "hdfs://hadoop01:8020");
conf.set("hadoop.security.authentication", "Kerberos");
UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab(user, keytab);
listDir(conf, dir);
}
public static void listDir(Configuration conf, String dir) throws IOException {
FileSystem fs = FileSystem.get(conf);
FileStatus files[] = fs.listStatus(new Path(dir));
for (FileStatus file : files) {
System.out.println(file.getPath());
}
}
Exception in thread "main" java.io.IOException: Login failure for hdfs from keytab /data/soft/kerberos/hdfsaadd.keytab
at org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab(UserGroupInformation.java:891)
at com.security.HdfsSecurityDemo.test1(HdfsSecurityDemo.java:64)
at com.security.HdfsSecurityDemo.main(HdfsSecurityDemo.java:50)
Caused by: javax.security.auth.login.LoginException: Unable to obtain password from user
at com.sun.security.auth.module.Krb5LoginModule.promptForPass(Krb5LoginModule.java:856)
at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:719)
at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:584)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:762)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:203)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:690)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:688)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:687)
at javax.security.auth.login.LoginContext.login(LoginContext.java:595)
at org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab(UserGroupInformation.java:882)
... 2 more
Hadoop
解决了没