c# - Azure 批处理任务依赖项:从以前复制文件
问题描述
我有一个 Azure Batch 场景,其中我有一系列相互运行的任务。依赖关系设置正确,因此它们彼此运行良好。
但是,我需要在执行之前将所有文件从以前的任务文件夹复制到新任务的文件夹中。我事先不知道会有多少文件和什么文件,所以我只想复制所有内容。我找不到使用 Batch 客户端库 ( https://docs.microsoft.com/en-us/dotnet/api/overview/azure/batch?view=azure-dotnet ) 完成此任务的方法。
作为一种解决方法,我尝试向执行的 .bat 文件添加一个简单的复制任务,commandline
但由于某种原因它只复制了一些文件。在一项任务中,有几百个文件要复制,并且在停止复制之前它复制了多少部分(没有错误)会有所不同。这是我的复制命令:$"cmd /c xcopy /E /F /Y %AZ_BATCH_TASK_WORKING_DIR%\\..\\..\\{previousTaskId}\\wd %AZ_BATCH_TASK_WORKING_DIR%"
。如果直接从 VM 执行,一切都会正常工作。
检验假设:
- 复制会覆盖执行实际处理的 .bat 文件。这反过来又破坏了复制。我现在已经排除了这个问题(每个任务都有一个不同命名的 .bat 文件)
- 由于某种原因,复制是并行完成的。我向蝙蝠添加了时间戳回声,并且没有并行性,所以这不是原因。还尝试
sleep 10
在 xcopy 之前添加,但没有任何区别。 - xcopy 出于某种原因看不到所有文件。添加了一个
dir
命令来查看有哪些文件,它只看到 xcopy 复制的相同文件。 - 用户访问问题。没有意义,因为某些文件已成功复制并且没有错误。
有任何想法吗?这听起来像一个微不足道的场景,但我就是不知道如何做到这一点。
解决方案
你retentionTime
为你的任务配置了什么?
我想知道 Batch 是否在您的下游任务试图复制它们的同时清理上一个任务(删除所有文件)。
一个未经测试的建议...
...假设您有按该顺序运行的任务 A 和 B(使用任务依赖项强制执行)。
...outputFile
在任务 A 上配置以将生成的所有文件复制A
到您的存储帐户中。使用通配符,以便将所有文件复制到同一个容器中。
...resourceFile
在任务 B 上配置以将存储帐户中的所有文件复制到任务工作目录中。
这具有将您的中间工作文件保留在计算节点之外的优势 - 如果/当某些事情中断您的工作负载时,您可以从中断的地方继续。
推荐阅读
- wso2 - WSO2 使用 Analytics Dashboard 创建自定义小部件
- python - 使用 appJar GUI 模块化 Python 程序
- excel - Power Query (M Code) - 如何使用通配符替换多个字符串
- python - QPixmap 使用 Realsense 图像调整大小
- django - 使用 generic.ListView 在 Django 中显示带有对象的类别
- python - 如何测试 Django 管理员?
- django-rest-framework - DRF 中的块令牌
- aws-lambda - 如何通过无服务器框架在 AWS EFS 上安装大型依赖项
- sql-server - 如何将垂直行显示为水平列
- symfony - 语法错误 line 0, col 60: Error: Expected end of string, got 'ON' - Symfony 4/Doctrine2