Programar jobs dependentes

Este documento descreve como criar e executar um job que não é programado até que jobs específicos sejam concluídos ou falhem. Para saber mais sobre os estados de jobs, consulte Visão geral da criação e execução de jobs.

Se você tiver uma carga de trabalho com requisitos de recursos variáveis, use jobs dependentes para criar uma cadeia automatizada de jobs que usem VMs separadas. Por exemplo, separe os tipos de VMs usadas para operações de baixa demanda (como preparação de dados) e operações com uso intenso de computação (como processamento de dados). Ao usar jobs dependentes para otimizar o consumo de recursos, você pode reduzir os custos e o uso de cotas.

Antes de começar

  1. Se você nunca usou o Batch, consulte Introdução ao Batch e ative o serviço concluindo os pré-requisitos para projetos e usuários.
  2. Para receber as permissões necessárias para criar um job, peça ao administrador para conceder a você os seguintes papéis do IAM:

    Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

    Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.

Restrições

Os jobs dependentes têm as seguintes restrições:

  • Um job dependente pode ter até quatro dependências. Cada dependência precisa conter um nome de job exclusivo e um dos seguintes estados obrigatórios:

    • SUCCEEDED: concluído
    • FAILED: falha
    • FINISHED: concluído ou falha
  • Ao criar um job dependente, todos os jobs de dependência precisam existir.

  • Um job dependente não pode entrar no estado programado (SCHEDULED) até que cada job de dependência tenha entrado no estado obrigatório. Se for impossível que um job de dependência entre no estado obrigatório, o job dependente falhará imediatamente sem ser programado.

  • Como todos os jobs, um job dependente não pode entrar no estado programado (SCHEDULED) se exceder o tempo máximo de espera na fila. O Batch aplica esse limite para evitar que seus jobs fiquem obsoletos. Consequentemente, se você espera que o tempo restante necessário para que qualquer um dos jobs de dependência termine possa exceder esse limite, faça uma ou mais das seguintes ações:

    • Se você ainda não criou um job de dependência, tente reduzir o tempo de execução esperado do job de dependência. Por exemplo, é possível aumentar o paralelismo da carga de trabalho ou limitar o tempo de execução de tarefas e executáveis que não precisam ser concluídos.
    • Aguarde para criar o job dependente até que o tempo de execução esperado dos jobs de dependência seja menor que o limite.

Criar um job dependente

É possível criar um job que é dependente usando os seguintes métodos:

Para especificar que um job é dependente, inclua o dependencies[].items campo, que oferece suporte a uma ou mais dependências especificadas como pares de chave-valor, no corpo principal do arquivo JSON:

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

Substitua:

  • DEPENDENCY_JOB_NAME: o nome de um job de dependência, que precisa atingir o estado obrigatório antes que esse job dependente possa ser programado.

  • REQUIRED_STATE: o estado obrigatório do job de dependência correspondente, que precisa ser SUCCEEDED, FAILED ou FINISHED.

Por exemplo, um job dependente com três dependências pode ter um arquivo de configuração JSON semelhante ao seguinte:

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

A seguir