【发布时间】:2020-08-06 21:20:23
【问题描述】:
我的问题是在 AWS Batch 上运行完数千个作业后运行一个作业。 我已经尝试在优先级较低的作业队列中运行作业,并在同一队列中运行作业,但在所有其他队列之后提交(文档说作业大致按照提交的顺序执行)。但我的问题是,这些(或其他)中的任何一个是否保证它会在其他人之后运行?。
【问题讨论】:
标签: amazon-web-services boto3 aws-batch
我的问题是在 AWS Batch 上运行完数千个作业后运行一个作业。 我已经尝试在优先级较低的作业队列中运行作业,并在同一队列中运行作业,但在所有其他队列之后提交(文档说作业大致按照提交的顺序执行)。但我的问题是,这些(或其他)中的任何一个是否保证它会在其他人之后运行?。
【问题讨论】:
标签: amazon-web-services boto3 aws-batch
我不会依赖使用上述方法的保证。执行顺序明确不保证与提交顺序匹配。优先级“应该”起作用,但在大规模情况下,可能会在某些时候延迟您的高优先级执行并导致调度程序决定它有资源可用于低优先级队列。
您可以依赖job dependencies。它们允许您指定一个作业依赖于另一个 N 作业,因此必须等到它们全部完成才能开始运行。这甚至可以被链接起来——A 依赖于B,B 依赖于C,保证订单C -> B -> A。不幸的是,N <= 20。
依赖大量工作(超过 20 个)的最佳方式是依赖单个 array job,其中包含所有这些工作。在相关说明中,也可以将数组作业配置为使其所有作业串行依赖(作业按数组顺序执行)。唯一需要注意的是,您必须将所有工作放入一个数组中。如果您想要依赖的数千个工作尚未在一个数组中,有一些方法可以将它们处理成一个 - 例如,如果您正在处理 1000 个文件,您可以将这些文件放在一个列表中,并使用其作业索引将每个数组作业索引到列表中。
【讨论】: