是否可以为 Dataflow 工作人员提供自定义包?
我想从计算内部输出到 Debian 打包的二进制文件。
编辑:需要明确的是,包配置非常复杂,仅将文件捆绑在 --filesToStage 中是不可行的。
解决方案应该包括在某个时候安装 Debian 软件包。
最佳答案
这不是 Dataflow 明确支持的内容。但是,以下是有关如何完成此操作的一些建议。请记住,服务中的事情可能会发生变化,这可能会在 future 打破这种情况。
有两个不同的问题:
对于第一个问题,您可以使用 --filesToStage 并指定 debian 软件包的路径。这将导致包被上传到 GCS,然后在启动时下载到工作器。如果你使用这个选项,你必须在 --filesToStage 的值中包含你所有的 jar,因为如果你明确设置 --filesToStage,它们将不会被默认包含。
在 Java Worker 中,任何传入 --filesToStage 的文件都将在以下目录(或其子目录)中可用
/var/opt/google/dataflow
或者
/dataflow/packages
您需要检查这两个位置以确保找到该文件。
我们不保证这些目录在 future 不会改变。这些只是今天使用的位置。
要解决第二个问题,您可以在 StartBundle 中覆盖 DoFn 。从这里开始,您可以在/dataflow/packages 中找到 debian 软件包后,转到命令行并安装它。
您的 DoFn 可能有多个并行运行的实例,因此如果两个进程尝试同时安装您的软件包,您可能会遇到争用问题。我不确定 debian 软件包系统是否可以处理这个问题,或者您需要在代码中明确地处理这个问题。
这种方法的一个轻微变体是不使用 --filesToStage 将包分发给您的工作人员,而是将代码添加到您的 startBundle 以从某个位置获取它。
关于google-cloud-dataflow - 是否可以使用自定义包运行 Cloud Dataflow?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28095433/