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:
- O job do Dataflow precisa ser um job em lote.
- O job precisa usar Dataflow shuffle.
- É necessário especificar a opção de serviço
pause_on_failureao executar o job. - O job não pode ter falhado anteriormente ao pausar.
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:
- 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.
- 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
Acesse a página Jobs do Dataflow.
Clique no job que você quer pausar.
Para pausar um job, o status dele precisa ser em execução.
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.
Abra o shell.
Liste os IDs dos jobs do Dataflow em execução e anote o ID do job que você quer pausar:
gcloud dataflow jobs listSe a flag
--regionnão estiver definida, serão exibidos os jobs do Dataflow de todas as regiões disponíveis.Execute o seguinte:
gcloud dataflow jobs pause JOB_ID --region=REGIONSubstitua 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
Acesse a página Jobs do Dataflow.
Clique no job que você quer retomar.
Para retomar um job, o status dele precisa ser pausado (não pausando).
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.
Abra o shell.
Liste os IDs dos jobs do Dataflow pausados e anote o ID do job que você quer retomar:
gcloud dataflow jobs listSe a flag
--regionnão estiver definida, serão exibidos os jobs do Dataflow de todas as regiões disponíveis.Execute o seguinte:
gcloud dataflow jobs resume JOB_ID --region=REGIONSubstitua 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
- Saiba como interromper um pipeline em execução.
- Entenda Dataflow Shuffle para jobs em lote, que é necessário para usar esse recurso.
- Consulte o guia de solução de problemas de pipelines para resolver erros.
- Saiba como resolver problemas de jobs em lote lentos ou travados.