FAQ-任务偶发异常Failed to store credentials: No credentials cache found

问题描述/异常栈
FAQ-Failed to store credentials: No credentials - 图1
发现版本
9.0
排查及解决方案
## 考虑打印kinit的debug信息。
kinit运行时,可以通过KRB5_TRACE 变量写入debug信息。正常情况下会有这样的日志
但是我们目前没有一个所有用户都有权限的目录,需要自己建一个类似 /tmp 的目录。

FAQ-Failed to store credentials: No credentials - 图2

排查方案

# 操作方案
在单台机器上,在物理盘对应的分区上创建目录,并赋予和/tmp相同的权限。确保所有用户都可以访问上级目录 /mnt/data01
# 确保所有用户都可以访问根目录
sudo mkdir -p /mnt/data01/tmp
sudo chmod 1777 /mnt/data01/tmp
sudo chown root:root /mnt/data01/tmp
在任务上增加节点参数 env.KRB5_TRACE = /mnt/data01/tmp/kinit_trace_${azkaban.flow.execid} 
验证配置,手动指定这个执行节点,运行下任务,去 /mnt/data01/tmp 目录下找对应的文件,正常情况下,文件有,并且有详细的认证内容。
调度上增加 useExecutor指定这个改过的机器。
任务出错时,查找对应的 kinit_cache_实例ID 文件,看里面有没有具体的报错。

后续规避方案

# 操作方案
按排查方案那样创建一个  tmp目录的目录。
在任务上增加节点参数 env.KRB5CCNAME=/mnt/data01/tmp/kinit_cache_${azkaban.flow.execid} 
验证配置,手动指定这个执行节点,运行下任务,去 /mnt/data01/tmp 目录下找对应的文件,正常情况下,文件有,并且有缓存的内容。
调度上增加 useExecutor指定这个改过的机器。
如果这样使用后就正常了, 那么我们可以在每个机器上都创建这样的目录,然后去掉 useExecutor 配置。
新建的这个目录,需要定期清理,这个可以在机器上增加 crontab脚本实现。

作者:焦巍