Resolver problemas de contêineres personalizados no Dataflow

Neste documento, fornecemos instruções para solucionar problemas que podem ocorrer ao usar contêineres personalizados com o Dataflow. Ele se concentra em problemas com contêineres ou workers que não são iniciados. Se os workers puderem iniciar e trabalhar no progresso, siga as orientações gerais sobre Como solucionar problemas do pipeline.

Antes de entrar em contato com o suporte, exclua os problemas relacionados à imagem do contêiner:

  • Siga as etapas para testar a imagem do contêiner localmente.
  • Procure erros nos Registros do job ou nos Registros de worker e compare os erros encontrados com a orientação de erro comum.
  • Verifique se as versões do SDK e da linguagem do Apache Beam que você está usando para iniciar o pipeline correspondem à versão do SDK na imagem do contêiner personalizado.
  • Se você estiver usando Java, verifique se a versão principal do Java que você usa para iniciar o pipeline corresponde à versão instalada na imagem do contêiner.
  • Se estiver usando o Python, verifique se as versões principal e secundária do Python usadas para iniciar o pipeline correspondem à versão instalada na imagem do contêiner e se a imagem não tem dependências conflitantes. Execute pip check para confirmar.

Encontrar registros de worker relacionados a contêineres personalizados

Use o Explorador de registros para refinar os registros de worker do Dataflow em mensagens de erro relacionadas a contêineres:

  1. Selecionar nomes de registro Os erros de inicialização de contêiner personalizado têm maior probabilidade de estar em uma das seguintes opções:

    • dataflow.googleapis.com/kubelet
    • dataflow.googleapis.com/docker
    • dataflow.googleapis.com/worker-startup
    • dataflow.googleapis.com/harness-startup
  2. Selecione o recurso Dataflow Step e especifique o job_id.

Se você estiver vendo mensagens de registro Error Syncing pod..., siga as orientações para erros comuns. É possível consultar essas mensagens de registro nos registros de worker do Dataflow usando o Explorador de registros com a seguinte consulta:

resource.type="dataflow_step" AND jsonPayload.message:("IMAGE_URI") AND severity="ERROR"

Problemas comuns

Confira a seguir alguns problemas comuns ao usar contêineres personalizados.

O job tem erros ou falhou porque não é possível extrair a imagem do contêiner

Os workers do Dataflow precisam acessar imagens de contêiner personalizadas. Se o worker não conseguir extrair a imagem devido a URLs inválidos, credenciais configuradas incorretamente ou acesso de rede ausente, o worker não será iniciado.

Para jobs em lote em que nenhum trabalho foi iniciado e vários workers não podem ser iniciados sequencialmente, o Dataflow apresentará falha no job. Caso contrário, o Cloud Dataflow registra erros, mas não toma nenhuma ação adicional para evitar a destruição do estado do job de longa duração.

Para informações sobre como corrigir esse problema, consulte Falha na solicitação de envio de imagem com erro na página "Resolver problemas de erros do Dataflow".

Os trabalhadores não estão iniciando ou o trabalho não está progredindo

Às vezes, se o contêiner do SDK não é iniciado devido a um erro, o Dataflow não consegue determinar se o erro é permanente ou fatal. Em seguida, o Dataflow tenta reiniciar o worker continuamente.

Se não houver erros óbvios, mas você vir registros [topologymanager] RemoveContainer no nível INFO em dataflow.googleapis.com/kubelet, esses registros indicam que a imagem do contêiner personalizado está saindo antecipadamente e não iniciou o processo do SDK do worker de longa duração.

Se os workers foram iniciados com êxito, mas nenhum trabalho está acontecendo, um erro pode estar impedindo que o contêiner do SDK seja iniciado. Nesse caso, o seguinte erro aparece nas recomendações de diagnóstico:

Failed to start container

Além disso, os registros do worker não contêm linhas como as seguintes:

Executing: python -m apache_beam.runners.worker.sdk_worker_main or Executing: java ... FnHarness

Encontre erros específicos nos registros do worker e verifique as orientações comuns de erro.

Estas são algumas das causas mais comuns para esses problemas:

  • Problemas com a instalação de pacotes, como erros de instalação do pip devido a problemas de dependência. Consulte Erro ao sincronizar o pod ... falha ao usar "StartContainer".
  • Se o contêiner usado não for compatível com a arquitetura de CPU da VM de worker, talvez você receba erros como exec format error. Para mais informações, consulte Erro ao sincronizar o pod ... falhou em "StartContainer".
  • Erros com os argumentos de comando personalizados ou com o ENTRYPOINT definido no Dockerfile Por exemplo, um ENTRYPOINT personalizado não inicia o script de inicialização padrão /opt/apache/beam/boot ou não transmite argumentos adequadamente para esse script. Para mais informações, consulte Como modificar o ponto de entrada do contêiner.
  • Erros quando a versão do SDK do Apache Beam é incompatível entre os ambientes de inicialização e de execução. Em um modo de falha, os valores padrão definidos nas opções de pipeline do SDK do Apache Beam podem não ser reconhecidos. Por exemplo, erros como sdk_worker_main.py: error: argument --flink_version: invalid choice: '1.16' (choose from '1.12', '1.13', '1.14', '1.15') podem aparecer nos registros do worker. Para corrigir o problema, instale a mesma versão do SDK do Apache Beam na imagem do contêiner usada para iniciar o pipeline. Para mais informações, consulte Tornar o ambiente de inicialização compatível com o ambiente de execução.