本文档介绍了如何创建和运行在特定作业成功或失败后才安排运行的作业。如需详细了解作业状态,请参阅作业创建和执行概览。
如果您的工作负载的资源需求各不相同,请考虑使用相关作业来创建自动化作业链,其中每个作业都使用单独的虚拟机。例如,将用于低需求操作(如数据准备)和计算密集型操作(如数据处理)的虚拟机类型分开。通过使用相关作业来帮助优化资源消耗,您可以降低费用和配额用量。
准备工作
- 如果您之前未使用过 Batch,请查看开始使用 Batch 并完成项目和用户的前提条件,以启用 Batch。
-
如需获得创建作业所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
服务账号用户 (
roles/iam.serviceAccountUser
) 作业的服务账号(默认情况下为默认 Compute Engine 服务账号)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
项目的 Batch Job Editor (
限制
相关作业具有以下限制:
一个依赖作业最多可以有 4 个依赖项。每个依赖项都必须包含唯一的作业名称和以下必需状态之一:
SUCCEEDED
:成功FAILED
:失败FINISHED
:成功或失败
创建依赖作业时,其所有依赖作业都必须存在。
在每个依赖作业进入其所需状态之前,依赖作业无法进入已安排 (
SCHEDULED
) 状态。如果依赖作业无法进入其所需状态,则依赖作业会立即失败,而不会被调度。与所有作业一样,如果相关作业超过队列中的最长等待时间,则无法进入已安排 (
SCHEDULED
) 状态。Batch 会强制执行此限制,以防止您的作业过时。因此,如果您预计任何依赖作业完成所需的剩余时间可能会超过此限制,请考虑执行以下一项或多项操作:- 如果您尚未创建依赖作业,请尝试缩短依赖作业的预期运行时间。例如,您可以提高工作负载的并行性,或限制任何不需要成功的任务和可运行对象的运行时间。
- 在依赖作业的预期运行时间低于限制之前,请等待创建依赖作业。
创建依赖作业
您可以使用以下方法创建相关联的作业:
- 对于 Google Cloud CLI,请使用
gcloud alpha batch jobs submit
命令。 - 对于 Batch API,请使用 v1alpha
jobs.create
方法。
如需指定作业为依赖作业,请在 JSON 文件的正文中添加 dependencies[].items
字段,该字段支持以键值对形式指定一个或多个依赖项:
"dependencies": [
{
"items": {
"DEPENDENCY_JOB_NAME": "REQUIRED_STATE"
}
}
]
替换以下内容:
DEPENDENCY_JOB_NAME
:依赖作业的名称,该作业必须达到所需状态,然后才能安排此依赖作业。REQUIRED_STATE
:相应依赖作业的所需状态,必须为SUCCEEDED
、FAILED
或FINISHED
。
例如,具有三个依赖项的相关作业可以具有类似于以下内容的 JSON 配置文件:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX."
}
}
]
},
"taskCount": 3
}
],
"dependencies": [
{
"items": {
"DEPENDENCY_JOB_NAME_1": "REQUIRED_STATE_1",
"DEPENDENCY_JOB_NAME_2": "REQUIRED_STATE_2",
"DEPENDENCY_JOB_NAME_3": "REQUIRED_STATE_3"
}
}
]
}