【问题标题】:Creating dataflow classic template to orchestrate the job via DataflowflowTemplatedJobOperator创建数据流经典模板以通过 DataflowTemplatedJobOperator 编排作业
【发布时间】:2022-02-18 19:48:43
【问题描述】:

我正在尝试创建和暂存 Dataflow Classic 模板。按照下面提供的链接中的文档-

https://cloud.google.com/dataflow/docs/guides/templates/creating-templates#java_8.

mvn 编译 exec:java \ -Dexec.mainClass=com.example.myclass \ -Dexec.args="--runner=DataflowRunner \ --project=PROJECT_ID \ --stagingLocation=gs: //BUCKET_NAME/staging \ --templateLocation=gs://BUCKET_NAME/templates/TEMPLATE_NAME --region=REGION"

作曲家

start_job = DataflowTemplatedJobStartOperator( task_id="start_job", 模板='gs://bucket/latest/job1', 参数={'inputFile':API END POINT,'输出': GCS_OUTPUT}, location='地区',

我的理解是首先我必须使用 maven 编译和部署模板,然后使用 json 类型将参数传递给 Dataflow 模板化操作员

我不确定如何创建参数和模板。我过去手动创建了数据流 jar 文件并将其部署到 GCS 存储桶。从文档看来,必须使用 maven compile 来编译和部署模板,并使用 dataflow java operator 将参数传递给作业。但是现在有了新设计,我想我必须通过 Dataflow Templated Job Start 传递参数运算符。

是否有人使用模板化方法来编排自定义 Java 数据流作业,如果是,json 文件如何用于传递参数。任何示例都会非常有帮助。目前我正在从本地机器编译二进制文件并将其上传到存储桶。

感谢任何解决问题的建议。

问候

【问题讨论】:

  • 各种数据流模板文件可以参考这个document,暂存模板文件。检查此document 为各个模板指定正确的参数。您可以使用 Airflow 的 DataflowTemplatedJobStartOperator 在 DAG 中创建任务。如果有帮助,请告诉我。
  • 嗨@recyclinguy,如果我的回答解决了您的问题,请考虑接受并支持它。如果没有,请告诉我,以便我改进答案。

标签: java airflow google-cloud-dataflow google-cloud-composer


【解决方案1】:

您可以按照quickstart 使用 mvn compile 部署 Dataflow 经典模板

您不必将参数存储在 json 文件中,您可以使用 DataflowTemplatedJobStartOperator 添加参数,如下所示。更多信息可以参考这个document

start_template_job = DataflowTemplatedJobStartOperator(
    task_id="start-template-job",
    template='gs://dataflow-templates/latest/Word_Count',
    parameters={'inputFile': "gs://dataflow-samples/shakespeare/kinglear.txt", 'output': GCS_OUTPUT},
    location='europe-west3',
)

不运行管道,不能仅仅为了打包jar文件发送到staging而运行MVN。

【讨论】:

    【解决方案2】:

    我从 bitbucket repo 创建了模板文件,并在 GCS 中创建了模板。

    mvn compile exec:java \
    -Dexec.mainClass=com.google.cloud.teleport.templates.<template-class> \
    -Dexec.cleanupDaemonThreads=false \
    -Dexec.args=" \
    --project=<project-id> \
    --stagingLocation=gs://<bucket-name>/staging \
    --tempLocation=gs://<bucket-name>/temp \
    --templateLocation=gs://<bucket-name>/templates/<template-name>.json \
    --runner=DataflowRunner"
    

    Maven 还需要额外的参数来创建模板。

    问题 - 我是否需要创建 json 文件以将参数传递给模板 - (即通过在模板位置创建一个单独的文件夹)。我想我会在 json 文件中再次复制参数

    我如何在数据流运算符中调用 json 文件-参数中的内容

    DataflowTemplatedJobStartOperator
    
    task_id="start_job",
    template='gs://template location', 
    parameters={ what should be the  parameters ? should it point to 
               json file},
    location= xxx
    

    我的另一个问题是 - 当我们部署到上层环境,尤其是 UAT 和 PROD 时,在分配的计划时间到来之前,我们不允许运行管道。 所以问题是,是否可以运行 MVN 只是为了打包并将 jar 文件发送到暂存而不运行管道

    问候

    【讨论】:

    • 嗨,有人使用 mvn compile 部署了 Dataflow 经典模板吗?如果是,您如何在 GCP 中设置和编排它?
    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2020-01-25
    • 2021-10-28
    • 2015-02-25
    • 2020-11-03
    • 2021-08-30
    • 2018-04-25
    相关资源
    最近更新 更多