Este documento fornece instruções para resolver problemas que possam ocorrer quando usa contentores personalizados com o Dataflow. Foca-se em problemas com contentores ou trabalhadores que não são iniciados. Se os seus trabalhadores conseguirem iniciar e o trabalho estiver em curso, siga as orientações gerais para resolver problemas da sua pipeline.
Antes de contactar o apoio técnico, certifique-se de que excluiu problemas relacionados com a imagem do contentor:
- Siga os passos para testar a imagem de contentor localmente.
- Pesquise erros nos registos de tarefas ou nos registos de trabalhadores e compare os erros encontrados com as orientações sobre erros comuns.
- Certifique-se de que a versão do SDK do Apache Beam e a versão do idioma que está a usar para iniciar o pipeline correspondem à versão do SDK na imagem do contentor personalizado.
- Se usar Java, certifique-se de que a versão principal do Java que usa para iniciar o pipeline corresponde à versão instalada na imagem do contentor.
- Se usar Python, certifique-se de que a versão principal/secundária do Python que usa para iniciar o pipeline corresponde à versão instalada na imagem do contentor e que a imagem não tem dependências em conflito. Pode executar
pip check
para confirmar.
Encontre registos de trabalhadores relacionados com contentores personalizados
Pode encontrar os registos do trabalhador do Dataflow para mensagens de erro relacionadas com contentores usando o Explorador de registos:
Selecione os nomes dos registos. Os erros de arranque do contentor personalizado têm maior probabilidade de estar num dos seguintes:
dataflow.googleapis.com/kubelet
dataflow.googleapis.com/docker
dataflow.googleapis.com/worker-startup
dataflow.googleapis.com/harness-startup
Selecione o recurso
Dataflow Step
e especifique ojob_id
.
Se estiver a ver Error Syncing pod...
mensagens de registo,
siga as orientações de erro comuns.
Pode consultar estas mensagens de registo nos registos do worker do Dataflow através do Explorador de registos com a seguinte consulta:
resource.type="dataflow_step" AND jsonPayload.message:("IMAGE_URI") AND severity="ERROR"
Problemas comuns
Seguem-se alguns problemas comuns quando usa contentores personalizados.
A tarefa tem erros ou falhou porque não é possível obter a imagem do contentor
Os trabalhadores do Dataflow têm de conseguir aceder a imagens de contentores personalizadas. Se o trabalhador não conseguir obter a imagem devido a URLs inválidos, credenciais configuradas incorretamente ou falta de acesso à rede, o trabalhador não é iniciado.
Para tarefas em lote em que nenhum trabalho foi iniciado e vários trabalhadores não conseguem iniciar sequencialmente, o Dataflow falha a tarefa. Caso contrário, o Dataflow regista erros, mas não toma mais medidas para evitar a destruição do estado de tarefas de longa duração.
Para obter informações sobre como corrigir este problema, consulte o artigo O pedido de obtenção de imagens falhou com o erro na página Resolva problemas de erros do Dataflow.
Os trabalhadores não estão a começar ou o trabalho não está a progredir
Por vezes, se o contentor do SDK não for iniciado devido a um erro, o Dataflow não consegue determinar se o erro é permanente ou fatal. Em seguida, o Dataflow tenta reiniciar continuamente o trabalhador.
Se não existirem erros óbvios, mas vir registos ao nível [topologymanager] RemoveContainer
INFO
em dataflow.googleapis.com/kubelet
, estes registos indicam que a imagem do contentor personalizado está a terminar prematuramente e não iniciou o processo do SDK de trabalho de execução prolongada.
Se os trabalhadores tiverem sido iniciados com êxito, mas não estiver a ser realizado nenhum trabalho, pode existir um erro que esteja a impedir o início do contentor do SDK. Neste caso, é apresentado o seguinte erro nas recomendações de diagnóstico:
Failed to start container
Além disso, os registos do trabalhador 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 registos do trabalhador e verifique as orientações sobre erros comuns.
As causas comuns destes problemas incluem o seguinte:
- Problemas com a instalação de pacotes, como erros de instalação do
pip
devido a problemas de dependência. Consulte o artigo Erro ao sincronizar o pod… falha ao "StartContainer". - Se o contentor usado não for compatível com a arquitetura da CPU da VM de trabalho,
podem ser apresentados erros como
exec format error
. Para mais informações, consulte o artigo Erro ao sincronizar o pod… falha ao "StartContainer". - Erros com os argumentos do comando personalizado ou com o
ENTRYPOINT
definido no Dockerfile. Por exemplo, umENTRYPOINT
personalizado não inicia o script de arranque/opt/apache/beam/boot
predefinido ou não transmite argumentos adequadamente a este script. Para mais informações, consulte o artigo Modificar o ponto de entrada do contentor. - Erros quando a versão do SDK do Apache Beam não corresponde entre o ambiente de lançamento e o ambiente de tempo de execução. Num modo de falha, os valores predefinidos definidos nas opções da pipeline do SDK do Apache Beam podem não ser reconhecidos.
Por exemplo, pode ver erros como
sdk_worker_main.py: error: argument --flink_version: invalid choice: '1.16' (choose from '1.12', '1.13', '1.14', '1.15')
nos registos do trabalhador. Para corrigir, instale a mesma versão do SDK do Apache Beam na imagem do contentor que usa para iniciar o pipeline. Para mais informações, consulte o artigo Torne o ambiente de lançamento compatível com o ambiente de tempo de execução.
Não é possível configurar o contentor para ser executado como um utilizador personalizado
O utilizador para a execução do contentor é selecionado pelo serviço Dataflow. Para mais informações, consulte o artigo Ambiente de tempo de execução.