如何从 Java 知道 flink 作业的状态?



我有一个正在运行的作业,我有兴趣只使用一次恢复重试,因为在此期间没有触发此 flink 重新启动我有一个线程尝试解决问题,然后当问题解决时 flink 将重新启动,但有时线程需要比通常更长的时间来解决问题并触发重新启动策略, 由于问题仍然失败,然后作业停止,但线程可能有另一个迭代,然后应用程序永远不会死,因为我将其作为 jar 应用程序运行。所以,我的问题:

  • 无论如何可以从java代码中知道作业的状态吗?类似(JobStatus.CANCELED == true(。

提前感谢! 亲切问候

非常感谢费利普。这就是我需要的,多亏了你,它完成了。我在这里分享代码,以防其他人需要。

  1. 准备侦听器

    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();
    }
    });
    
  2. 使用代码:

Preconditions.checkNotNull(jobClient);
final String status = jobClient.getJobStatus().get().name();
if (status.equals(JobStatus.FAILED.name())) System.exit(1);

相关内容

  • 没有找到相关文章

最新更新