最近遇到这样的问题:
运行十几天的代码突然发生了连接hadoop时kerberos认证不了的问题,仔细分析日志,发现在LoginException下方有这样一句话:
Caused by: sun.security.krb5.KrbException: Clock skew too great (37) - PREAUTH_FAILED原因:
k8s服务器和hadoop服务器时间相差过大,导致kerberos认证失败。
解决方法:- 查看系统时间:
date “+%Y-%m-%d %H:%M:%S” - 更改系统时间:
date -s “2021-12-29 15:06:22” - 强制将时间写入COMS:
clock -w
或者把系统时间同步到硬件BIOS:
hwclock --systohc
由于是器群部署,我登录了四个节点,在每个服务器上都操作了一遍,但一圈回来后再查看系统时间,发现全都没生效。
原因:集群服务器里有时钟同步的功能,我更改某个节点后,服务器使用另一个的时钟源时候,自己修正了。
解决办法:xshell等工具都可以同时向多个会话框发送命令:
首先在xshell里登录多个节点(我们使用的k8s是四个节点的,所以我打开了四个会话)
点击‘查看’->‘撰写’->‘撰写栏’
撰写栏显示在页面左下角,然后调整为“全部会话”
最后写好要执行的语句,回车后,所有tab签里的服务器节点上都会执行这个语句:
除了上述方法外还有别的,大家自行研究,多多分享哈!
结语干完这个操作后,我再次重启服务,就没有报认证失败的问题了。但是,机器越老,和其他服务器不一致的概率越高,也就是它走得比别人快/慢一丢丢。
另,今天发生的问题是hadoop集群的时钟慢了,但是由于该平台是个公用的,我们没法改,就只能委曲求全改自己服务器的时钟的,匹配上即可。



