1

我使用 Apache Beam 的 Scio 包装器创建了一个管道。我想将它部署在 Google Dataflow 中。

我希望有一个特定的按钮或端点或函数可以定期执行此作业。

我能找到的所有指令都涉及运行 sbt runMain/pack,它会构建工件并每次都上传它们。

如何上传工件一次,然后尽可能轻松地基于管道创建作业?

4

3 回答 3

4

在 Spotify,我们处理这个问题的方法是为 Scio 管道创建一个 docker 映像并通过Styx执行该映像,这基本上是一个基于 k8s 的 cron,但您也可以通过您的旧 cron(或气流/luigi/ gcp-composer)最适合您的用例。Beam 内置了缓存机制来缓存依赖项,因此连续运行只是重用以前上传的文件。Scio 还支持另一个答案中提到的数据流模板。

于 2018-10-24T15:55:13.597 回答
1

我不知道这将如何与 Scio 一起工作,但通常,您可以创建自定义 Dataflow 模板,然后通过控制台、API 调用、gcloud 命令或客户端库执行它。

如果您想定期执行它,您可以创建一个使用客户端库执行它的Cron 作业

于 2018-10-24T11:40:10.323 回答
1

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

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

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

于 2018-10-25T18:57:46.607 回答