Pausar um job do Dataflow

Use a opção de serviço "pause-on-failure" para preservar o estado dos jobs em lote do Dataflow. Esse recurso permite pausar a execução do job, resolver problemas externos ao pipeline e retomar o processamento sem perder o trabalho concluído. Quando um job é pausado usando esse recurso, não é possível mudar o código do pipeline ou as configurações da VM de worker, como o tipo de máquina.

Ao ativar esse recurso, você pode gerenciar melhor os custos de recursos e melhorar a confiabilidade do job durante interrupções temporárias ou restrições de cota. Você pode manter o controle sobre o ciclo de vida do pipeline configurando durações máximas de pausa ao ativar a opção "pause-on-failure". Também é possível pausar ou retomar manualmente pipelines que tenham a flag "pause-on-failure" ativada.

Benefícios da opção "pause-on-failure"

A opção de serviço "pause-on-failure" permite preservar o progresso do job em lote durante interrupções, reduzindo o tempo total de computação e o gasto de recursos.

  • Retenção de pontos de verificação:quando um job falha, é possível retomá-lo do último ponto de verificação registrado, em vez de reiniciar do zero. Isso evita a necessidade de reprocessar blocos de dados concluídos, o que significa que você não precisa pagar para refazer o trabalho que foi concluído com sucesso.
  • Reduzir dependências externas:proteja seus pipelines contra problemas transitórios, como interrupções temporárias ou limites de taxa em serviços externos. Pausar o job oferece a oportunidade de resolver a causa raiz antes de retomar a execução sem perder o trabalho concluído.
  • Processar falhas não determinísticas:para cargas de trabalho propensas a falhas intermitentes ou não determinísticas, essa opção permite proteger o progresso incremental em cada tentativa sequencial, evitando a falha total do job.
  • Gerenciar recursos e cota:pause jobs em lote de baixa prioridade para liberar temporariamente a cota ou realocar recursos de alto valor, como GPUs ou TPUs, para cargas de trabalho urgentes, como treinamento de modelo de machine learning ou inferência, sem perder o progresso de referência.

Suporte e limitações

A pausa de um job (manualmente ou em caso de falha) tem os seguintes requisitos e limitações:

Comportamento do job "pause-on-failure"

Quando você ativa o recurso "pause-on-failure", o job é pausado automaticamente após uma falha de item de trabalho quatro vezes. Essas falhas são identificadas nos registros como mensagens de job que contêm Error message from worker e mensagens de worker que contêm Completed work item ITEM_NUMBER UNSUCCESSFULLY. Outros tipos de falhas, como falta de estoque e erros de cota, não acionam uma pausa automática. Em vez disso, essas falhas fazem com que o job falhe normalmente. Ativar a opção "pause-on-failure" também permite pausar um job manualmente.

Transições de estado do job

Quando um job do Dataflow é pausado, ele passa pelos seguintes estados:

  1. Pausando: um estado intermediário em que o job interrompe o processamento, exclui as VMs de worker e arquiva o estado de back-end. Você ainda recebe cobranças pelas VMs até que o serviço termine de excluí-las.
  2. Pausado: o job está totalmente interrompido. Nesse momento, você só recebe cobranças pelos dados do Shuffle arquivados.

Comportamentos excepcionais

A opção "pause-on-failure" pode se comportar de maneira inesperada nos seguintes cenários:

  • Se você pausar manualmente um job que está quase concluído, ele poderá ser concluído em vez de pausado.
  • Em circunstâncias raras, um job pode falhar ao pausar. Nesses casos, o job retorna a um estado de execução se você o pausou manualmente ou entra em um estado de falha se o job estiver pausando devido a um erro.

Retomar o processamento

Quando o job é retomado, o serviço processa os itens de trabalho da seguinte maneira:

  • Trabalho concluído: o serviço não reprocessa nenhuma etapa ou item de trabalho que foi totalmente concluído quando o job foi pausado.
  • Trabalho em andamento: todos os itens de trabalho que estavam em andamento quando o job foi pausado são reprocessados desde o início.
  • Contagens de falhas: todas as contagens de falhas de itens de trabalho são redefinidas para zero, o que significa que o job não será pausado automaticamente novamente até que um item de trabalho falhe mais quatro vezes.

Ativar a opção "pause-on-failure"

Para ativar a opção "pause-on-failure" para seu job, use a opção de serviço pause_on_failure do Dataflow ao executar o job.

Java

--dataflowServiceOptions=pause_on_failure

Python

--dataflow_service_options=pause_on_failure

Go

--dataflow_service_options=pause_on_failure

Especificar uma duração máxima de pausa

Por padrão, o job permanece pausado por até 7 dias (7d). É possível configurar manualmente essa duração máxima de pausa entre 1 hora (1h) e 7 dias (7d).

Somente d (dias) e h (horas) são aceitos. Um dia é definido como 24 horas. Isso pode não corresponder à duração de um dia civil devido a fatores como o horário de verão.

Após a duração máxima da pausa, o job é cancelado e não pode mais ser retomado.

Por exemplo, o exemplo a seguir define a duração máxima da pausa como 1 dia:

Java

--dataflowServiceOptions=pause_on_failure=pause_duration:1d

Python

--dataflow_service_options=pause_on_failure=pause_duration:1d

Go

--dataflow_service_options=pause_on_failure=pause_duration:1d

Pausar manualmente um job do Dataflow

Para pausar um job manualmente, siga estas etapas.

Console

  1. Acesse a página Jobs do Dataflow.

    Acessar "Jobs"

  2. Clique no job que você quer pausar.

    Para pausar um job, o status dele precisa ser em execução.

  3. Na página de detalhes do job, clique em Pausar.

    Se o botão "Pausar" não aparecer, o job não poderá ser pausado devido às limitações da opção "pause-on-failure".

gcloud

Para pausar um job do Dataflow, use o gcloud dataflow jobs comando no Cloud Shell ou em um terminal local instalado com a CLI gcloud.

  1. Abra o shell.

  2. Liste os IDs dos jobs do Dataflow em execução e anote o ID do job que você quer pausar:

    gcloud dataflow jobs list
    

    Se a flag --region não estiver definida, serão exibidos os jobs do Dataflow de todas as regiões disponíveis.

  3. Execute o seguinte:

    gcloud dataflow jobs pause JOB_ID --region=REGION
    

    Substitua JOB_ID pelo ID do job anotado e REGION pela região do job.

API

Para pausar um job usando a API REST do Dataflow, use o projects.locations.jobs.update endpoint e transmita o seguinte corpo da solicitação:

{
  "requestedState": "JOB_STATE_PAUSING"
}

Importante: não transmita JOB_STATE_PAUSED como requestedState por engano.

Cancelar um job do Dataflow em pausa ou pausado

É possível cancelar um job do Dataflow em pausa ou pausado normalmente. Depois de cancelar um job, você não recebe mais cobranças por ele, mas o job não pode mais ser retomado.

Um job pausado é cancelado automaticamente após a expiração da duração máxima da pausa .

Retomar um job do Dataflow

Para retomar manualmente o job pausado, siga estas etapas:

Console

  1. Acesse a página Jobs do Dataflow.

    Acessar "Jobs"

  2. Clique no job que você quer retomar.

    Para retomar um job, o status dele precisa ser pausado (não pausando).

  3. Na página de detalhes do job, clique em Retomar.

gcloud

Para retomar um job do Dataflow, use o gcloud dataflow jobs comando no Cloud Shell ou em um terminal local instalado com a CLI gcloud.

  1. Abra o shell.

  2. Liste os IDs dos jobs do Dataflow pausados e anote o ID do job que você quer retomar:

    gcloud dataflow jobs list
    

    Se a flag --region não estiver definida, serão exibidos os jobs do Dataflow de todas as regiões disponíveis.

  3. Execute o seguinte:

    gcloud dataflow jobs resume JOB_ID --region=REGION
    

    Substitua JOB_ID pelo ID do job e REGION com a região do job.

API

Para retomar um job usando a API REST do Dataflow, use o projects.locations.jobs.update endpoint e transmita o seguinte corpo da solicitação:

{
  "requestedState": "JOB_STATE_RUNNING"
}

A seguir