我应该如何在后续的批处理任务之间传输文件?

How should I transfer files between consequent Batch Tasks?

我有一堆 Azure Batch 任务 (Windows),它们相互依赖,因此它们一个接一个地执行。只有一份工作。每个任务都需要在前一个任务中生成的所有文件(加上前一个任务从其前一个任务获得的任何文件)。

我应该如何在任务之间传输这些文件?我当前的解决方案是在每个任务的每个命令行的开头执行一个移动命令。此移动命令将所有文件从先前任务的文件夹移动到当前任务的文件夹。这有点管用,但似乎不对,而且我没有任何关于中间结果的备份。

我正在考虑将每个任务(到 Blob 存储)的所有文件设置为 output,并将它们设置为下一个任务的 input,但这不起作用,因为我会必须提前知道所有文件才能为它们生成 ResourceFile 引用。我事先不知道会生成哪些文件。因此,我的下一个最佳想法是为单个 ZIP 文件生成 ResourceFile 引用,该文件包含先前任务压缩到其中的任何内容。所以 ZIP 文件的内容会一直更改,但我可以将其添加为 input,因为我可以创建一个 ResourceFile 引用它(即使文件的内容发生更改)。但这似乎很麻烦。

其他想法?

P.S。这与我之前在 的问题有关,该问题提到了同样的问题,但提出了不同的问题。

您可能想要在允许共享访问的池上安装虚拟文件系统。参见 https://docs.microsoft.com/en-us/azure/batch/virtual-file-mount

@lauri,考虑到您已经在探索 output 文件方法,我认为您所做的事情很少。

下面还有 2 个想法:

想法一:

使用 azurefileshare 在 windows 个 VM 中挂载。

注意: 因为你得到的虚拟机是 Windows 我认为这限制了你使用 blobfuse 驱动程序进行 blobstorage 挂载的机会.尽管如果 azurefileshare 是您可以用作安装点的东西,那么您可以使用 Batch 中称为 Mounting Virtual Filesystem and AzureFileSahre 的功能,特别是对于 windows vms。

这里你还需要确保 task Dependency 就位,例如 task1 首先完成,然后 [=17] 可以访问该文件的输出=] 形式安装的驱动器。

思路二:

就像你提到的使用持久化 output file concept 以及在概念上使该任务依赖于首先生成输出文件的任务,一旦它持久化,需要使用这些文件的任务就可以触发 resrouefile 的下载。

idea1 的优点:

安装后,驱动器在所有 windows 节点中都可以作为驱动器使用,因此下载和上传时间得到了限制。 (只剩下驱动器同步时间延迟,应该是几毫秒)(我认为不明显)

希望这对您有所帮助。谢谢,:)