3

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

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

4

1 回答 1

4

这不是 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 以从某个位置获取它。

于 2015-01-22T18:58:22.867 回答