问题描述

当 Flink 作业运行在 Yarn 集群时,往往机器上的物理盘, 一般会保存作业以来的一些配置, keytab, log 当磁盘故障时, 对于 Flink 作业的影响某些场景并不是致命的,不会导致作业立马失败。

对应的日志如下:

org.apache.hadoop.security.KerberosAuthException: Login failure for user: xxxx

失败原因:

Flink 作业在 relogin 时,依赖的 keytab 找不到,导致 relogin 失败, 无法近一步触发 checkpoint.

线上问题修复

修复思路:

只要把对应的 keytab 目录重建即可, 再把相应的 keytab 拷贝过去即可。

  1. 使用 arthas 找到作业依赖的 keytab 的路径.
[arthas@80073]$ watch org.apache.hadoop.security.UserGroupInformation newLoginContext params[3].getParameters()
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 160 ms, listenerId: 9
method=org.apache.hadoop.security.UserGroupInformation.newLoginContext location=AtExit
ts=2023-01-10 15:37:09; [cost=0.323502ms] result=@LoginParams[
    @LoginParam[PRINCIPAL]:@String[xxxx@XIAOMI.HADOOP],
    @LoginParam[KEYTAB]:@String[/home/xxxx/hdd1/xxxx/appcache/application_1656060449505_11223/container_e39_1656060449505_11223_01_000001/krb5.keytab],
]
  1. 根据作业引用到的 keytab 路径,将作业依赖的 keytab 拷贝到对应的路径即可.