【问题标题】:Java - Failed to specify server's Kerberos principal nameJava - 无法指定服务器的 Kerberos 主体名称
【发布时间】:2016-05-24 14:58:47
【问题描述】:

我有一些使用 HDFS 和 Kerberos 身份验证的集成测试。当我运行它们时,我得到了这个异常:

java.io.IOException: Failed on local exception: java.io.IOException: java.lang.IllegalArgumentException: Failed to specify server's Kerberos principal name; Host Details : local host is: "Serbans-MacBook-Pro.local/1.2.3.4"; destination host is: "10.0.3.33":8020; 
    at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:772)
    at org.apache.hadoop.ipc.Client.call(Client.java:1472)
    at org.apache.hadoop.ipc.Client.call(Client.java:1399)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:232)
    at com.sun.proxy.$Proxy12.getFileInfo(Unknown Source)

我相信一切都配置正确:

 System.setProperty("java.security.krb5.realm", "...");
        System.setProperty("java.security.krb5.kdc", "...");

        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://10.0.3.33:8020");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        conf.set("hadoop.security.authentication", "Kerberos");
        UserGroupInformation.setConfiguration(conf);
        UserGroupInformation.loginUserFromKeytab("user@...", "/Users/user/user.keytab");

您认为问题是什么?在我的主机(10.0.3.33)上,我正确配置了 core-site.xml 和 hdfs-site.xml。但正如例外情况所暗示的那样,我没有从该主机运行。

有什么想法可以从任何主机运行测试吗?

谢谢, 塞尔维亚

【问题讨论】:

  • Kerberos 是一个安全层......因此它在很多事情上都有些偏执。一方面,它需要主机名,而不是 IP。它还运行反向 DNS 检查,因此您必须提供 canonical 主机名。最后,如果您的 Hadoop 主机不在 DNS 中,或者不在规范的 DNS 名称下,您必须填写本地 /etc/hosts(或 iSOD 上的任何路径)中的空白并更新您的 Hadoop ***-site.xml conf相应的文件。

标签: hadoop kerberos


【解决方案1】:

如果您使用 Hadoop 的低于 2.6.2 的旧版本,默认模式属性在 hdfs-site.xml 文件中不可用,那么您需要手动指定模式属性。

config.set("dfs.namenode.kerberos.principal.pattern", "hdfs/*@BDBIZVIZ.COM"); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2022-01-20
    • 2013-10-28
    • 2017-05-23
    相关资源
    最近更新 更多