如何部署 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 .

执行该图像

我的问题已解决。这是我对以前的自己的建议:

  1. 不,除了 运行 管道之外,Apache Beam 没有任何内置部署功能。
  2. 任何类型的作业(特定上下文中的管道 运行)都必须由运行 Runner 的系统提供。
  3. Dataflow 提供了这样一个东西:模板。模板让您只需单击一个按钮即可将管道变成作业。
  4. 模板本身是一个 JSON 文档。
  5. 您可以通过用户界面为模板提供参数(如果您使用 ValueProvider 对象),或者允许在模板 JSON 文件中分配参数。
  6. 您可以通过将 --templateLocation=gs://mybucket/templateName.json 添加到程序参数来自动生成模板文件。
  7. 模板 JSON 文件包含许多可怕的东西,例如 "filesToStage"
  8. 不懂的东西不用担心。 "filesToStage" 可能存在以确保正确部署工件。 . .因此引用您的本地驱动器。
  9. 权限可能是第一次出现问题。
  10. Beam/Scio 中存在一个严重错误,会导致 Beam "forget" 关于 Google 文件系统 "gs://" 类型。通过 运行ning FileSystems.setDefaultPipelineOptions(PipelineOptionsFactory.create)
  11. 修复
  12. 使用Google 函数激活作业。在 Google 的网站上有一个关于如何做到这一点的非常好的模板。

@ravwojdyla 和@Iñigo - 谢谢你们的帮助。