Google cloud dataflow 如何以编程方式取消运行时间过长的数据流作业?

Google cloud dataflow 如何以编程方式取消运行时间过长的数据流作业?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我通过Python API在数据流上使用ApacheBeam从Bigquery读取数据,对其进行处理,并将其转储到数据存储接收器中 不幸的是,很多时候作业只是无限期地挂起,我不得不手动停止它。当数据被写入数据存储和Redis时,从数据流图中我注意到只有几个条目被卡住了,导致作业挂起 因此,当一个包含15台16核机器的作业运行9小时(通常,该作业运行30分钟)时,将导致巨大的成本 也许有一种方法可以设置一个计时器,如果数据流作业超过时间限制,它将停止该作业?如果您可以创建一个计时器,我们可以尝试与

我通过Python API在数据流上使用ApacheBeam从Bigquery读取数据,对其进行处理,并将其转储到数据存储接收器中

不幸的是,很多时候作业只是无限期地挂起,我不得不手动停止它。当数据被写入数据存储和Redis时,从数据流图中我注意到只有几个条目被卡住了,导致作业挂起

因此,当一个包含15台16核机器的作业运行9小时(通常,该作业运行30分钟)时,将导致巨大的成本


也许有一种方法可以设置一个计时器,如果数据流作业超过时间限制,它将停止该作业?

如果您可以创建一个计时器,我们可以尝试与您一起调试它,那就太好了

也许有一种方法可以设置一个计时器,如果 超过时限了吗

不幸的是,答案是否定的,Dataflow没有一种自动的方式在一段时间后取消作业。但是,可以使用API来实现这一点。可以在()超时后()取消()管道

您可以这样做:

p = beam.Pipeline(options=pipeline_options)
p | ... # Define your pipeline code

pipeline_result = p.run()  # doesn't do anything
pipeline_result.wait_until_finish(duration=TIME_DURATION_IN_MS)
pipeline_result.cancel()   # If the pipeline has not finished, you can cancel it

如果您能创建一个我们可以尝试与您一起调试的程序,那将是非常棒的

也许有一种方法可以设置一个计时器,如果 超过时限了吗

不幸的是,答案是否定的,Dataflow没有一种自动的方式在一段时间后取消作业。但是,可以使用API来实现这一点。可以在()超时后()取消()管道

您可以这样做:

p = beam.Pipeline(options=pipeline_options)
p | ... # Define your pipeline code

pipeline_result = p.run()  # doesn't do anything
pipeline_result.wait_until_finish(duration=TIME_DURATION_IN_MS)
pipeline_result.cancel()   # If the pipeline has not finished, you can cancel it

总之,在@ankitk answer的帮助下,这对我来说是可行的(python 2.7,sdk 2.14):

因此,如果作业在
中的持续时间内成功完成,则
取消()
将只打印一条警告“已关闭”,否则将关闭正在运行的作业

如果您试图打印作业状态,请注意

state = run.wait_until_finish(duration=3600000)
logging.info(state)

对于在
内未完成的作业,它将运行
直到完成()
,对于已完成的作业,它将运行

总之,在@ankitk answer的帮助下,这对我是有效的(python 2.7,sdk 2.14):

因此,如果作业在
中的持续时间内成功完成,则
取消()
将只打印一条警告“已关闭”,否则将关闭正在运行的作业

如果您试图打印作业状态,请注意

state = run.wait_until_finish(duration=3600000)
logging.info(state)

对于在
内未完成的作业,它将运行
,等待\u直到完成()
,对于已完成的作业,它将运行

我非常感谢您调查了这个问题。我必须说,在我将ParDo异步写入Redis之前,我从未经历过工作停滞。但我并没有尝试过只将数据写入Redis,而不写入数据存储。然而,我现在已经改用ParDo编写Couchbase,而不是使用Redis+数据存储,从那以后我还没有经历过任何停滞的工作。如果同样的问题再次发生,我将提出支持票。非常感谢!我非常感谢你调查了这个问题。我必须说,在我将ParDo异步写入Redis之前,我从未经历过工作停滞。但我并没有尝试过只将数据写入Redis,而不写入数据存储。然而,我现在已经改用ParDo编写Couchbase,而不是使用Redis+数据存储,从那以后我还没有经历过任何停滞的工作。如果同样的问题再次发生,我将提出支持票。非常感谢!