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:
Dataflow Portable Runner te permite compilar previamente tu contenedor de Python, lo que puede mejorar los tiempos de inicio de la VM y el rendimiento del ajuste de escala automático horizontal. Para obtener más información, consulta Compila dependencias de Python de forma previa.
Dataflow Portable Runner admite canalizaciones de varios lenguajes, un atributo que permite que tu canalización de Apache Beam use transformaciones definidas en otros SDK de Apache Beam. Dataflow Portable Runner admite el uso de transformaciones de Java desde una canalización del SDK de Python y el uso de transformaciones de Python desde una canalización del SDK de Java. Cuando ejecutas las canalizaciones de Apache Beam sin Portable Runner, el ejecutor de Dataflow usa trabajadores específicos del lenguaje.
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
RunInferenceen Java. - Contenedores personalizados
- VMs de trabajador basadas en ARM
- Splittable DoFns (se está explorando la compatibilidad con Non-Portable Runner)
- Transformaciones administradas y
- 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
MapStateySetStatecon Portable Runner. Para usar las clasesMapStateySetStatecon 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.
- Versiones 2.74 y posteriores del SDK de Beam:
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
Reshuffledespués del pasoJoin/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.
- Para lotes, usa
- 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.
- Para diagnosticar problemas en tu código de usuario, examina los registros de trabajador de los procesos del SDK. Si encuentras errores en los registros del aprovechamiento del ejecutor, comunícate con el equipo de asistencia para informar un error.
- Para depurar errores comunes relacionados con las canalizaciones de varios lenguajes de Dataflow, consulta la guía Sugerencias para canalizaciones de varios lenguajes.