我想使用 Java Beam SDK 从工作节点以编程方式终止 Apache Beam 作业。 理想情况下,我希望该解决方案独立于运行程序,但即使是 DataflowRunner 特定的解决方案也可以。
我不想使用关闭 Hook ,我正在寻找 Beam API 支持的东西。
我发现最接近我想要的是org.apache.beam.runners.dataflow.util.MonitoringUtil::getGcloudCancelCommand
。但是,这仅返回一个字符串,其中包含需要运行以取消作业的命令。它不会从 JVM 内部取消作业。
最佳答案
您可以使用两个可能的命令来停止 Dataflow 作业:Cancel
和 Drain
。您可以通过使用数据流监控界面或数据流命令行界面发出命令来执行此操作。请引用official documentation 。
此外您还可以查看 REST update API projects.locations.jobs.update
用于更新现有 Dataflow 作业的状态。
使用Rest Update方法,用这个body,更多内容见Google Developers guide :
{ "requestedState": "JOB_STATE_DRAINING" }
此外,我真的建议您寻找this Stackoverflow线。我希望它有帮助。
关于java - 如何以编程方式从工作人员处终止 Beam Dataflow 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60735782/