本文档介绍了如何创建和运行在特定作业成功或失败后才调度运行的作业。如需详细了解作业状态,请参阅作业创建和执行概览。
如果您的工作负载具有不同的资源需求,请考虑使用依赖作业创建一个自动作业链,其中每个作业都使用单独的虚拟机。例如,将用于低需求操作(例如数据准备)和计算密集型操作(例如数据处理)的虚拟机类型分开。通过使用依赖作业来帮助优化资源消耗,您可以降低费用和配额用量。
准备工作
- 如果您之前未使用过批处理功能,请参阅开始使用批处理,并完成适用于项目和用户的前提条件,以启用批处理功能。
-
如需获得创建作业所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
作业的服务账号(默认为默认的 Compute Engine 服务账号)上的 Service Account User (
roles/iam.serviceAccountUser
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
项目的 Batch Job Editor (
限制
依赖作业存在以下限制:
一个依赖作业最多可以有 4 个依赖项。每个依赖项都必须包含一个唯一的作业名称和以下必需状态之一:
SUCCEEDED
:成功FAILED
:失败FINISHED
:成功或失败
创建依赖作业时,其所有依赖作业都必须存在。
在每个依赖项作业都进入其所需状态之前,依赖项作业无法进入已调度 (
SCHEDULED
) 状态。如果依赖项作业无法进入所需状态,则依赖项作业会立即失败,而不会进行调度。
创建依赖作业
您可以使用以下方法创建依赖作业:
- 对于 Google Cloud CLI,请使用
gcloud alpha batch jobs submit
命令。 - 对于批量处理 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"
}
}
]
}