Usa el ejecutor portátil de Dataflow

Cuando usas Dataflow para ejecutar la canalización, su ejecutor sube el código y las dependencias de la canalización a un bucket de Cloud Storage y crea un trabajo de Dataflow. Este trabajo de Dataflow ejecuta la canalización en recursos administrados en Google Cloud.

  • Para las canalizaciones por lotes que usan las versiones 2.54.0 o posteriores del SDK de Java de Apache Beam, Portable Runner está habilitado de forma predeterminada.
  • Para las canalizaciones que usan el SDK de Java de Apache Beam, se requiere Portable Runner cuando se ejecutan canalizaciones de varios lenguajes, cuando se usan contenedores personalizados o cuando se usan canalizaciones de flujo de cambios de Spanner o Bigtable. Para las canalizaciones de transmisión de Java a gran escala, usa Streaming Java Runner (predeterminado).
  • Para las canalizaciones que usan las versiones 2.21.0 o posteriores del SDK de Apache Beam para Python, Portable Runner está habilitado de forma predeterminada. Para las canalizaciones que usan las versiones 2.45.0 y posteriores del SDK de Apache Beam para Python, Dataflow Portable Runner es el único ejecutor de Dataflow disponible.
  • En el SDK de Apache Beam para Go, Portable Runner es el único ejecutor de Dataflow disponible.

Portable Runner usa una arquitectura basada en servicios que beneficia muchas canalizaciones:

Recomendaciones de uso

A menos que tu canalización se vea afectada por uno de los límites que se describen en este documento, usa las siguientes instrucciones para seleccionar el ejecutor adecuado según los requisitos de tu canalización:

Selecciona Portable Runner para:

  • Todas las canalizaciones por lotes
  • Canalizaciones de transmisión que usan el SDK de Apache Beam para Python o el SDK de Apache Beam para Go
  • Canalizaciones de transmisión que requieren compatibilidad con GPU para el procesamiento de aprendizaje automático
  • Canalizaciones que usan cualquiera de las funciones exclusivas de Portable Runner.

Selecciona Streaming Java Runner para:

  • Canalizaciones de transmisión que usan el SDK de Java de Apache Beam

Limitaciones y restricciones

Dataflow Portable Runner tiene los siguientes requisitos y limitaciones:

  • Funciones exclusivas de Portable Runner: Las siguientes funciones solo son compatibles con Portable Runner:
    • Transformaciones administradas y RunInference en Java.
    • Contenedores personalizados
    • VMs de trabajador basadas en ARM
    • Splittable DoFns (se está explorando la compatibilidad con Non-Portable Runner)
  • Dataflow Portable Runner requiere Streaming Engine para los trabajos de transmisión.
  • Debido a que Dataflow Portable Runner requiere Streaming Engine para los trabajos de transmisión, cualquier transformación de Apache Beam que requiera Dataflow Portable Runner también requiere el uso de Streaming Engine para los trabajos de transmisión. Por ejemplo, el conector de E/S de Pub/Sub Lite para el SDK de Apache Beam para Python es una transformación de varios lenguajes que requiere Dataflow Portable Runner. Si intentas inhabilitar Streaming Engine para un trabajo o una plantilla que usa esta transformación, el trabajo fallará.
  • En las canalizaciones de transmisión que usan el SDK de Java de Apache Beam, no se admiten las clases MapState y SetState con Portable Runner. Para usar las clases MapState y SetState con canalizaciones de Java, habilita Streaming Engine, inhabilita Portable Runner y usa la versión 2.58.0 o posterior del SDK de Apache Beam.
  • En las canalizaciones por lotes y de transmisión que usan el SDK de Java de Apache Beam, no se admite la clase AfterSynchronizedProcessingTime.
  • Si bien Portable Runner se ajusta mejor que Non-Portable Runner en muchos casos, el uso de memoria puede ser mayor para la fragmentación fija.
  • Las plantillas clásicas de Dataflow no se pueden ejecutar con una versión diferente del ejecutor de Dataflow con la que se compilaron. Esto significa que las plantillas clásicas proporcionadas por Google no pueden habilitar Portable Runner. Para habilitar Portable Runner para plantillas personalizadas, establece la marca adecuada cuando compiles la plantilla. Esta marca depende de la versión del SDK que uses:
    • Versiones 2.74 y posteriores del SDK de Beam: --experiments=enable_portable_runner.
    • Versiones 2.73 y anteriores del SDK de Beam: --experiments=use_runner_v2.
  • Debido a un problema conocido de ajuste de escala automático, Portable Runner está inhabilitado de forma predeterminada para las canalizaciones de Java por lotes que requieren procesamiento con estado. Aun así, puedes habilitar Portable Runner para esas canalizaciones (consulta Habilita Portable Runner), pero el rendimiento de la canalización puede verse muy afectado.

  • En algunas canalizaciones, Portable Runner puede aumentar la frecuencia de las fallas de coherencia. Es posible que veas el siguiente error en los archivos de registro: "Internal consistency check failed, the output is likely incorrect. Please retry the job". Una posible mitigación es agregar una transformación Reshuffle después del paso Join/GroupByKey. Si la tasa de fallas no es tolerable y la mitigación no resuelve el problema, intenta inhabilitar Portable Runner.

Habilita Portable Runner

Para habilitar Dataflow Portable Runner, sigue las instrucciones de configuración del SDK de Apache Beam.

Java

Dataflow Portable Runner requiere las versiones 2.30.0 o posteriores del SDK de Java de Apache Beam, aunque se recomienda usar la versión 2.44.0 o una posterior.

Para las canalizaciones por lotes que usan las versiones 2.54.0 o posteriores del SDK de Java de Apache Beam, Portable Runner está habilitado de forma predeterminada.

Para habilitar Portable Runner, ejecuta tu trabajo con el valor de experimento que corresponde a tu versión del SDK de Beam y al tipo de canalización:

  • Versiones 2.74 y posteriores del SDK de Beam: enable_portable_runner.
  • Versiones 2.73 y anteriores del SDK de Beam: use_runner_v2.

Para obtener más información, consulta Configura las opciones de canalización experimental.

Python

Para las canalizaciones que usan las versiones 2.21.0 o posteriores del SDK de Apache Beam para Python, Portable Runner está habilitado de forma predeterminada.

Dataflow Portable Runner no es compatible con las versiones 2.20.0 y anteriores del SDK de Apache Beam para Python.

En algunos casos, tu canalización podría no usar Portable Runner, incluso si la canalización se ejecuta en una versión del SDK compatible. Para ejecutar el trabajo con Portable Runner, establece el valor de experimento que corresponde a tu versión del SDK de Beam:

  • Versiones 2.74 y posteriores del SDK de Beam: enable_portable_runner.
  • Versiones 2.73 y anteriores del SDK de Beam: use_runner_v2.

Para obtener más información, consulta Configura las opciones de canalización experimental.

Go

Dataflow Portable Runner es el único ejecutor de Dataflow disponible para el SDK de Apache Beam para Go. Portable Runner está habilitado de forma predeterminada.

Inhabilita Portable Runner

Para inhabilitar Dataflow Portable Runner, sigue las instrucciones de configuración del SDK de Apache Beam.

Java

Para inhabilitar Portable Runner, establece el valor de experimento que corresponde a tu versión del SDK de Beam:

  • Versiones 2.74 y posteriores del SDK de Beam:
    • Para lotes, usa disable_portable_runner.
    • Para transmisión, usa enable_streaming_java_runner.
  • Versiones 2.73 y anteriores del SDK de Beam: disable_runner_v2.

Esto establecerá el trabajo de forma predeterminada en Non-Portable Runner o en Streaming Java Runner para la transmisión. Para obtener más información, consulta Configura las opciones de canalización experimental.

Python

Inhabilitar Portable Runner no es compatible con las versiones 2.45.0 y posteriores del SDK de Apache Beam para Python.

Para versiones anteriores del SDK de Python, si se identifica que tu trabajo usa el experimento auto_runner_v2, puedes inhabilitar Portable Runner si estableces el experimento disable_runner_v2. Para obtener más información, consulta Configura las opciones de canalización experimental.

Go

Dataflow Portable Runner no se puede inhabilitar en Go. Portable Runner es el único ejecutor de Dataflow disponible para el SDK de Apache Beam para Go.

Supervisa tu trabajo

Usa la interfaz de supervisión para ver las métricas de los trabajos de Dataflow, como el uso de memoria, el uso de CPU y mucho más.

Los registros de VM de trabajador están disponibles a través del Explorador de registros y la interfaz de supervisión de Dataflow. Los registros de las VM de trabajador incluyen registros del proceso de aprovechamiento del ejecutor y de los procesos del SDK. Puedes usar los registros de VM para solucionar problemas de tu trabajo.

Soluciona problemas de Portable Runner

Para solucionar problemas de trabajos con Dataflow Portable Runner, sigue los pasos para solucionar problemas de canalizaciones estándar. En la siguiente lista, se proporciona información adicional sobre cómo funciona Dataflow Portable Runner:

  • Los trabajos de Dataflow Portable Runner ejecutan dos tipos de procesos en la VM de trabajador: el proceso del SDK y el proceso de aprovechamiento del ejecutor. Puede haber uno o más procesos del SDK, según la canalización y el tipo de VM, pero solo hay un proceso de aprovechamiento del ejecutor por VM.
  • Los procesos del SDK ejecutan el código de usuario y otras funciones específicas del lenguaje. El proceso de aprovechamiento del ejecutor administra todo lo demás.
  • El proceso de aprovechamiento del ejecutor espera a que todos los procesos del SDK se conecten a él antes de comenzar a solicitar trabajo de Dataflow.
  • Es posible que los trabajos se retrasen si la VM de trabajador instala y descarga dependencias durante el inicio del proceso del SDK. Si se producen problemas durante un proceso del SDK, como cuando se inician o instalan bibliotecas, el trabajador informa que está en mal estado. Si aumentan los tiempos de inicio, habilita la API de Cloud Build en tu proyecto y envía tu canalización con el siguiente parámetro: --prebuild_sdk_container_engine=cloud_build.
  • Debido a que Dataflow Portable Runner usa puntos de control, cada trabajador puede esperar hasta cinco segundos mientras almacena los cambios en búfer antes de enviar los cambios para su procesamiento posterior. Como resultado, se espera una latencia de aproximadamente seis segundos.