在 运行 个任务之前解压缩输入文件

Unziping input files before running tasks

我希望能够在 运行 任务之前解压缩输入文件,以减少批处理过程中的数据传输。为此,我将以下命令行添加到我的 JobPreparationTask 中:

CommandLine = "/bin/bash -c 'DEBIAN_FRONTEND=noninteractive apt-get install -y unzip; unzip $AZ_BATCH_TASK_WORKING_DIR//myInput.zip'"

但是我没有查看我的文件所在的任务工作目录 (job/task/wd/myInput.zip) 而是查看作业准备文件夹,我得到以下信息错误:

"cannot find or open /mnt/batch/tasks/workitems/myJob/job-1/jobpreparation/wd//myInput.zip"

我尝试过使用其他环境路径,但我总是遇到类似的错误。 如何访问 job/task/wd 来解压缩文件?

我认为你使用的环境变量是错误的,下面是一些建议以及对你当前方式的回答:

  • 在这种情况下,我假设您的 zip 文件是 resourceFiles 的一部分?但是在什么情况下?
  • 在此处参考 resource 个文件:https://docs.microsoft.com/en-us/azure/batch/resource-files
  • 特别是在它说的那部分:All types of tasks support resource files: tasks, start tasks, job preparation tasks, job release tasks, etc 所以你的资源文件是在什么情况下上传的?

  • 如果上传发生在 JobPrep 并且当前任务指的是 JobPrep 那么这可能解释了这种行为。

  • 如果 Zip 是任务级别资源文件的一部分,那么 cmdline 应该是这些任务的一部分,并且环境变量应该在当前上下文中使用。
  • 如果不是:则确保 zip 是带有 jobPrep 的资源文件的一部分,并相应地使用环境变量。

  • 关于 env var 你为什么不使用:AZ_BATCH_JOB_PREP_WORKING_DIRAZ_BATCH_JOB_PREP_DIR请参阅此处https://docs.microsoft.com/en-us/azure/batch/batch-compute-node-environment-variables#environment-variables 这将允许访问您的工作准备目录级别。

额外

想法分享只是为了让您了解并牢记在心,并且仅在满足您的需要时使用。 (仅当您已阅读文章并且它确实适合您的设计场景时才使用它,否则请忽略,上面应该可以解决您的问题):)

An application package is a .zip file that contains the application binaries and supporting files that are required for your tasks to run the application. Each application package represents a specific version of the application.

You can specify application packages at the pool and task levels.

希望这能满足您的需要。 :) 谢谢