提问者:小点点

如何将非模板化的光束作业转换为模板化作业并在GCP数据流运行器上运行?


我能够使用以下命令直接在GCP数据流运行器上运行非模板化的光束作业:

java -jar <jar_name> 
--runner=DataFlowRunner 
--gcpTempLocation=gs://some/gcs/location 
--stagingLocation=gs://some/gcs/location/stage 
--tempLocation=gs://some/gcs/location/temp 
--region=<region_name> 
--project=<project_name> 
--subnetwork=<subnet_name> 
--jobName=<job_name>

我想通过使用以下命令在gcs存储桶中暂存模板来模板化相同的作业:

java -jar <jar_name> 
--runner=DataFlowRunner 
--gcpTempLocation=gs://some/gcs/location 
--stagingLocation=gs://some/gcs/location/stage 
--templateLocation=gs://some/gcs/location/templates/<job_name>
--region=<region_name> 
--project=<project_name>

但是我在创建作业模板实例时收到以下错误:

18:11:05.004 [main] INFO org.apache.beam.runners.dataflow.DataflowRunner - Template successfully created.
Exception in thread "main" java.lang.UnsupportedOperationException: The result of template creation should not be used.
    at org.apache.beam.runners.dataflow.util.DataflowTemplateJob.getJobId(DataflowTemplateJob.java:41)
    at org.apache.beam.runners.dataflow.DataflowPipelineJob.getJobWithRetries(DataflowPipelineJob.java:559)
    at org.apache.beam.runners.dataflow.DataflowPipelineJob.getStateWithRetries(DataflowPipelineJob.java:540)
    at org.apache.beam.runners.dataflow.DataflowPipelineJob.waitUntilFinish(DataflowPipelineJob.java:324)
    at org.apache.beam.runners.dataflow.DataflowPipelineJob.waitUntilFinish(DataflowPipelineJob.java:253)
    at org.apache.beam.runners.dataflow.DataflowPipelineJob.waitUntilFinish(DataflowPipelineJob.java:212)
    at org.apache.beam.runners.dataflow.DataflowPipelineJob.waitUntilFinish(DataflowPipelineJob.java:206)
    at com.gojek.de.jobs.EventFilterJob.main(EventFilterJob.java:72)

从GCS模板运行数据流作业时,数据流作业运行器无法从模板启动作业实例。

我能够在GCS桶看到模板创建。我不确定,为什么作业运行失败。此外,我们可以直接将非模板光束作业转换为模板作业吗?

注意:我无法运行文档中给出的maven命令,因为我们的项目是基于Gradle的。


共1个答案

匿名用户

创建模板时,不能使用DataflowPipelineJob::waitUntilFinish,因为run没有附加作业这里似乎就是这种情况。

查看WordCount示例以查看工作模板的示例。