问题描述
我正在使用Apache Beam和Maven创建管道并运行数据流作业。进行逻辑编码后,我运行以下命令将作业/模板上传到Google Cloud。
mvn compile exec:java -Dexec.mainClass=com.package.MyMainClass -Dexec.args="--runner=DataflowRunner --autoscalingalgorithm=NONE --numWorkers=25 --project=<PROJEC> --subnetwork=regions/us-east1/subnetworks/default --zone=us-east1-b --network=default --stagingLocation=gs://<TBD> --templateLocation=gs://<TBD> --otherCustomOptions"
在那之后,我已经看到了两种开始运行作业的方法
- 我必须转到“数据流UI”页面,单击以创建新作业并使用我自己的模板blablabla ...,然后该作业将开始运行
- 该作业已经开始运行
我想知道如何实现2。我基本上想摆脱进入UI的麻烦。我想在我的笔记本电脑上提交并开始工作。任何见解将不胜感激!
解决方法
一旦暂存了模板以及UI,您可以使用以下命令启动它:
,在traditional and templated Dataflow job execution之间进行区分很重要:
如果您使用Dataflow模板(如您的情况),则暂存和执行是单独的步骤。这种分离使您可以更加灵活地决定谁可以运行作业以及从何处运行作业。
但是,一旦暂存了模板,则需要从该模板显式运行作业。要自动执行此过程,可以使用:
API:
POST https://dataflow.googleapis.com/v1b3/projects/YOUR_PROJECT_ID/templates:launch?gcsPath=gs://YOUR_BUCKET_NAME/templates/TemplateName
{
"jobName": "JOB_NAME","parameters": {
"inputFile" : "gs://YOUR_BUCKET_NAME/input/my_input.txt","outputFile": "gs://YOUR_BUCKET_NAME/output/my_output"
},"environment": {
"tempLocation": "gs://YOUR_BUCKET_NAME/temp","zone": "us-central1-f"
}
}
gcloud dataflow jobs run JOB_NAME \
--gcs-location gs://YOUR_BUCKET_NAME/templates/MyTemplate \
--parameters inputFile=gs://YOUR_BUCKET_NAME/input/my_input.txt,outputFile=gs://YOUR_BUCKET_NAME/output/my_output
或任何client libraries。
或者,如果您不想创建Dataflow模板,而只想直接部署和运行作业(这可能是您在第2点中提到的内容),则只需删除{{1 }}参数。如果执行此操作时遇到任何错误,请确保还可以对非模板作业执行管道代码;供参考,请看一下question。