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:
O Dataflow Portable Runner permite pré-criar seu contêiner do Python, o que pode melhorar os tempos de inicialização da VM e o desempenho do escalonamento automático horizontal. Para mais informações, consulte Dependências do Python pré-criadas.
O Dataflow Portable Runner é compatível com pipelines em vários idiomas, um recurso que permite que o pipeline do Apache Beam use transformações definidas em outros SDKs do Apache Beam. O Dataflow Portable Runner é compatível com o uso de transformações Java de um pipeline do SDK do Python e com o uso de transformações do Python de um pipeline do SDK do Java. Quando você executa pipelines do Apache Beam sem o Portable Runner, o executor do Dataflow usa workers específicos da linguagem.
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
RunInferenceem 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.
- Transformações gerenciadas e
- 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
MapStateeSetStatenão são compatíveis com o Portable Runner. Para usar as classesMapStateeSetStatecom 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
AfterSynchronizedProcessingTimenã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.
- Versões 2.74 e mais recentes do SDK do Beam:
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
Reshuffleapós a etapaJoin/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) ouenable_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.