FusionInsight HD同一个OS下不同客户端kinit登录概率性导致任务失败

发布时间:  2016-10-31 浏览次数:  102 下载次数:  0
问题描述

某应用是使用脚本进行kinit认证,然后进行MRHDFS等业务处理,这种类似业务都是并发调度。

当前的问题是某一次调度,HDFS业务报错,报错原因是没有可用票据,

日志如下:

javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]

处理过程

1、首先确认采用的是kinit的认证方式,并非java程序配置keytab认证的方式,

对于kinit的认证方式是将用户的票据存储在/tmp/krb5cc_OS用户ID

例如用root用户kinit


如果相同的OS用户调用kinit命令票据都会存储在这一个路径

2、同一OS用户执行不同业务脚本时,如A脚本kinit刷新票据后正常提交MR任务,等MR任务结束后,开始提交HDFS任务

此时如果B脚本刚好被调度执行kinit命令,上述HDFS任务就会获取不掉票据。

因为票据正好被B脚本 kinit命令删除并重新生成一个新的文件

3、所以同一个OS用户并发调用kinit会导致业务存在偶尔获取不到票据的问题

解决方案

使用KRB5CCNAME环境变量用来指定kinit票据的存储路径,让不同的业务独立设置自己的票据存放路径,可以避免相同OS用户覆盖票据的问题,

操作如下:

END