【发布时间】:2015-01-22 17:50:17
【问题描述】:
是否可以为 Dataflow 工作人员提供自定义包? 我想从计算中取出一个 Debian 打包的二进制文件。
编辑:需要明确的是,包配置非常复杂,仅将文件捆绑在 --filesToStage 中是不可行的。 解决方案应该包括在某个时候安装 Debian 软件包。
【问题讨论】:
是否可以为 Dataflow 工作人员提供自定义包? 我想从计算中取出一个 Debian 打包的二进制文件。
编辑:需要明确的是,包配置非常复杂,仅将文件捆绑在 --filesToStage 中是不可行的。 解决方案应该包括在某个时候安装 Debian 软件包。
【问题讨论】:
这不是 Dataflow 明确支持的。但是,以下是有关如何完成此操作的一些建议。请记住,服务中的一些变化可能会在未来破坏这一点。
有两个不同的问题:
对于第一个问题,您可以使用 --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 以从某个位置获取它。
【讨论】: