如何创建数据流管道并自动部署到 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"

在那之后,我看到了两种开始 运行 工作的方法

  1. 我必须转到 Dataflow UI 页面,单击以创建一个新作业并使用我自己的模板 blablabla... 然后作业将开始 运行ning
  2. 作业已经开始运行宁

不知道2是怎么实现的。我基本上想摆脱进入 UI 的麻烦。我想在我的笔记本电脑上提交并开始工作。任何见解将不胜感激!

一旦模板上演,以及 UI 您可以使用以下方式启动它:

REST API

Gcloud Command Line

区分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 command line tool:

    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.