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

时间:2017-02-26 17:22:51

标签: java hadoop kerberos

我正在测试我的第一个使用ToolRunner运行的Job。为了运行它我在Windows上定义了一个krb5.ini文件,就是这样:

[realms]
EXAMPLE.COM = {
kdc = kerberos.example.com
admin_server = localhost
dns_lookup_kdc = false
}

我把它放在C:\Windows\

然后,我尝试用这些方法为我的代码指定它的位置:

  1. 为主要代码添加java.security.krb5.config=C:\Windows\krb5.ini
  2. 的参数
  3. krb5.ini的地址添加到我项目的已知库中
  4. 使用以下命令为OS(Windows 7)定义环境变量: KRB5_CONFIG = C:\Windows\krb5.ini 虽然this page已告知“您可以通过设置环境变量KRB5_CONFIG来覆盖默认位置。可以在KRB5_CONFIG中指定多个冒号分隔的文件名;将读取所有存在的文件。”
  5. 使用System.setProperty指定krb5.ini的位置:
  6. System.setProperty("java.security.krb5.conf", "C:\\Windows\\krb5.ini");
        System.setProperty("sun.security.krb5.realm", "C:\\Windows\\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)
    

    我的环境是netbeans,在尝试这些方式之前,我大致知道这些方法不起作用。我经常可以通过添加适当的jar文件作为外部库来解决此类问题。有任何想法吗?或暗示?

    提前致谢

2 个答案:

答案 0 :(得分:0)

我的2美分:尝试改进 Kerberos配置,而不是想知道它为什么不能按原样运行。例如,尝试default_realm子句:

[libdefaults]
default_realm    = EXAMPLE.COM
dns_lookup_kdc   = false
dns_lookup_realm = false

[realms]
EXAMPLE.COM = {
  kdc = kerberos.example.com
}

您可能还需要定义permitted_enctypesdefault_tkt_enctypesdefault_tgs_enctypesforwardable等,具体取决于您的Kerberos实施。

答案 1 :(得分:0)

这是一个java应用程序...所以它会在你的配置文件路径中反向斜向...所以:

C:/Windows/krb5.ini