Python Apache Beam Pipeline Status API调用

时间:2016-11-22 00:22:24

标签: python pipeline google-cloud-dataflow apache-beam

我们目前有一个Python Apache Beam管道,可以在本地运行。我们现在正在使用Google Cloud Dataflow上的管道进行全面自动化,但在Dataflow / Apache Beam的管道监控中发现了一个限制。

目前,Cloud Dataflow有两种方法可以通过UI界面或命令行中的gcloud监控管道状态。这两种解决方案都不适用于全自动解决方案,我们可以解决无损文件处理问题。

查看Apache Beam的github,他们有一个文件internal/apiclient.py,显示有一个用于获取作业状态的函数, get_job

我们发现使用get_job的一个实例是runners/dataflow_runner.py

最终目标是使用此API来获取作业或我们自动触发运行的多个作业的状态,以确保它们最终都通过管道成功处理。

有人能告诉我们在运行管道(p.run())后如何使用此API?我们无法理解runnerresponse = runner.dataflow_client.get_job(job_id)的来源。

如果有人能够在设置/运行我们的管道时更好地理解我们如何访问此API调用,那将非常棒!

1 个答案:

答案 0 :(得分:3)

我最终只是摆弄代码并找到了如何获得工作细节。我们的下一步是看看是否有办法获得所有工作的清单。

# start the pipeline process
pipeline                 = p.run()
# get the job_id for the current pipeline and store it somewhere
job_id                   = pipeline.job_id()
# setup a job_version variable (either batch or streaming)
job_version              = dataflow_runner.DataflowPipelineRunner.BATCH_ENVIRONMENT_MAJOR_VERSION
# setup "runner" which is just a dictionary, I call it local
local                    = {}
# create a dataflow_client
local['dataflow_client'] = apiclient.DataflowApplicationClient(pipeline_options, job_version)
# get the job details from the dataflow_client
print local['dataflow_client'].get_job(job_id)