Usar o Dataflow Portable Runner

Quando você usa o Dataflow para executar o pipeline, o executor do Dataflow faz o upload do código e dependências do pipeline para um bucket do Cloud Storage e cria um job do Dataflow. Esse job do Dataflow executa o pipeline em recursos gerenciados no Google Cloud.

  • Nos pipelines em lote que usam o SDK do Apache Beam para Java versão 2.54.0 ou posterior, o Portable Runner é ativado por padrão.
  • Para pipelines que usam o SDK do Apache Beam para Java, o Portable Runner é necessário ao executar pipelines de várias linguagens, usar contêineres personalizados ou usar pipelines de fluxo de alterações do Spanner ou do Bigtable. Para pipelines de streaming Java de grande escala, use o Streaming Java (padrão) Runner.
  • Para pipelines que usam o SDK do Apache Beam para Python versão 2.21.0 ou posterior, o Portable Runner é ativado por padrão. Para pipelines que usam as versões 2.45.0 e posteriores do SDK do Apache Beam para Python, o Dataflow Portable Runner é o único executor do Dataflow disponível.
  • No SDK do Apache Beam para Go, o Portable Runner é o único executor do Dataflow disponível.

O Portable Runner usa uma arquitetura baseada em serviços que beneficia muitos pipelines:

Limitações e restrições

O Dataflow Portable Runner tem os seguintes requisitos e limitações:

  • Recursos somente para portáteis:os recursos a seguir só são compatíveis com o Portable Runner:
    • Transformações gerenciadas e RunInference em Java.
    • Contêineres personalizados.
    • VMs de worker baseadas em ARM.
    • Splittable DoFns. Estamos analisando a possibilidade de oferecer suporte ao executor não portátil.
  • O Dataflow Portable Runner requer o Streaming Engine para jobs de streaming.
  • Como o Dataflow Portable Runner requer o Streaming Engine para jobs de streaming, qualquer transformação do Apache Beam que exija o Dataflow Portable Runner também precisa usar o Streaming Engine para jobs de streaming. Por exemplo, o conector de E/S do Pub/Sub Lite do SDK do Apache Beam para Python é uma transformação de linguagem que requer o Dataflow Portable Runner. Se você tentar desativar o Streaming Engine para um job ou modelo que usa essa transformação, o job vai falhar.
  • Para pipelines de streaming que usam o SDK do Apache Beam para Java, as classes MapState e SetState não são compatíveis com o Portable Runner. Para usar as classes MapState e SetState com pipelines Java, ative o Streaming Engine, desative o Portable Runner e use a versão 2.58.0 ou mais recente do SDK do Apache Beam.
  • Para pipelines em lote e de streaming que usam o SDK do Apache Beam para Java, a classe AfterSynchronizedProcessingTime não é compatível.
  • Embora o Portable Runner seja melhor que o Non-Portable Runner em muitos casos, o uso de memória pode ser maior para o sharding fixo.
  • Os modelos clássicos do Dataflow não podem ser executados com uma versão diferente do executor do Dataflow daquela com que foram criados. Isso significa que os modelos clássicos fornecidos pelo Google não podem ativar o Portable Runner. Para ativar o Portable Runner em modelos personalizados, defina a flag apropriada ao criar o modelo. Essa flag depende da versão do SDK que você está usando:
    • Versões 2.74 e mais recentes do SDK do Beam: --experiments=enable_portable_runner.
    • Versões 2.73 e anteriores do SDK do Beam: --experiments=use_runner_v2.
  • Devido a um problema conhecido de escalonamento automático, o Portable Runner é desativado por padrão para pipelines Java em lote que exigem processamento com estado. Você ainda pode ativar o Portable Runner para esses pipelines (consulte Ativar o Portable Runner), mas o desempenho do pipeline pode ser muito prejudicado.

  • Em alguns pipelines, o Portable Runner pode aumentar a frequência de falhas de consistência. Talvez você veja o seguinte erro nos arquivos de registro: "Internal consistency check failed, the output is likely incorrect. Tente novamente o job". Uma possível mitigação é adicionar uma transformação Reshuffle após a etapa Join/GrouByKey. Se a taxa de falha não for tolerável e a mitigação não resolver o problema, tente desativar o Portable Runner.

Ativar o Portable Runner

Para ativar o Dataflow Portable Runner, siga as instruções de configuração para seu SDK do Apache Beam.

Java

O Dataflow Portable Runner requer as versões 2.30.0 ou posteriores do SDK do Apache Beam para Java, sendo recomendada a versão 2.44.0 ou posterior.

Nos pipelines em lote que usam o SDK do Apache Beam para Java versão 2.54.0 ou posterior, o Portable Runner é ativado por padrão.

Para ativar o Portable Runner, execute o job com o valor do experimento que corresponde à versão do SDK do Beam e ao tipo de pipeline:

  • Versões 2.74 e mais recentes do SDK do Beam: enable_portable_runner (em lote) ou enable_streaming_java_runner (streaming).
  • Versões 2.73 e anteriores do SDK do Beam: use_runner_v2.

Para mais informações, consulte Definir opções de pipeline experimentais.

Python

Para pipelines que usam o SDK do Apache Beam para Python versão 2.21.0 ou posterior, o Portable Runner é ativado por padrão.

O Portable Runner do Dataflow não é compatível com o SDK do Apache Beam para Python versão 2.20.0 e anteriores.

Em alguns casos, talvez o pipeline não use o Portable Runner, mesmo que ele seja executado em uma versão compatível do SDK. Para executar o job com o Portable Runner, defina o valor do experimento que corresponde à versão do SDK do Beam:

  • Versões 2.74 e mais recentes do SDK do Beam: enable_portable_runner.
  • Versões 2.73 e anteriores do SDK do Beam: use_runner_v2.

Para mais informações, consulte Definir opções de pipeline experimentais.

Go

O Dataflow Portable Runner é o único executor do Dataflow disponível para o SDK do Apache Beam para Go. Ele é ativado por padrão.

Desativar o Portable Runner

Para desativar o Dataflow Portable Runner, siga as instruções de configuração para seu SDK do Apache Beam.

Java

Para desativar o Portable Runner, defina o valor do experimento que corresponde à versão do SDK do Beam:

  • Versões 2.74 e mais recentes do SDK do Beam: disable_portable_runner.
  • Versões 2.73 e anteriores do SDK do Beam: disable_runner_v2.

Isso vai definir o job como o executor não portátil (executor Java de streaming para streaming). Para mais informações, consulte Definir opções experimentais de pipeline.

Python

A desativação do Portable Runner não é compatível com o SDK do Apache Beam para Python versão 2.45.0 e posterior.

Para versões anteriores do SDK do Python, se o job for identificado como usando o experimento auto_runner_v2, desative o Portable Runner definindo o experimento disable_runner_v2. Para mais informações, consulte Definir opções experimentais de pipeline.

Go

Não é possível desativar o Portable Runner do Dataflow em Go. Ele é o único executor do Dataflow disponível para o SDK do Apache Beam para Go.

Monitorar o job

Use a interface de monitoramento para visualizar as métricas do job do Dataflow, como a utilização da memória, da CPU e muito mais.

Os registros da VM de worker estão disponíveis na Análise de registros e na interface de monitoramento do Dataflow. Os registros da VM de worker incluem registros do processo do arcabouço de execução do executor e registros dos processos do SDK. Use os registros da VM para solucionar problemas do job.

Resolver problemas do Portable Runner

Para solucionar problemas de jobs usando o Dataflow Portable Runner, siga as etapas padrão de solução de problemas do pipeline. A lista a seguir fornece informações adicionais sobre como o executor portátil do Dataflow funciona:

  • Os jobs que usam o Dataflow Portable Runner executam dois tipos de processos na VM de worker: o processo de SDK e o de aproveitamento do executor. Dependendo do pipeline e do tipo de VM, pode haver um ou mais processos de SDK, mas há apenas um processo de aproveitamento do executor por VM.
  • Os processos do SDK executam o código do usuário e outras funções específicas da linguagem.O processo de proteção do executor gerencia todo o restante.
  • O processo de aproveitamento do executor aguarda que todos os processos de SDK se conectem a ele antes de começar a solicitar trabalho do Dataflow.
  • Os jobs podem atrasar se a VM de worker fizer o download e instalar dependências durante a inicialização do processo do SDK. Se ocorrerem problemas durante um processo de SDK, como ao iniciar ou instalar bibliotecas, o worker informará o status como não íntegro. Se os tempos de inicialização aumentarem, ative a API Cloud Build no projeto e envie o pipeline com o seguinte parâmetro: --prebuild_sdk_container_engine=cloud_build.
  • Como o Dataflow Portable Runner usa checkpoint, cada worker pode aguardar até cinco segundos enquanto armazena as alterações em buffer antes de enviá-las para processamento adicional. Como resultado, é esperada uma latência de aproximadamente seis segundos.
  • Para diagnosticar problemas no seu código de usuário, examine os registros do worker dos processos do SDK. Se você encontrar erros nos registros da proteção do executor, entre em contato com o suporte para registrar um bug.
  • Para depurar erros comuns relacionados aos pipelines de várias linguagens do Dataflow, consulte o guia Dicas de pipelines em várias linguagens.