Apache flink Flink批处理程序输出累加器不';行不通 ExecutionEnvironment env=ExecutionEnvironment.getExecutionEnvironment(); ...... JobExecutionResult JobExecutionResult=env.execute(XXXOffline.class.getName()); int records=jobExecutionResult.getAccumeratorResult(“计数器”); info(“总记录:{}”,记录);

Apache flink Flink批处理程序输出累加器不';行不通 ExecutionEnvironment env=ExecutionEnvironment.getExecutionEnvironment(); ...... JobExecutionResult JobExecutionResult=env.execute(XXXOffline.class.getName()); int records=jobExecutionResult.getAccumeratorResult(“计数器”); info(“总记录:{}”,记录);,apache-flink,flink-batch,Apache Flink,Flink Batch,但是,日志没有写入日志文件(ps:其他日志输出工作正常)。我认为env.execute()是阻塞调用,当所有子任务都结束时,getAccumeratorResult()将执行。我不知道为什么最后一行日志输出不起作用。从中,您可以看到 累加器是具有添加操作和最终累积结果的简单构造,可在作业结束后使用 因此,正如您所了解的,在作业终止之前,无法访问累加器(例如,env#execute returns)。它们可用于编排较小(有界)的作业。我经常在集成测试中使用它来制定断言 对于无限的工作,他们没有明显

但是,日志没有写入日志文件(ps:其他日志输出工作正常)。我认为env.execute()是阻塞调用,当所有子任务都结束时,getAccumeratorResult()将执行。我不知道为什么最后一行日志输出不起作用。

从中,您可以看到

累加器是具有添加操作和最终累积结果的简单构造,可在作业结束后使用

因此,正如您所了解的,在作业终止之前,无法访问累加器(例如,env#execute returns)。它们可用于编排较小(有界)的作业。我经常在集成测试中使用它来制定断言


对于无限的工作,他们没有明显的好处。您想改用。

我的程序是一个数据集批处理程序。返回env.execute()后,我应该获取累加器结果并记录它。但事实并非如此。在(测试)方面有几个例子[在Flink中,您可以使用它来双重检查您的解决方案。但是日志行应该仍然出现。我怀疑您对记录器的配置有误。您还可以使用调试器来检查实际情况。Thx。这可能是Flink群集的问题。从本地IDE启动的程序按预期工作。
    ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
    ......
    JobExecutionResult jobExecutionResult = env.execute(XXXOffline.class.getName());
    int records = jobExecutionResult.<Integer>getAccumulatorResult("counter");
    LOGGER.info("total records: {}", records);