Programar tareas dependientes

En este documento se describe cómo crear y ejecutar una tarea que no se programa hasta que se hayan completado correctamente o hayan fallado tareas específicas. Para obtener más información sobre los estados de las tareas, consulta el artículo Descripción general de la creación y ejecución de tareas.

Si tienes una carga de trabajo con requisitos de recursos variables, puedes usar trabajos dependientes para crear una cadena automatizada de trabajos que usen máquinas virtuales independientes. Por ejemplo, separa los tipos de VMs que se usan para operaciones con poca demanda (como la preparación de datos) y las operaciones que requieren muchos recursos de computación (como el procesamiento de datos). Si usas trabajos dependientes para optimizar el consumo de recursos, puedes reducir los costes y el uso de cuotas.

Antes de empezar

  1. Si no has usado Batch antes, consulta el artículo Empezar a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
  2. Para obtener los permisos que necesitas para crear un trabajo, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:

    Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

    También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Restricciones

Los trabajos dependientes tienen las siguientes restricciones:

  • Una tarea dependiente puede tener hasta cuatro dependencias. Cada dependencia debe contener un nombre de tarea único y uno de los siguientes estados obligatorios:

    • SUCCEEDED: succeeded
    • FAILED: failed
    • FINISHED: se ha completado o no
  • Cuando creas un trabajo dependiente, todos sus trabajos de dependencia deben existir.

  • Un trabajo dependiente no puede pasar al estado programado (SCHEDULED) hasta que cada trabajo de dependencia haya pasado al estado requerido. Si un trabajo de dependencia no puede alcanzar el estado requerido, el trabajo dependiente falla inmediatamente sin programarse.

  • Al igual que todas las tareas, una tarea dependiente no puede pasar al estado programado (SCHEDULED) si supera el tiempo máximo de espera en la cola. Batch aplica este límite para evitar que tus trabajos se queden obsoletos. Por lo tanto, si crees que el tiempo restante necesario para que finalice alguno de los trabajos de dependencia puede superar este límite, considera la posibilidad de hacer una o varias de las siguientes acciones:

    • Si aún no has creado una tarea de dependencia, intenta reducir el tiempo de ejecución previsto de la tarea 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 necesites que se completen correctamente.
    • Espera a crear el trabajo dependiente hasta que el tiempo de ejecución previsto de los trabajos de dependencia sea inferior al límite.

Crear una tarea dependiente

Puede crear un trabajo que dependa de otro con los siguientes métodos:

Para especificar que un trabajo depende de otro, incluye el campo dependencies[].items, que admite una o varias dependencias especificadas como pares clave-valor, en el cuerpo principal del archivo JSON:

"dependencies": [
  {
    "items": {
      "DEPENDENCY_JOB_NAME": "REQUIRED_STATE"
    }
  }
]

Haz los cambios siguientes:

  • DEPENDENCY_JOB_NAME: el nombre de una tarea de dependencia, que debe alcanzar el estado requerido para que se pueda programar esta tarea dependiente.

  • REQUIRED_STATE: el estado necesario del trabajo de dependencia correspondiente, que debe ser SUCCEEDED, FAILED o FINISHED.

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"
      }
    }
  ]
}

Siguientes pasos