我想在flink作业完成后执行一些任务,我在Intellij中运行代码时没有任何问题,但是当我在shell文件中运行Flink jar时会有问题。我使用下面的行来确保flink程序的执行完成
//start the execution
JobExecutionResult jobExecutionResult = envrionment.execute(" Started the execution ");
is_job_finished = jobExecutionResult.isJobExecutionResult();
我不确定,如果以上检查是否正确?
然后我使用上面的变量来执行某些任务
if(print_mode && is_job_finished){
System.out.println(" \n \n -- System related variables -- \n");
System.out.println(" Stream_join Window length = " + WindowLength_join__ms + " milliseconds");
System.out.println(" Input rate for stream RR = " + input_rate_rr_S + " events/second");
System.out.println("Stream RR Runtime = " + Stream_RR_RunTime_S + " seconds");
System.out.println(" # raw events in stream RR = " + Total_Number_Of_Events_in_RR + "\n");
}
有什么建议吗?
答案 0 :(得分:0)
基本上,如果您在env.execute()
调用之后要执行任何操作,它将在作业完成后执行。但是请注意,这仅包括以批处理模式运行的作业,流执行中没有这种可能性。
答案 1 :(得分:0)
您可以将作业侦听器注册到执行环境。
例如
env.registerJobListener(new JobListener {
//Callback on job submission.
override def onJobSubmitted(jobClient: JobClient, throwable: Throwable): Unit = {
if (throwable == null) {
log.info("SUBMIT SUCCESS")
} else {
log.info("FAIL")
}
}
//Callback on job execution finished, successfully or unsuccessfully.
override def onJobExecuted(jobExecutionResult: JobExecutionResult, throwable: Throwable): Unit = {
if (throwable == null) {
log.info("SUCCESS")
} else {
log.info("FAIL")
}
}
})
答案 2 :(得分:0)
在您的StreamExecutionEnvironment中注册一个JobListener。