我正在测试我的第一个使用ToolRunner运行的Job。为了运行它我在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
的地址添加到我项目的已知库中KRB5_CONFIG = C:\Windows\krb5.ini
虽然this page已告知“您可以通过设置环境变量KRB5_CONFIG来覆盖默认位置。可以在KRB5_CONFIG中指定多个冒号分隔的文件名;将读取所有存在的文件。”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文件作为外部库来解决此类问题。有任何想法吗?或暗示?
提前致谢
答案 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_enctypes
,default_tkt_enctypes
,default_tgs_enctypes
,forwardable
等,具体取决于您的Kerberos实施。
答案 1 :(得分:0)
这是一个java应用程序...所以它会在你的配置文件路径中反向斜向...所以:
C:/Windows/krb5.ini