我能够使用以下命令直接在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的。
创建模板时,不能使用DataflowPipelineJob::waitUntilFinish,因为run
没有附加作业这里似乎就是这种情况。
查看WordCount示例以查看工作模板的示例。