我有一个正在运行的作业,我有兴趣只使用一次恢复重试,因为在此期间没有触发此 flink 重新启动我有一个线程尝试解决问题,然后当问题解决时 flink 将重新启动,但有时线程需要比通常更长的时间来解决问题并触发重新启动策略, 由于问题仍然失败,然后作业停止,但线程可能有另一个迭代,然后应用程序永远不会死,因为我将其作为 jar 应用程序运行。所以,我的问题:
- 无论如何可以从java代码中知道作业的状态吗?类似(JobStatus.CANCELED == true(。
提前感谢! 亲切问候
非常感谢费利普。这就是我需要的,多亏了你,它完成了。我在这里分享代码,以防其他人需要。
-
准备侦听器
final StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment(...); final AtomicReference<JobID> jobIdReference = new AtomicReference<>(); //Environment configurations env.registerJobListener(new JobListener() { @Override public void onJobSubmitted(@Nullable JobClient jobClient, @Nullable Throwable throwable) { assert jobClient != null; jobIdReference.set(jobClient.getJobID()); jobClient = jobClient /*jobClient static public object in the main class*/; }@Override public void onJobExecuted(@Nullable JobExecutionResult jobExecutionResult, @Nullable Throwable throwable) { assert jobExecutionResult != null; jobExecutionResult.notify(); } });
-
使用代码:
Preconditions.checkNotNull(jobClient);
final String status = jobClient.getJobStatus().get().name();
if (status.equals(JobStatus.FAILED.name())) System.exit(1);