【问题标题】:How should I transfer files between consequent Batch Tasks?我应该如何在后续的批处理任务之间传输文件?
【发布时间】:2020-02-28 19:51:40
【问题描述】:

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

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

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

其他想法?

附:这与我之前在 Azure batch task dependencies: copy files from previous 的问题有关,该问题提到了同样的问题,但提出了不同的问题。

【问题讨论】:

    标签: c# azure .net-core azure-batch


    【解决方案1】:

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

    以下还有 2 个想法:

    想法 1:

    使用 azurefileshare 在 Windows 虚拟机中挂载。

    注意:由于您获得的虚拟机是Windows,我认为这限制了您使用blobfuse 驱动程序进行blobstorage 挂载的机会。虽然如果 azurefileshare 是您可以用作挂载点的东西,那么您可以在批处理中使用名为 Mounting Virtual FilesystemAzureFileSahre 的功能,特别是对于 windows vms。

    在这里,您还需要确保有 task Dependency,以便例如 task1 首先完成,然后可以通过 task 2 表单安装驱动器访问该文件的输出。

    想法 2:

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

    idea1 的优点:

    一旦安装,驱动器在所有 Windows 节点中都可以作为驱动器使用,因此下载和上传时间会缩短。 (仅保留驱动器同步时间延迟,应该是几毫秒)(我认为不明显)

    希望这会有所帮助。谢谢:)

    【讨论】:

    • 感谢您的想法。我昨天实现了文件共享(选项 1),它似乎工作,虽然我从来没有让池的挂载配置工作,所以我通过 net use 手动完成。上传+下载的延迟是每个任务几分钟,但这无关紧要,因为一个任务执行可能需要几天时间。至于您的第二个想法,我看不出它与我在问题中已经概述的内容有何不同-我只能将 ResourceFiles 用于我知道存在的文件,并且我事先不知道将生成哪些/哪些文件
    【解决方案2】:

    您可能想要的是在池上挂载一个虚拟文件系统,以允许共享访问。见https://docs.microsoft.com/en-us/azure/batch/virtual-file-mount

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-15
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 2015-08-29
      相关资源
      最近更新 更多