我已经设置了单节点集群,kdc服务器以及客户端都在同一台机器上 . 我尝试了所有可能的选项,但仍然存在相同的错误 . 从研究中我已经根据答案提出了以下变化 . 1)在$ JAVA_HOME / jre / lib / security文件夹中安装JCE jar . 2)我编辑了krb5.conf文件,只使用aes256-cts加密 .
/etc/krb5.conf如下所示,
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_realm = EXAMPLE.COM
default_ccache_name = KEYRING:persistent:%{uid}
default_tkt_enctypes = aes256-cts
default_tgs_enctypes = aes256-cts
permitted_enctypes = aes256-cts
[realms]
EXAMPLE.COM = {
kdc = localhost
admin_server = localhost
}
[domain_realm]
localhost = EXAMPLE.COM
/var/kerberos/krb5kdc/kdc.conf如下所示
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
EXAMPLE.COM = {
#master_key_type = aes256-cts
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
max_life = 24h 0m 0s
max_renewable_life = 7d 0h 0m 0s
}
namenode和datanode使用keytab文件中提供的凭据启动 . 在namenode和datanode启动后,我创建了一个主体,它已经是hadoop组中的unix用户,即'hdfs',带有addprinc命令 . 然后我使用了kinit命令(kinit hadoop),这是成功的 . klist -e命令结果显示enc类型是aes-256,如预期的那样 . 但是,当我尝试一个hadoop fs -ls /命令时,我得到以下错误 .
Java配置名称:null
本机配置名称:/etc/krb5.conf
从本机配置加载
KinitOptions缓存名称为/ tmp / krb5cc_1001 15/06/26 13:20:18 WARN ipc.Client:连接到服务器时遇到异常:javax.security.sasl.SaslException:GSS启动失败[由GSSException引起:无有效凭据提供(机制级别:无法找到任何Kerberos tgt)]
ls:本地异常失败:java.io.IOException:javax.security.sasl.SaslException:GSS启动失败[由GSSException引起:未提供有效凭据(机制级别:无法找到任何Kerberos tgt)];主机详细信息:本地主机是:"/";目标主机是:“”:9000;
需要帮助 .
2 回答
错误的原因已在消息中:您的配置列表default_ccache_name = KEYRING:persistent:%,它将凭据存储在Linux上的安全内核缓冲区中 . Java无法读取此缓冲区,因此您将收到错误 .
您需要将其设置为:
或用KRB5CCNAME覆盖它
似乎hadoop从java的默认缓存位置引用票证,但您可能使用它在其他位置创建票证 . kinit命令 .
不要指定任何缓存位置,然后使用kinit命令获取票证,然后尝试 .