【问题标题】:Using custom docker containers in Dataflow在 Dataflow 中使用自定义 docker 容器
【发布时间】:2017-06-09 19:58:35
【问题描述】:

通过此链接,我发现 Google Cloud Dataflow 为其工作人员使用 Docker 容器:Image for Google Cloud Dataflow instances

我发现可以找到 docker 容器的镜像名称。

但是,有没有办法我可以获取这个 docker 容器(即我应该从哪个存储库获取它?),修改它,然后指示我的 Dataflow 作业使用这个新的 docker 容器?

我问的原因是我们需要在我们的 docker 上安装各种 C++ 和 Fortran 以及其他库代码,以便 Dataflow 作业可以调用它们,但是这些安装非常耗时,所以我们不想使用“ df 中的 resource" 属性选项。

【问题讨论】:

  • 技术上不是您问题的答案,但您可以使用 Google Cloud Dataproc 实现您想要的。 Dataproc 使用 Spark 而不是 Dataflow 运行您的代码,但本质上它实现了编写数据管道的完全相同的目标。 Dataproc 还支持自定义 Docker 映像。
  • 查看 issues.apache.org/jira/browse/… 了解哪些 SDK 允许使用哪种容器。

标签: google-cloud-dataflow


【解决方案1】:

2020 年 5 月更新

仅在 Beam 可移植性框架内支持自定义容器。

在可移植性框架中启动的管道当前必须显式(用户提供的标志)或隐式(例如,所有 Python 流式管道都通过它)传递 --experiments=beam_fn_api

在此处查看文档:https://cloud.google.com/dataflow/docs/guides/using-custom-containers?hl=en#docker

一旦 Dataflow 运行程序完全支持自定义容器,就会有更多特定于 Dataflow 的文档。有关其他 Beam runner 中自定义容器的支持,请参阅:http://beam.apache.org/documentation/runtime/environments


用于 Dataflow 工作器的 docker 容器目前是私有的,无法修改或自定义。

事实上,它们是从一个私有 docker 存储库提供的,所以我认为您无法将它们安装在您的机器上。

【讨论】:

  • 好的,但是我发现了这个名为“WorkerHarnessContainerImageFactory”的选项(请参阅:cloud.google.com/dataflow/java-sdk/JavaDoc/com/google/cloud/…)因此,我是否可以 ssh 进入正在运行的实例(请参阅原始帖子中的第一个链接),然后获取 docker 镜像,然后对其进行修改,然后将修改后的 docker 镜像上传到我的私有 google 容器中,然后“以某种方式”更新 WorkerHarnessContainerImageFactory 参数以指向这个新上传的 docker 镜像?
  • 这些容器不能被修改。当一个新的工作人员启动时,内部容器会从内部存储库中安装。
  • 这在 2020 年今天仍然有效还是 Dataflow 团队将在不久的将来提供的功能?
  • @Dr.FabienTarrade 自定义容器仅在 Beam 可移植性框架中受支持。在可移植性框架内启动的管道当前必须显式(用户提供的标志)或隐式(例如,所有 Python 流式管道都通过该参数)传递 --experiments=beam_fn_api。一旦 Dataflow 运行程序完全支持自定义容器,将会有更多特定于 Dataflow 的文档。有关其他 Beam runner 中自定义容器的支持,请参阅:beam.apache.org/documentation/runtime/environments
  • @Dr.FabienTarrade 您还可以在管道启动时暂存所需的管道依赖项,请参阅beam.apache.org/documentation/sdks/python-pipeline-dependencies
【解决方案2】:

2021 年 1 月更新:Dataflow 现在支持自定义容器。

https://cloud.google.com/dataflow/docs/guides/using-custom-containers?hl=en#docker

【讨论】:

    【解决方案3】:

    您可以从您的作业中生成模板(有关详细信息,请参阅 https://cloud.google.com/dataflow/docs/templates/creating-templates),然后检查模板文件以找到使用的 workerHarnessContainerImage

    我刚刚使用 Python SDK 为作业创建了一个,其中使用的图像是 dataflow.gcr.io/v1beta3/python:2.0.0

    或者,您可以运行一个作业,然后通过 ssh 进入其中一个实例并使用 docker ps 查看所有正在运行的 docker 容器。使用docker inspect [container_id] 查看更多关于绑定到容器等的卷的详细信息。

    【讨论】:

    • 您好,您能详细说明一下吗?我没有找到任何有关为自定义容器创建数据流模板的文档。我想创建模板,然后在触发作业时,我想将 IMAGE 路径作为参数传递..
    • 对不起,5 年没用过这个服务了。不记得这是关于什么的
    猜你喜欢
    • 2017-07-10
    • 2018-09-15
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    相关资源
    最近更新 更多