使用java从windows访问远程kerberized HDF

使用java从windows访问远程kerberized HDF,windows,hadoop,hdfs,kerberos,Windows,Hadoop,Hdfs,Kerberos,我正在尝试一个Hadoop项目,但我对所有这些概念都不熟悉。我已经成功地在Ubuntu服务器上设置了hadoop集群,以使用Kerberos身份验证,并且我可以使用Kerberos票证访问我的HDFS文件。现在我正试图在我的windows机器上编写一个Java代码来访问远程Kerberized HDF。这就是我迄今为止所尝试的: class FileCount { public static void main(final String[] args) throws IOExceptio

我正在尝试一个Hadoop项目,但我对所有这些概念都不熟悉。我已经成功地在Ubuntu服务器上设置了hadoop集群,以使用Kerberos身份验证,并且我可以使用Kerberos票证访问我的HDFS文件。现在我正试图在我的windows机器上编写一个Java代码来访问远程Kerberized HDF。这就是我迄今为止所尝试的:

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());
        }
    }
}
我已经将我的keytab文件从ubntu服务器传输到我的windows机器,以便能够在此代码中使用它。
此外,我不知道是否应该在我的windows计算机上安装kerberos才能使其正常工作。所以,如果你有任何想法,请帮助我

我认为,如果您试图从未配置hadoop的Windows计算机上运行此文件,您还需要像
hdfs site.xml
core site.xml
等和
krb5.conf
这样的文件以及keytab文件/ubuntu@PFE.COM指的是服务(即在DNS规范名称为“ubuntu”的机器上运行的HDFS)。您需要的是客户端登录,例如
someone@PFE.COM
。要调试Kerberos身份验证过程,您需要一个特定于Hadoop的标志加上低级JAAS标志,如>>
export-Hadoop\u-JAAS\u-debug=true
中所述(或Windows等效程序)加上
-Dsun.security.krb5.debug=true
和我的个人触摸
-Djava.security.debug=gssloginconconfig、configfile、configparser、logincontext
(因为配置文件中的语法错误会被忽略),Windows上的Hadoop客户端需要“本机库”对于Kerberos身份验证,请参阅。在启用Kerberos而不使用hadoop Libraries之前,我让我的windows客户端在HDFS中读写。我认为问题与权限有关,但我不确定到底是什么不起作用。
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