如何部署 Apache Beam/Spotify Scio 管道?
How do I deploy an Apache Beam/Spotify Scio Pipeline?
我使用 Apache Beam 的 Scio 包装器创建了一个管道。我想在 Google Dataflow 中部署它。
我希望有一个特定的按钮或端点或函数可以定期执行此作业。
我能找到的所有说明都涉及 运行 sbt runMain/pack,它构建工件并每次都上传它们。
如何一次上传工件,然后尽可能轻松地基于管道创建作业?
我不知道这对 Scio 究竟有何作用,但通常,您可以通过控制台、API 调用、gcloud 命令或客户端库创建 custom Dataflow template and then execute it。
如果您想定期执行它,您可以创建一个 Cron job that executes it by using the client libraries.
在 Spotify,我们处理这个问题的方法是为 Scio 管道创建一个 docker 图像并通过 Styx, which is basically a k8s based cron, but you could execute it via your good old cron too (or airflow/luigi/gcp-composer) whatever fits your use case best. Beam has build in caching mechanism to cache dependencies, so consecutive runs just reuse previously uploaded files. Scio also supports Dataflow templates mentioned in .
执行该图像
我的问题已解决。这是我对以前的自己的建议:
- 不,除了 运行 管道之外,Apache Beam 没有任何内置部署功能。
- 任何类型的作业(特定上下文中的管道 运行)都必须由运行 Runner 的系统提供。
- Dataflow 提供了这样一个东西:模板。模板让您只需单击一个按钮即可将管道变成作业。
- 模板本身是一个 JSON 文档。
- 您可以通过用户界面为模板提供参数(如果您使用 ValueProvider 对象),或者允许在模板 JSON 文件中分配参数。
- 您可以通过将
--templateLocation=gs://mybucket/templateName.json
添加到程序参数来自动生成模板文件。
- 模板 JSON 文件包含许多可怕的东西,例如
"filesToStage"
。
- 不懂的东西不用担心。
"filesToStage"
可能存在以确保正确部署工件。 . .因此引用您的本地驱动器。
- 权限可能是第一次出现问题。
- Beam/Scio 中存在一个严重错误,会导致 Beam "forget" 关于 Google 文件系统
"gs://"
类型。通过 运行ning FileSystems.setDefaultPipelineOptions(PipelineOptionsFactory.create)
修复
- 使用Google 函数激活作业。在 Google 的网站上有一个关于如何做到这一点的非常好的模板。
@ravwojdyla 和@Iñigo - 谢谢你们的帮助。
我使用 Apache Beam 的 Scio 包装器创建了一个管道。我想在 Google Dataflow 中部署它。
我希望有一个特定的按钮或端点或函数可以定期执行此作业。
我能找到的所有说明都涉及 运行 sbt runMain/pack,它构建工件并每次都上传它们。
如何一次上传工件,然后尽可能轻松地基于管道创建作业?
我不知道这对 Scio 究竟有何作用,但通常,您可以通过控制台、API 调用、gcloud 命令或客户端库创建 custom Dataflow template and then execute it。
如果您想定期执行它,您可以创建一个 Cron job that executes it by using the client libraries.
在 Spotify,我们处理这个问题的方法是为 Scio 管道创建一个 docker 图像并通过 Styx, which is basically a k8s based cron, but you could execute it via your good old cron too (or airflow/luigi/gcp-composer) whatever fits your use case best. Beam has build in caching mechanism to cache dependencies, so consecutive runs just reuse previously uploaded files. Scio also supports Dataflow templates mentioned in
我的问题已解决。这是我对以前的自己的建议:
- 不,除了 运行 管道之外,Apache Beam 没有任何内置部署功能。
- 任何类型的作业(特定上下文中的管道 运行)都必须由运行 Runner 的系统提供。
- Dataflow 提供了这样一个东西:模板。模板让您只需单击一个按钮即可将管道变成作业。
- 模板本身是一个 JSON 文档。
- 您可以通过用户界面为模板提供参数(如果您使用 ValueProvider 对象),或者允许在模板 JSON 文件中分配参数。
- 您可以通过将
--templateLocation=gs://mybucket/templateName.json
添加到程序参数来自动生成模板文件。 - 模板 JSON 文件包含许多可怕的东西,例如
"filesToStage"
。 - 不懂的东西不用担心。
"filesToStage"
可能存在以确保正确部署工件。 . .因此引用您的本地驱动器。 - 权限可能是第一次出现问题。
- Beam/Scio 中存在一个严重错误,会导致 Beam "forget" 关于 Google 文件系统
"gs://"
类型。通过 运行ningFileSystems.setDefaultPipelineOptions(PipelineOptionsFactory.create)
修复
- 使用Google 函数激活作业。在 Google 的网站上有一个关于如何做到这一点的非常好的模板。
@ravwojdyla 和@Iñigo - 谢谢你们的帮助。