Programa trabajos dependientes

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

  1. Si nunca usaste Batch, consulta Cómo comenzar 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, pídele a tu administrador que te otorgue los siguientes roles de IAM:

    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.

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ó correctamente
    • FAILED: con errores
    • FINISHED: 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:

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

¿Qué sigue?