2017-02-26 473 views
0

我正在测试使用ToolRunner运行的第一个Job。要运行它,我定义了一个krb5.ini文件在Windows上,是这样的:无法为hadoop指定kerberos的配置位置

[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. 参数添加的krb5.ini地址到我的项目的已知库
  3. 使用以下命令定义OS(Windows 7)的环境变量: KRB5_CONFIG = C:\Windows\krb5.ini 尽管this page已告知“您可以通过设置环境变量KRB5_CONFIG来覆盖默认位置。可以在KRB5_CONFIG中指定多个冒号分隔的文件名;这是目前所有文件将被改为“
  4. 与System.setProperty指定krb5.ini的位置,因为这样:

System.setProperty("java.security.krb5.conf", "C:\\Windows\\krb5.ini"); 
    System.setProperty("sun.security.krb5.realm", "C:\\Windows\\krb5.ini"); 

的这些方式非没有解决这个错误我“M获得:

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和尝试这些方法,我大约知道,这些方式不工作之前,我常常可以通过添加适当的罐子FIL解决这些问题。 e作为外部库。有任何想法吗?或提示?

在此先感谢

回答

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实现。

+0

好主意。但它不适合我。我认为java已经汇总了所有包含它的定义的配置文件,我已经将它们添加到我的代码中,因此它降低了我的命令的优先级。但是,因为这是我的第一个测试,我删除了'hadoop-auth'来让我的代码运行 –

0

这是一个Java应用程序...所以它会在期待斜线在你的路径配置文件相反的方向......这样:

C:/Windows/krb5.ini