Java 无法为hadoop指定kerberos的配置位置

Java 无法为hadoop指定kerberos的配置位置,java,hadoop,kerberos,Java,Hadoop,Kerberos,我正在用ToolRunner测试我的第一份工作。为了运行它,我在Windows上定义了一个krb5.ini文件,如下所示: [realms] EXAMPLE.COM = { kdc = kerberos.example.com admin_server = localhost dns_lookup_kdc = false } 我把它放在C:\Windows\ 然后,我尝试通过以下方式为我的代码指定它的位置: 为主代码添加java.security.krb5.config=C:\Windows\

我正在用ToolRunner测试我的第一份工作。为了运行它,我在Windows上定义了一个krb5.ini文件,如下所示:

[realms]
EXAMPLE.COM = {
kdc = kerberos.example.com
admin_server = localhost
dns_lookup_kdc = false
}
我把它放在
C:\Windows\

然后,我尝试通过以下方式为我的代码指定它的位置:

  • 为主代码添加
    java.security.krb5.config=C:\Windows\krb5.ini的参数
  • krb5.ini的地址添加到我的项目的已知库中
  • 使用以下命令定义操作系统(Windows 7)的环境变量:
    KRB5\u CONFIG=C:\Windows\KRB5.ini
    尽管had告诉我们“您可以通过设置环境变量KRB5_CONFIG来覆盖默认位置。在KRB5_CONFIG中可以指定多个冒号分隔的文件名;所有存在的文件都将被读取。”
  • 使用System.setProperty指定krb5.ini的位置,如下所示:

  • 这些方法中的任何一种都无法解决我遇到的错误:

    Exception in thread "main" java.lang.IllegalArgumentException: Can't get Kerberos realm
    at org.apache.hadoop.security.HadoopKerberosName.setConfiguration(HadoopKerberosName.java:65)   at org.apache.hadoop.security.HadoopKerberosName.setConfiguration(HadoopKerberosName.java:65)
    at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:275)
    at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:260)
    at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:790)
    at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:760)
    at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:633)
    at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2812)
    at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2802)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2668)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:371)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:170)
    at org.enahang.mapreduce.utils.mrUtils.Test.run(Test.java:125)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.enahang.mapreduce.utils.mrUtils.Test.main(Test.java:62)
    
    线程“main”java.lang.IllegalArgumentException中的异常:无法获取Kerberos领域 位于org.apache.hadoop.security.HadoopKerberosName.setConfiguration(HadoopKerberosName.java:65),位于org.apache.hadoop.security.HadoopKerberosName.setConfiguration(HadoopKerberosName.java:65) 位于org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:275) 位于org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:260) 位于org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:790) 位于org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:760) 位于org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:633) 位于org.apache.hadoop.fs.FileSystem$Cache$Key.(FileSystem.java:2812) 位于org.apache.hadoop.fs.FileSystem$Cache$Key.(FileSystem.java:2802) 位于org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2668) 位于org.apache.hadoop.fs.FileSystem.get(FileSystem.java:371) 位于org.apache.hadoop.fs.FileSystem.get(FileSystem.java:170) 位于org.enahang.mapreduce.utils.mrUtils.Test.run(Test.java:125) 位于org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 位于org.enahang.mapreduce.utils.mrUtils.Test.main(Test.java:62)
    我的环境是netbeans,在尝试这些方法之前,我大概知道这些方法不起作用。我通常可以通过添加适当的jar文件作为外部库来解决这些问题。有什么想法吗?还是暗示


    提前感谢

    我的2美分:尝试改进Kerberos配置,而不是疑惑它为什么不能正常工作。例如,尝试
    default\u realm
    子句:

    [libdefaults]
    default_realm    = EXAMPLE.COM
    dns_lookup_kdc   = false
    dns_lookup_realm = false
    
    [realms]
    EXAMPLE.COM = {
      kdc = kerberos.example.com
    }
    

    您可能还需要定义
    允许的加密类型
    默认加密类型
    默认加密类型
    可转发的
    等,具体取决于您的Kerberos实现。

    这是一个java应用程序。。。因此,在您的配置文件路径中,它将以相反方向出现斜杠。。。因此:

    C:/Windows/krb5.ini
    

    好主意。但这对我不起作用。我认为java已经聚合了所有包含它的定义的配置文件,我已经将它们添加到我的代码中,因此它降低了我的命令的优先级。但是,因为这是我的第一次测试,所以我删除了hadoop auth以运行代码
    C:/Windows/krb5.ini