【问题标题】:How to call a Dataflow job written in Go from Cloud Functions in GCP如何从 GCP 中的 Cloud Functions 调用用 Go 编写的 Dataflow 作业
【发布时间】:2019-06-07 15:33:31
【问题描述】:

我的目标是创建一种机制,当新文件上传到 Cloud Storage 时,它​​会触发 Cloud Function。最终,此 Cloud 函数将触发 Cloud Dataflow 作业。

我有一个限制,即 Cloud Dataflow 作业应该用 Go 编写,而 Cloud Function 应该用 Python 编写。

我现在面临的问题是,我无法从 Cloud Function 调用 Cloud Dataflow 作业。

用 Go 编写的 Cloud Dataflow 中的问题是 Apache Beam Go SDK 中没有定义 template-location 变量。这就是我无法创建数据流模板的原因。而且,由于没有数据流模板,我可以从云函数调用 Cloud Dataflow 作业的唯一方法是编写一个 Python 作业,该作业调用一个运行数据流作业的 bash 脚本。

bash 脚本如下所示:

go run wordcount.go \
--runner dataflow \
--input gs://dataflow-samples/shakespeare/kinglear.txt \
--output gs://${BUCKET?}/counts \
--project ${PROJECT?} \
--temp_location gs://${BUCKET?}/tmp/ \
--staging_location gs://${BUCKET?}/binaries/ \
--worker_harness_container_image=apache-docker-beam-snapshots-docker.bintray.io/beam/go:20180515

但上述机制无法创建新的数据流作业,看起来很麻烦。

有没有更好的方法来实现我的目标?而我在上述机制上做错了什么?

【问题讨论】:

    标签: python go google-cloud-functions google-cloud-dataflow apache-beam


    【解决方案1】:

    云函数应该用 Python 编写

    Cloud Dataflow Client SDK 只能从模板创建 Dataflow 作业。因此,除非您创建自己的模板,否则无法满足此要求。

    我有一个限制,即应写入 Cloud Dataflow 作业 去

    由于您的 Python 目标无法实现,您的另一个选择是在 Cloud Functions 中运行您的 Go 程序。适用于 Go 的 Cloud Functions 位于 alpha。但是,我不知道在 Cloud Functions 中执行 Apache Beam (Dataflow) 程序的方法。请记住,除非您选择 runner=DirectRunner,否则 Apache Beam 程序会在本地开始执行并将自身连接到在其他地方运行的集群(Dataflow、Spark 等)。

    您选择了最不成熟的语言来使用 Apache Beam。成熟度和功能的顺序是 Java(优秀)、Python(好并且每天都在变得更好)、Go(还没有准备好进入黄金时段)。

    如果您想在 Cloud Dataflow 上运行用 Go 编写的 Apache Beam 程序,则需要使用本地系统、Google Compute Engine 或 Google App Engine Flex 等平台。我不知道 App Engine Standard 是否可以在 Go 中运行 Apache Beam。

    【讨论】:

    • 嗨,约翰,感谢您的回答。我发现 Apache Beam Go SDK 支持 worker_binary 参数,这类似于 Java 数据流作业的 template-location。使用此选项,我能够从我的 python 云函数中启动一个 go 数据流作业。
    【解决方案2】:

    我发现 Apache Beam Go SDK 支持 worker_binary 参数,这类似于 Java 数据流作业的 template-location。使用这个选项,我能够从我的 python 云函数中启动一个 go 数据流作业。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 2022-12-15
      • 2020-04-08
      • 2020-12-10
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多