Google Cloud Dataflow中的临时文件

Zac*_*chB 2 google-cloud-dataflow

我正在尝试在执行Dataflow作业的工作人员上写临时文件,但似乎在作业仍在运行时这些文件已被删除。如果我通过SSH进入正在运行的VM,则可以执行完全相同的文件生成命令,并且文件不会被破坏-也许这只是对数据流运行器用户的清除。是否可以使用临时文件,或者这是平台限制吗?

具体来说,我正在尝试写入所返回的位置Files.createTempDir(),即/tmp/someidentifier

编辑:不确定我发布时发生了什么,但是Files.createTempDirectory()可以...

Jer*_*ewi 6

对于您写入本地磁盘的文件的生存期,我们不做任何明确保证。

就是说,写入ProcessElement内部的临时文件将起作用。您可以在同一ProcessElement中进行读写。同样,在DoFn.startBundle中创建的任何文件都将在processElement和finishBundle中可见。

您应该避免写信给/dataflow/logs/taskrunner/harness。在那里写文件可能与Dataflow的日志记录冲突。我们鼓励您使用标准的Java API File.createTempFile()File.createTempDirectory()替代。

如果要保留除finishBundle之外的数据,则应将数据写入持久存储,例如GCS。您可以通过将数据作为sideOutput发出,然后使用TextIO或其他编写器之一来完成此操作。另外,您也可以直接从DoFn内部写入GCS。

由于Dataflow在容器内运行,因此无法通过ssh进入VM来查看文件。容器已挂载了主机VM的某些目录,但/tmp不是其中之一。您将需要附加到适当的容器,例如通过运行

docker exec -t -i <CONTAINER ID> /bin/bash
Run Code Online (Sandbox Code Playgroud)

该命令将在正在运行的容器内启动外壳程序。