En este documento, se describe cómo crear y ejecutar un trabajo que no está programado hasta que se completen o se produzcan errores en trabajos específicos. Para obtener más información sobre los estados de los trabajos, consulta Descripción general de la creación y ejecución de trabajos.
Si tienes una carga de trabajo con diferentes requisitos de recursos, considera usar trabajos dependientes para crear una cadena automatizada de trabajos que usen VMs independientes. Por ejemplo, separa los tipos de VMs que se usan para operaciones de baja demanda (como la preparación de datos) y las operaciones de procesamiento intensivo (como el procesamiento de datos). Si usas trabajos dependientes para optimizar el consumo de recursos, puedes reducir los costos y el uso de la cuota.
Antes de comenzar
- Si nunca usaste Batch, consulta Cómo comenzar a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
-
Para obtener los permisos que necesitas para crear un trabajo, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
Editor de trabajos por lotes (
roles/batch.jobsEditor
) en el proyecto -
Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser
) en la cuenta de servicio del trabajo, que de forma predeterminada es la cuenta de servicio predeterminada de Compute Engine
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
-
Editor de trabajos por lotes (
Restricciones
Los trabajos dependientes tienen las siguientes restricciones:
Un trabajo dependiente puede tener hasta cuatro dependencias. Cada dependencia debe contener un nombre de trabajo único y uno de los siguientes estados obligatorios:
SUCCEEDED
: Se realizó correctamenteFAILED
: con erroresFINISHED
: Si se realizó correctamente o no
Cuando creas un trabajo dependiente, deben existir todos sus trabajos de dependencia.
Un trabajo dependiente no puede ingresar al estado programado (
SCHEDULED
) hasta que cada trabajo de dependencia haya ingresado al estado requerido. Si se vuelve imposible que un trabajo de dependencia ingrese a su estado requerido, el trabajo dependiente falla de inmediato sin programarse.Al igual que todos los trabajos, un trabajo dependiente no puede ingresar al estado programado (
SCHEDULED
) si supera el tiempo de espera máximo en la fila. Batch aplica este límite para evitar que tus trabajos se vuelvan obsoletos. Por lo tanto, si crees que el tiempo restante necesario para que finalice cualquiera de los trabajos de dependencia podría superar este límite, considera hacer una o más de las siguientes acciones:- Si aún no creaste un trabajo de dependencia, intenta reducir el tiempo de ejecución esperado del trabajo de dependencia. Por ejemplo, puedes aumentar el paralelismo de la carga de trabajo o limitar el tiempo de ejecución de las tareas y los elementos ejecutables que no necesitas para que se realice correctamente.
- Espera a crear el trabajo dependiente hasta que el tiempo de ejecución esperado de los trabajos de dependencia sea inferior al límite.
Crea un trabajo dependiente
Puedes crear un trabajo que dependa de los siguientes métodos:
- En Google Cloud CLI, usa el comando
gcloud alpha batch jobs submit
. - Para la API de Batch, usa el método
jobs.create
de v1alpha.
Para especificar que una tarea es dependiente, incluye el campo dependencies[].items
, que admite una o más dependencias especificadas como pares clave-valor, en el cuerpo principal del archivo JSON:
"dependencies": [
{
"items": {
"DEPENDENCY_JOB_NAME": "REQUIRED_STATE"
}
}
]
Reemplaza lo siguiente:
DEPENDENCY_JOB_NAME
: Es el nombre de un trabajo de dependencia, que debe alcanzar su estado requerido antes de que se pueda programar.REQUIRED_STATE
: Es el estado requerido para el trabajo de dependencia correspondiente, que debe serSUCCEEDED
,FAILED
oFINISHED
.
Por ejemplo, un trabajo dependiente con tres dependencias puede tener un archivo de configuración JSON similar al siguiente:
{
"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"
}
}
]
}
¿Qué sigue?
- Si tienes problemas para crear o ejecutar una tarea, consulta Solución de problemas.
- Obtén más información para ver trabajos y tareas.
- Obtén más información sobre las opciones de creación de trabajos.