为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 GCP 中的 Cloud Functions 调用用 Go 编写的 Dataflow 作业

如何从 GCP 中的 Cloud Functions 调用用 Go 编写的 Dataflow 作业

Go
倚天杖 2023-06-01 14:59:34
我的目标是创建一种机制,当新文件上传到云存储时,它会触发云函数。最终,此 Cloud 函数将触发 Cloud Dataflow 作业。我有一个限制,即 Cloud Dataflow 作业应该用 Go 编写,而 Cloud Function 应该用 Python 编写。我现在面临的问题是,我无法从 Cloud Function 调用 Cloud Dataflow 作业。用 Go 编写的 Cloud Dataflow 中的问题是template-locationApache Beam Go SDK 中没有定义变量。这就是我无法创建数据流模板的原因。而且,由于没有数据流模板,我可以从云函数调用云数据流作业的唯一方法是编写一个 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但上述机制无法创建新的数据流作业,而且看起来很麻烦。有没有更好的方法来实现我的目标?我在上述机制上做错了什么?
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

Cloud Function 应该用 Python 编写

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

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

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

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

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


查看完整回答
反对 回复 2023-06-01
?
MMTTMM

TA贡献1869条经验 获得超4个赞

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



查看完整回答
反对 回复 2023-06-01
  • 2 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信