前言
在用SUSE 操作系統(tǒng)安裝 CM 大數(shù)據(jù)平臺,在集群開啟 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;
環(huán)境信息
SUSE Linux Enterprise Server 12 Service Pack 1 (SLES 12 SP5)
問題復(fù)現(xiàn)
- 先進行認證
kinit -kt hdfs.keytab hdfs
## 查看票據(jù)
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
而在執(zhí)行 HDFS
命令時,有個 KinitOptions cache name is
他指向的路徑是 tmp/krb5cc_0
HDFS
默認是去 /tmp
目錄下找 Kerberos
緩存。然后 SUSE 操作系統(tǒng)下 kerberos
并不是放在 /tmp
目錄下,導(dǎo)致 HDFS
客戶端認為你沒有進行 Kerberos
認證。所以報錯。
解決方案
在/etc/krb5.conf
中,我們增加了下面的參數(shù)以后,就可以正常kinit,也可以執(zhí)行hdfs的命令了。
default_ccache_name = FILE:/tmp/krb5cc_%{uid}
- 銷毀憑據(jù)
kdestroy
- 重新認證
kinit -kt hdfs.keytab hdfs
- 查看HDS
hdfs dfs -ls /
在重新執(zhí)行,問題解決!
此外網(wǎng)上還有別的解決方案,但都不是我這種情況。這里也順便貼下:
方法一:
將krb5.conf
文件中的default_ccache_name
注釋掉,然后執(zhí)行kdestroy,重新kinit,問題解決
方法二:
在 /etc/krb5.conf 里補全了加密方法后
https://www.cnblogs.com/tommyjiang/p/15008787.html文章來源:http://www.zghlxwxcb.cn/news/detail-695594.html
方法三:
代碼問題
https://blog.csdn.net/ifenggege/article/details/111243297文章來源地址http://www.zghlxwxcb.cn/news/detail-695594.html
到了這里,關(guān)于【kerberos】org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN,的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!