FusionInsight HD 集群HDFS业务报错

发布时间:  2016-09-30 浏览次数:  88 下载次数:  0
问题描述

集群版本:FusionInsight  HD V100R002C30SPC602

单平面组网


某局点是使用脚本进行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.    A脚本kinit刷新票据后正常提交MR任务,等MR任务结束后,开始提交HDFS任务

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

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

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


根因

客户采用kinit的认证方式,相同的OS用户调用kinit命令票据都存储在/tmp/krb5cc_OS用户ID 这一个路径,导致相同OS用户覆盖票据

解决方案

KRB5CCNAME环境变量用来指定kinit票据的存储路径

使用方式如下

让不同的业务独立设置自己的票据存放路径,可以避免相同OS用户覆盖票据的问题。

 


END