最近遇到这样的问题:
运行十几天的代码突然发生了连接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集群的时钟慢了,但是由于该平台是个公用的,我们没法改,就只能委曲求全改自己服务器的时钟的,匹配上即可。
本文介绍了在运行代码时遇到KrbException: Clock skew too great错误,原因是服务器与Hadoop集群时间不一致导致的kerberos认证失败。解决方法包括手动更改服务器时间、同步集群服务器时间,并提供了在xshell中批量执行命令同步多台服务器时间的技巧。通过这些步骤,成功解决了认证问题。
213

被折叠的 条评论
为什么被折叠?



