【问题标题】:Is it possible to run Cloud Dataflow with custom packages?是否可以使用自定义包运行 Cloud Dataflow?
【发布时间】:2015-01-22 17:50:17
【问题描述】:

是否可以为 Dataflow 工作人员提供自定义包? 我想从计算中取出一个 Debian 打包的二进制文件。

编辑:需要明确的是,包配置非常复杂,仅将文件捆绑在 --filesToStage 中是不可行的。 解决方案应该包括在某个时候安装 Debian 软件包。

【问题讨论】:

    标签: google-cloud-dataflow


    【解决方案1】:

    这不是 Dataflow 明确支持的。但是,以下是有关如何完成此操作的一些建议。请记住,服务中的一些变化可能会在未来破坏这一点。

    有两个不同的问题:

    1. 将 debian 包安装到 worker 上。
    2. 安装 debian 包。

    对于第一个问题,您可以使用 --filesToStage 并指定您的 debian 包的路径。这将导致包被上传到 GCS,然后在启动时下载到 worker。如果您使用此选项,则必须在 --filesToStage 的值中包含所有 jar,因为如果您显式设置 --filesToStage,则默认情况下不会包含它们。

    在 java worker 上,传入 --filesToStage 的任何文件都将在以下目录(或子目录)中可用

    /var/opt/google/dataflow
    

    或

    /dataflow/packages
    

    您需要检查这两个位置才能确保找到文件。

    我们不保证这些目录将来不会更改。这些只是今天使用的位置。

    要解决第二个问题,您可以在 DoFn 中覆盖 StartBundle。在 /dataflow/packages 中找到它后,您可以从这里转到命令行并安装您的 debian 包。

    您的 DoFn 可能有多个实例并排运行,因此如果两个进程尝试同时安装您的软件包,您可能会遇到争用问题。我不确定 debian 软件包系统是否可以处理此问题,或者您需要在代码中明确处理。

    这种方法的一个小变种是不使用 --filesToStage 将包分发给您的工作人员,而是将代码添加到您的 startBundle 以从某个位置获取它。

    【讨论】:

    • 谢谢!工人生活在什么环境中?有我可以玩的图像吗?另外,有没有办法确保每个实例一次运行不超过一个工作人员?
    • 没有办法确保一个实例一次只运行一个工作者。我不确定你所说的环境是什么意思。每个工人都在自己的 docker 容器中运行。如果您使用 --teardownPolicy=TEARDOWN_NEVER 运行您的作业,您的虚拟机将在您的作业完成后继续运行,这样您就可以随意使用 ssh。但是,您不会看到 /dataflow,因为该目录仅存在于容器内。
    • 来自未来的你好! docker 容器在哪里定义,它是如何调用的?我想我应该可以在我自己的本地机器上运行它,看看里面有什么。
    • docker 容器是 Dataflow 服务的一部分。我们不支持或鼓励在本地机器上运行它。如果您真的想检查容器,可以在我们的 Google Container Registry dataflow.gcr.io/v1beta3/java-batch:20160118-rc01 中找到最近的容器。如果您在安装二进制文件时遇到问题,如果您告诉我们您遇到了什么问题,我们可能会提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2018-01-30
    • 1970-01-01
    相关资源
    最近更新 更多