Google cloud dataflow 如何部署Apache Beam/Spotify Scio管道?

Google cloud dataflow 如何部署Apache Beam/Spotify Scio管道?,google-cloud-dataflow,apache-beam,spotify-scio,Google Cloud Dataflow,Apache Beam,Spotify Scio,我已经使用ApacheBeam的Scio包装器创建了一个管道。我想在Google数据流中部署它 我希望有一个特定的按钮或端点或功能,将定期执行这项工作 我能找到的所有指令都涉及到运行sbt runMain/pack,它构建工件并每次上传它们 如何上传工件一次,然后尽可能轻松地基于管道创建作业?我不知道Scio会如何工作,但通常,您可以创建一个,然后通过控制台、API调用、gcloud命令或客户端库 如果您希望定期执行,您可以创建一个,通过使用来执行它。我不知道这对Scio会起什么作用,但通常,您

我已经使用ApacheBeam的Scio包装器创建了一个管道。我想在Google数据流中部署它

我希望有一个特定的按钮或端点或功能,将定期执行这项工作

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


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

我不知道Scio会如何工作,但通常,您可以创建一个,然后通过控制台、API调用、gcloud命令或客户端库


如果您希望定期执行,您可以创建一个,通过使用来执行它。

我不知道这对Scio会起什么作用,但通常,您可以创建一个,然后通过控制台、API调用、gcloud命令或客户端库来执行


如果您希望定期执行,您可以使用Spotify的.

创建一个执行它的,我们处理这个问题的方法是为Scio管道创建一个docker映像,并通过执行该映像,它基本上是一个基于k8s的cron,但您也可以通过您的老cron或airflow/luigi/gcp composer来执行它,只要它最适合您的用例。Beam有内置的缓存机制来缓存依赖项,所以连续运行只需重用以前上载的文件。Scio还支持中提到的数据流模板。

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

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

不,除了运行管道之外,ApacheBeam没有任何内置的部署特性。 管道在特定上下文中运行的任何类型的作业都必须由运行程序所在的系统提供。 数据流提供了这样一个东西:模板。通过模板,只需单击按钮即可将管道转换为作业。 模板本身是一个JSON文档。 如果使用ValueProvider对象,或者允许在模板JSON文件中分配参数,则可以通过用户界面为模板提供参数。 您可以通过向程序args添加-templateLocation=gs://mybucket/templateName.json来自动生成模板文件。 模板JSON文件包含很多可怕的东西,比如那些filesToStage。 不要担心你不懂的东西。FileToStage的存在可能是为了确保工件被正确部署。因此,对本地驱动器的引用。 权限在第一次出现时可能是个问题。 Beam/Scio中有一个令人讨厌的bug,它会导致Beam忘记Google文件系统gs://类型。通过运行FileSystems.setDefaultPipelineOptionPipelineOptionFactory.create来修复此问题 使用谷歌功能激活作业。在谷歌的网站上有一个很好的模板来说明如何做到这一点。
@ravwojdyla和@Iñigo-谢谢你们两位的帮助。

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

不,除了运行管道之外,ApacheBeam没有任何内置的部署特性。 管道在特定上下文中运行的任何类型的作业都必须由运行程序所在的系统提供。 数据流提供了这样一个东西:模板。通过模板,只需单击按钮即可将管道转换为作业。 模板本身是一个JSON文档。 如果使用ValueProvider对象,或者允许在模板JSON文件中分配参数,则可以通过用户界面为模板提供参数。 您可以通过向程序args添加-templateLocation=gs://mybucket/templateName.json来自动生成模板文件。 模板JSON文件包含很多可怕的东西,比如那些filesToStage。 不要担心你不懂的东西。FileToStage的存在可能是为了确保工件被正确部署。因此,对本地驱动器的引用。 权限在第一次出现时可能是个问题。 Beam/Scio中有一个令人讨厌的bug,它会导致Beam忘记Google文件系统gs://类型。通过运行FileSystems.setDefaultPipelineOptionPipelineOptionFactory.create来修复此问题 使用谷歌功能激活作业。在谷歌的网站上有一个很好的模板来说明如何做到这一点。
@ravwojdyla和@Iñigo-感谢你们的帮助。

当我创建模板时,filesToStage字段会列出本地桌面上的文件。模板中描述的作业是否能够在不访问这些文件的情况下运行?它们不是必须上传,并且在云中指定位置吗?您可以将它们存储在中。在
我发送的关于创建模板的文档您可以看到一个示例,其中《李尔王》的文本存储在GCS存储桶中。当我创建模板时,filesToStage字段会列出本地桌面上的文件。模板中描述的作业是否能够在不访问这些文件的情况下运行?它们不是必须上传,并且在云中指定位置吗?您可以将它们存储在中。在我发送的关于创建模板的文档中,您可以看到一个示例,其中《李尔王》的文本存储在GCS存储桶中。cronjob会做什么?每次都执行MyPipeline.main吗?我的希望是,我可以将管道部署到给定的运行程序,并在不直接影响本地MyPipeline.main的情况下创建新的工作。似乎Beam本身并不支持。我需要使用数据流模板或Docker映像。在Beam中没有工作的概念?@GabrielCurio是的,可能有一个论点是当前日期或任何你需要的。因此,如果管道位于docker映像中,入口点执行管道的jar,那么您将有一个运行docker run的cron。@GabrielCurio关于模板化作业,请查看中的数据流模板文档,而不是执行main。cronjob会做什么?每次都执行MyPipeline.main吗?我的希望是,我可以将管道部署到给定的运行程序,并在不直接影响本地MyPipeline.main的情况下创建新的工作。似乎Beam本身并不支持。我需要使用数据流模板或Docker映像。在Beam中没有工作的概念?@GabrielCurio是的,可能有一个论点是当前日期或任何你需要的。因此,如果管道位于docker映像中,且入口点正在执行管道的jar,则会有一个运行docker run的cron。@GabrielCurio关于模板化作业,请查看中的数据流模板文档,而不是执行main。