如何创建数据流管道并自动部署到 google 云?
How to create dataflow pipeline and auto deploy to google cloud?
我正在使用 Apache beam 和 maven 创建管道和 运行 数据流作业。逻辑编码后,我 运行 以下命令将 job/template 上传到 Google 云端。
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"
在那之后,我看到了两种开始 运行 工作的方法
- 我必须转到 Dataflow UI 页面,单击以创建一个新作业并使用我自己的模板 blablabla... 然后作业将开始 运行ning
- 作业已经开始运行宁
不知道2是怎么实现的。我基本上想摆脱进入 UI 的麻烦。我想在我的笔记本电脑上提交并开始工作。任何见解将不胜感激!
一旦模板上演,以及 UI 您可以使用以下方式启动它:
区分traditional and templated Dataflow job execution:
很重要
如果您使用数据流模板(如您的情况),暂存和执行是不同的步骤。这种分离让您更加灵活地决定谁可以 运行 工作以及这些工作来自哪里 运行。
但是,一旦您的模板上演,您需要从该模板明确地运行您的工作。要自动执行此过程,您可以使用:
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.
或者,如果您不想创建数据流模板,而只想直接部署和 运行 作业(这可能是您在第 2 点中提到的),您可以只需删除 --templateLocation
参数。如果您在执行此操作时遇到任何错误,请确保您的管道代码也可以为 non-templated 作业执行;作为参考,看看这个 question.
我正在使用 Apache beam 和 maven 创建管道和 运行 数据流作业。逻辑编码后,我 运行 以下命令将 job/template 上传到 Google 云端。
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"
在那之后,我看到了两种开始 运行 工作的方法
- 我必须转到 Dataflow UI 页面,单击以创建一个新作业并使用我自己的模板 blablabla... 然后作业将开始 运行ning
- 作业已经开始运行宁
不知道2是怎么实现的。我基本上想摆脱进入 UI 的麻烦。我想在我的笔记本电脑上提交并开始工作。任何见解将不胜感激!
一旦模板上演,以及 UI 您可以使用以下方式启动它:
区分traditional and templated Dataflow job execution:
很重要如果您使用数据流模板(如您的情况),暂存和执行是不同的步骤。这种分离让您更加灵活地决定谁可以 运行 工作以及这些工作来自哪里 运行。
但是,一旦您的模板上演,您需要从该模板明确地运行您的工作。要自动执行此过程,您可以使用:
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.
或者,如果您不想创建数据流模板,而只想直接部署和 运行 作业(这可能是您在第 2 点中提到的),您可以只需删除 --templateLocation
参数。如果您在执行此操作时遇到任何错误,请确保您的管道代码也可以为 non-templated 作业执行;作为参考,看看这个 question.