前言
在用suse 操作系统安装 cm 大数据平台,在集群开启 kerberos 后,使用 hdfs 命令报错如下:
hdfs dfs -ls /
19/05/29 18:06:15 warn ipc.client: exception encountered while connecting to the server : org.apache.hadoop.security.accesscontrolexception: client cannot authenticate via:[token, kerberos]
ls: failed on local exception: java.io.ioexception: org.apache.hadoop.security.accesscontrolexception: client cannot authenticate via:[token, kerberos]; host details : local host is: "hadoop001/172.17.239.230"; destination host is: "hadoop001":8020;
环境信息
suse linux enterprise server 12 service pack 1 (sles 12 sp5)
问题复现
- 先进行认证
kinit -kt hdfs.keytab hdfs
## 查看票据
klist
export hadoop_root_logger=debug,console
export hadoop_opts="-dsun.security.krb5.debug=true -djavax.net.debug=ssl"
hdfs dfs -ls /
问题原因
仔细看,在使用 klist 命令时,有个ticket cache : dir
他指向的路径是: /run/user/0/krb5cc/tkt
而在执行 hdfs
命令时,有个 kinitoptions cache name is
他指向的路径是 tmp/krb5cc_0
hdfs
默认是去 /tmp
目录下找 kerberos
缓存。然后 suse 操作系统下 kerberos
并不是放在 /tmp
目录下,导致 hdfs
客户端认为你没有进行 kerberos
认证。所以报错。
解决方案
在/etc/krb5.conf
中,我们增加了下面的参数以后,就可以正常kinit,也可以执行hdfs的命令了。
default_ccache_name = file:/tmp/krb5cc_%{uid}
- 销毁凭据
kdestroy
- 重新认证
kinit -kt hdfs.keytab hdfs
- 查看hds
hdfs dfs -ls /
在重新执行,问题解决!
此外网上还有别的解决方案,但都不是我这种情况。这里也顺便贴下:
方法一:
将krb5.conf
文件中的default_ccache_name
注释掉,然后执行kdestroy,重新kinit,问题解决
方法二:
在 /etc/krb5.conf 里补全了加密方法后
https://www.cnblogs.com/tommyjiang/p/15008787.html
方法三:
代码问题
https://blog.csdn.net/ifenggege/article/details/111243297
发表评论