我正在努力开发Hadoop项目,但我对所有这些概念都不熟悉。我已经在Ubuntu服务器上成功设置了我的hadoop集群以使用Kerberos身份验证,我可以使用Kerberos票证访问我的HDFS文件。现在我正在尝试在我的Windows机器上编写Java代码来访问远程Kerberized HDFS。这是我到目前为止所尝试的:
class FileCount
{
public static void main(final String[] args) throws IOException, FileNotFoundException, InterruptedException{
System.setProperty("java.security.krb5.realm", "PFE.COM");
System.setProperty("java.security.krb5.kdc","ubuntu:88");
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://192.168.8.101:9000");
conf.set("hadoop.security.authentication", "kerberos");
conf.set("debug", "true");
UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab("hdfs/ubuntu@PFE.COM",
"C:/fichiers/hdfs.keytab");
FileSystem fs = FileSystem.get(conf);
FileStatus[] fsStatus = fs.listStatus(new Path("/"));
for(int i = 0; i < fsStatus.length; i++){
System.out.println(fsStatus[i].getPath().toString());
}
}
}
但是我收到了这个错误:
Exception in thread "main" java.io.IOException: Login failure for hdfs/ubuntu@PFE.COM from keytab C:/fichiers/hdfs.keytab: javax.security.auth.login.LoginException: ubuntu
我已将我的keytab文件从ubntu服务器转移到我的Windows机器,以便能够在此代码中使用它。 另外我不知道我是否应该在我的Windows机器上安装kerberos才能使其工作。所以,如果您有任何想法,请帮助我!