Java 无法为hadoop指定kerberos的配置位置
我正在用ToolRunner测试我的第一份工作。为了运行它,我在Windows上定义了一个krb5.ini文件,如下所示: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\
[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\u CONFIG=C:\Windows\KRB5.ini
尽管had告诉我们“您可以通过设置环境变量KRB5_CONFIG来覆盖默认位置。在KRB5_CONFIG中可以指定多个冒号分隔的文件名;所有存在的文件都将被读取。”这些方法中的任何一种都无法解决我遇到的错误:
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