在linux中用flink提交任务失败,查看yarn的日志时看到ERROR delegation.AbstractDelegationTokenSecretManager: ExpiredTokenRemover received java.lang.InterruptedException: sleep interrupted,这该怎么解决啊
这个错误通常发生在YARN使用的Token Secret Manager线程上,它会定期检查令牌是否过期。在某些情况下,由于某些原因,该线程可能会受到InterruptedException中断。为了解决这个问题,你可以尝试以下步骤:
确认你的程序中没有任何死循环或无限等待的代码段。这些代码段有可能会导致线程被阻塞或中断。
尝试升级你的Flink和YARN版本。某些版本中存在已知的此类问题,更新到最新版本可能会解决问题。
尝试增加Delegation Token Secret Manager的睡眠时间以避免中断。在yarn-site.xml文件中添加以下配置即可:
<property>
<name>yarn.timeline-service.token-renewal-interval</name>
<value>60000</value>
</property>
这将把Token renew interval更改为60秒,使Secret Manager的睡眠时间更长一些,减少中断的可能性。
不知道你这个问题是否已经解决, 如果还没有解决的话:首先,这个问题是由于flink任务在提交到yarn的过程中被中断导致的错误,具体原因可能是任务过大或者资源不足等等。解决这个问题需要按照以下步骤进行:
检查flink任务的配置是否正确,在flink任务提交到yarn之前,需要先进行必要的配置,包括flink的配置和yarn的配置,同时需要检查提交的任务是否符合配置要求,例如任务所需的资源是否与yarn上配置的一致等。
检查yarn的日志信息,确定具体的错误信息,例如是内存不足还是其他资源不足等等,排除这些问题需要根据具体的错误信息来确定。
关注yarn的管理页面,可以广泛监控集群内存使用状况,查找资源瓶颈。这可以帮助您确定需要进行哪些调整和优化。
最后,您可以尝试更改JVM的启动参数,例如内存限制、GC策略等,来提高任务的执行效率和稳定性。
以下是具体的代码示例:
// 这里是一个简单的flink任务配置样例
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
DataStream<String> input = env.fromElements("hello", "world");
input.map(new MapFunction<String, String>() {
@Override
public String map(String value) throws Exception {
return value.toUpperCase();
}
}).print();
通过yarn的日志,我们可以看到具体的错误信息,例如这里出现的sleep interrupted错误,这可能是由于任务中断导致的:
2021-05-18 23:06:02,424 ERROR delegation.AbstractDelegationTokenSecretManager: ExpiredTokenRemover received java.lang.InterruptedException: sleep interrupted
在yarn的管理页面中,我们可以监控集群的内存使用情况和资源分配情况,例如下面这个页面就展示了所有任务的RAM和CPU使用情况:
http://{yarn.rm.hostname}:{yarn.rm.port}/cluster/nodes
在启动flink任务之前,我们还可以更改JVM的启动参数,例如增加内存限制、修改GC策略等,以提高任务的执行效率和稳定性。例如:
// tools.sh 的设置
$JVM_ARGS="-Xmx4096m -XX:MaxMetaspaceSize=768m"
当然还有一些其它的问题,比如真正的原因是flink本身代码bug引起的,但这个问题可以为大部分的使用者提供解决问题的一些思路。