当前位置: 首页 > 知识库问答 >
问题:

在google数据流管道中构建容器

章昊
2023-03-14

tl;dr Apache Beam管道步骤涉及构建docker图像;如何使用谷歌数据流运行这个管道?存在哪些替代方案?

我目前正在尝试使用谷歌的数据流服务和apache梁(python)迈出第一步。

简单的例子很简单,但当外部软件依赖性开始发挥作用时,事情就会让我感到困惑。似乎可以使用自定义docker容器来设置自己的环境[1][2]。虽然这对大多数依赖项来说都很好,但如果依赖项是docker本身,那就没有帮助了,对我来说就是这样:我的管道的一个步骤涉及使用大量使用docker的外部项目(即构建图像,运行图像)

据我所知,解决这个问题有三种选择:

  1. Docker中的Docker运行外部项目的脚本,这些脚本在数据流工作节点上运行的Docker容器中构建Docker图像。虽然在docker中构建docker形象在原则上是可能的[3],但我觉得在这种情况下行不通,因为对环境的控制非常有限

谢谢

[1] 谷歌云数据流工作者的定制虚拟机图像

[2]https://cloud.google.com/dataflow/docs/guides/using-custom-containers

[3] https://www.docker.com/blog/docker-can-now-run-within-docker/

编辑:添加换行符。

共有1个答案

百里锋
2023-03-14

工作节点的自定义VM映像是否可以为数据流工作节点使用自定义VM映像?

不可能完全替换数据流工作者。但是,正如您所指出的,您可以使用自定义的Beam SDK Docker容器。这将导致对您的案例执行Docker-in-Docker类型。

不要使用谷歌数据流什么更适合替代服务?

请参阅此处了解其他Beam运行器及其功能。

 类似资料:
  • 我使用beam SDK用python编写了一个Google数据流管道。有一些文档介绍了我如何在本地运行它,并设置runner标志以在数据流上运行它。 我现在正尝试将其自动部署到CI管道(bitbucket管道,但并不真正相关)。有关于如何“运行”管道的文档,但没有真正的“部署”管道。我测试过的命令如下: 这将运行作业,但因为它正在流式传输,所以永远不会返回。它还在内部管理打包并推送到存储桶。我知道

  • 我想在谷歌数据流上运行一个管道,该管道取决于另一个管道的输出。现在,我正在本地使用DirectRunner依次运行两条管道: 我的问题如下: DataflowRunner是否保证第二个仅在第一个管道完成后启动

  • 如果作业使用构建流(包括重复作业)运行,构建管道插件是否仍然正确显示作业序列? 以下是构建流程的伪代码: 包将从源代码控制中提取代码,编译它,并将其存储为工件 部署将从上游Package作业复制工件,然后将其复制到目标参数中提供的URL 集成测试将针对参数中提供的URL运行一套集成测试。 即使部署作业重复,构建管道插件是否将此管道显示为4个步骤?

  • 想知道是否有某种“钩子”来放置apache beam管道关闭时将执行的一段代码(无论出于何种原因-崩溃、取消) 每次数据流停止时,我都需要删除pubsub主题的订阅。

  • 我正在尝试从管道中自动创建Jenkins管道构建。 我有一个管道,它创建一个比特桶存储库并向其提交一些代码,包括一个Jenkinsfile。 我需要向此管道添加另一个步骤,然后为其创建管道生成,这将运行 Jenkinsfile 中的步骤。 我认为Jobs DSL应该能够处理这一点,但我找到的文档非常稀少,我仍然不完全确定是否有可能或如何做到这一点。 任何帮助都将不胜感激。我想生成的Pipeline

  • 但是当我运行代码时,我会遇到以下异常: 你有什么想法会导致这种情况吗?