Usa las estadísticas de Dataflow

Puedes usar Dataflow Insights para optimizar el rendimiento del trabajo. En este tema, se demuestra cómo interactuar con Dataflow Insights mediante gcloud o la API de REST. También puedes revisar Insights en la Consola de Dataflow. Para obtener más información sobre la revisión de estadísticas en la Consola, consulta Recomendaciones.

Descripción general

Dataflow Insights proporciona estadísticas sobre cómo mejorar el rendimiento del trabajo, reducir los costos y solucionar errores. Dataflow Insights forma parte del servicio de recomendador y está disponible a través del tipo google.dataflow.diagnostics.Insight.

Cuando trabajes con Dataflow Insights, ten en cuenta que algunas recomendaciones pueden no ser relevantes para tu caso de uso.

Antes de comenzar

Antes de comenzar a usar Dataflow Insights, debes completar los siguientes pasos.

  1. Habilita la API del Recomendador.
  2. Asegúrate de que tu cuenta tenga los siguientes permisos:

    • recommender.dataflowDiagnosticsInsights.get
    • recommender.dataflowDiagnosticsInsights.list
    • recommender.dataflowDiagnosticsInsights.update

    Puedes otorgar estos permisos de forma individual o puedes otorgar uno de los siguientes roles:

    • roles/recommender.dataflowDiagnosticsViewer
    • roles/recommender.dataflowDiagnosticsAdmin
    • roles/dataflow.viewer
    • roles/dataflow.developer
    • roles/dataflow.admin

Solicita estadísticas de Dataflow

Puedes ver una lista de las estadísticas de Dataflow como se muestra a continuación. Para otros tipos de interacciones de estadísticas, consulta la guía de estadísticas de la API del recomendador.

Enumera estadísticas de Dataflow

Para enumerar todas las estadísticas de Dataflow del proyecto en una región determinada, usa uno de los siguientes métodos:

gcloud

Puedes usar el comando gcloud recommender insights list para ver todas las estadísticas de Dataflow de tu proyecto en una región específica.

Antes de ejecutar el comando, reemplaza los siguientes valores:

  • PROJECT_ID: el ID del proyecto para el que deseas enumerar las estadísticas.
  • REGION: la región en la que se ejecutan tus trabajos de Dataflow. Por ejemplo: us-west1.
gcloud recommender insights list --insight-type=google.dataflow.diagnostics.Insight \
  --project=PROJECT_ID \
  --location=REGION

En el resultado, se enumeran todas las estadísticas de Dataflow para tu proyecto en la región especificada.

REST

Puedes usar el método insights.list de la API de recomendador a fin de enumerar todas las estadísticas de Dataflow para tu proyecto en una región específica.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: el ID del proyecto para el que deseas enumerar las estadísticas.
  • REGION: la región en la que se ejecutan tus trabajos de Dataflow. Por ejemplo: us-west1.

Método HTTP y URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights

Para enviar tu solicitud con curl (Linux, macOS o Cloud Shell), ejecuta el siguiente comando:

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights"

Obtén una sola estadística de Dataflow

Para obtener más información sobre una sola estadística, incluida la descripción, el estado y las recomendaciones asociadas, usa uno de los siguientes métodos:

gcloud

Usa el comando gcloud recommender insights describe con el ID de estadística para ver información sobre una sola estadística. Antes de ejecutar el comando, reemplaza los siguientes valores:

  • INSIGHT_ID: El ID de la estadística que deseas ver.
  • PROJECT_ID: el ID del proyecto para el que deseas enumerar las estadísticas.
  • REGION: la región en la que se ejecutan tus trabajos de Dataflow. Por ejemplo: us-west1.
gcloud recommender insights describe INSIGHT_ID \
  --insight-type=google.dataflow.diagnostics.Insight \
  --project=PROJECT_ID \
  --location=REGION

En el resultado, se muestra la estadística en detalle.

REST

Con el método insights.get de la API de recomendador, se obtiene una sola estadística. Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: el ID del proyecto para el que deseas enumerar las estadísticas.
  • REGION: la región en la que se ejecutan tus trabajos de Dataflow. Por ejemplo: us-west1.
  • INSIGHT_ID: El ID de la estadística que deseas ver.

Método HTTP y URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID

Para enviar tu solicitud con curl (Linux, macOS o Cloud Shell), ejecuta el siguiente comando:

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID"

Interpreta las estadísticas de Dataflow

Después de obtener una estadística, puedes revisar su contenido para comprender el patrón de uso de recursos que destaca. Además de los atributos de estadísticas estándar, Dataflow Insights proporciona los siguientes subtipos:

  • AUTOSCALING_NOT_ENABLED: se puede habilitar el ajuste de escala automático. El trabajo tiene un uso de CPU elevado y utiliza la cantidad máxima de trabajadores establecidos. Habilitar el ajuste de escala automático podría mejorar el rendimiento.
  • HIGH_FAN_OUT: se puede insertar una pausa de fusión después de una o más transformaciones para aumentar el paralelismo.
  • MAX_NUM_WORKERS: Ajuste de escala automático: se puede aumentar la cantidad máxima de trabajadores. El trabajo usa el ajuste de escala automático, tiene un uso de CPU elevado y usa la cantidad máxima de trabajadores establecidos. Aumentar la cantidad máxima de trabajadores podría mejorar el rendimiento.
  • WORKER_OUT_OF_MEMORY: Algunos de los trabajadores del trabajo fallaron debido a la falta de memoria, lo que podría ralentizar el trabajo o hacer que se produzcan errores.
  • PREBUILD_NOT_UTILIZED: Usa el flujo de trabajo de compilación previa de la imagen de trabajador para mejorar el tiempo de inicio de los trabajadores y la confiabilidad del ajuste de escala automático.
  • ACTIVE_KEYS (vista previa): la cantidad total de claves activas es menor que la cantidad total de núcleos y no escala verticalmente.
  • LONG_WORK_ITEM: el trabajo en una etapa fusionada está tardando demasiado en procesarse, lo que indica una operación de ejecución lenta o atascada.

Para obtener más información sobre cómo mitigar los problemas identificados por las estadísticas de Dataflow, consulta Estadísticas.

Dataflow Insights también proporciona un campo content especial que contiene subcampos con información y metadatos adicionales sobre una estadística. Según tu caso de uso, los siguientes subcampos content pueden ser útiles:

  • jobName: es el nombre del trabajo de Dataflow.
  • description: es una descripción de la estadística en inglés.
  • title: es el título de la estadística en inglés.

Insights

Se detectó un fan-out alto

Cuando Dataflow detecta que un trabajo tiene una o más transformaciones con un fan-out alto, aparece el siguiente mensaje:

High fan-out detected

Este mensaje se muestra cuando un ParDo que tiene una alta proporción de recuento de elementos de salida a entrada se fusiona con un ParDo posterior. En esta situación, el segundo ParDo se ejecuta de forma secuencial con el primero, lo que fuerza a todos los elementos de salida de una entrada determinada al mismo trabajador y reduce el paralelismo y ralentiza el rendimiento.

Para solucionar este problema, sigue estos pasos:

  • Inserta un GroupByKey y desagrupa después de tu primer ParDo. El servicio de Dataflow nunca fusiona las operaciones en una agregación. Para obtener más información, consulta Optimización de fusiones.
  • Pasa la PCollection intermedia como una entrada complementaria a otro ParDo. El servicio de Dataflow siempre materializa las entradas complementarias.
  • Inserta un paso de redistribución. La redistribución evita la fusión, controla los datos y vuelve a configurar la estrategia del sistema de ventanas para que no se descarten los datos. Dataflow admite que se vuelva a reproducir de forma aleatoria, aunque está marcada como obsoleta en la documentación de Apache Beam (ten en cuenta que la reorganización de datos puede aumentar el costo de ejecución de la canalización).

Ajuste de escala automático: Se puede aumentar la cantidad máxima de trabajadores

Cuando Dataflow detecte que un trabajo usa la cantidad máxima permitida de trabajadores, maxNumWorkers (o max_num_workers), y que el trabajo puede usar más trabajadores si este máximo se aumenta, aparece el siguiente mensaje:

maximum number of workers could be increased

Por ejemplo, esta recomendación se aplica para un trabajo por lotes o de transmisión que tiene maxNumWorkers configurado en 50 cuando los 50 trabajadores se utilizan con un uso de CPU promedio del trabajador por encima del 80%. Esta recomendación también se aplica a los trabajos de transmisión que tienen maxNumWorkers configurado en 50 cuando los 50 trabajadores se utilizan con un uso de CPU promedio del trabajador superior al 50% y el trabajo tiene un tiempo de procesamiento estimado de más de 2 minutos.

Por lo general, aumentar maxNumWorkers aumenta la capacidad de procesamiento de la canalización. Una canalización por lotes podría completarse en menos tiempo, y una canalización de transmisión podría manejar aumentos más grandes en los datos y procesar más elementos por segundo. Sin embargo, esto podría aumentar el costo. Para obtener más información, consulta Precios de recursos de trabajadores. Para obtener detalles sobre cómo funciona el algoritmo de ajuste de escala automático y cómo configurarlo, consulta la Guía de ajuste de escala automático.

Para solucionar este problema, sigue estos pasos:

  • Aumenta o quita la opción de canalización maxNumWorkers. Sin la opción, Dataflow usa los valores predeterminados que aparecen en la guía de ajuste de escala automático.
  • No hay problema si no se hace nada si el rendimiento de la canalización es adecuado.
    • Para las canalizaciones por lotes, verifica que el tiempo de ejecución total cumpla con tus requisitos.
    • Para las canalizaciones de transmisión, verifica el gráfico Actualización de datos en la pestaña Métricas del trabajo de la página del trabajo. Verifica que los valores del gráfico no aumenten de forma continua y que estén dentro de los límites aceptables.

Ajuste de escala automático: configurar la cantidad inicial de trabajadores podría mejorar el rendimiento del trabajo

Cuando Dataflow detecta que un trabajo usa una cierta cantidad de trabajadores durante más del 50% del tiempo de ejecución, establecer la cantidad inicial de trabajadores en el valor recomendado podría mejorar el rendimiento del trabajo a través de la reducción del tiempo de ejecución para los trabajos por lotes o evitar que las tareas pendientes crezcan cuando se actualice un trabajo de transmisión.

Los trabajadores fallan con errores OutOfMemory

Cuando Dataflow detecta que los trabajadores de un trabajo fallan debido a errores por memoria insuficiente, aparecerá el siguiente mensaje:

Some workers are out of memory

Algunos trabajadores del trabajo fallaron debido a que no hay memoria. Aunque es posible que el trabajo finalice, también es posible que estos errores impidan que el trabajo se complete de forma correcta o retrase el rendimiento.

Prueba las siguientes sugerencias:

Flujo de trabajo de compilación previa no utilizado

Cuando Dataflow detecta una canalización en la que no se usa el flujo de trabajo de compilación previa de la imagen del trabajador, aparece el siguiente mensaje:

pre-build workflow not utilized

Cuando no se usa el flujo de trabajo de compilación previa de la imagen del trabajador, la canalización tiene dependencias que se instalan de forma repetitiva en el entorno de ejecución. Esta configuración ralentiza el tiempo de inicio del trabajador, lo que degrada la capacidad de procesamiento del trabajo y provoca un comportamiento de ajuste de escala automático poco confiable.

Para resolver este problema, usa el flujo de trabajo de compilación previa de imágenes de trabajador cuando inicies la canalización. Para obtener más información, consulta Compila dependencias de Python de forma previa.

Si ya hay un contenedor personalizado compilado previamente, para evitar instalaciones innecesarias, agrega la opción “--sdk_location=container” y quita las siguientes opciones:

  • "--setup_file"
  • "--requirements_file"
  • "--extra_package(s)"

Las claves activas son bajas

Cuando Dataflow detecta que un trabajo se retrasa porque la cantidad de claves activas es menor que la cantidad total de núcleos y no escala verticalmente, aparecerá el siguiente mensaje:

Active keys can be increased

Para ejecutar código de usuario en los trabajos, Dataflow usa trabajadores. Cada subproceso se asigna a una clave que es responsable de procesar un conjunto de datos y una clave solo se puede ejecutar en un núcleo a la vez por razones de precisión.

En algunos casos, algunos núcleos están sobrecargados y otros están inactivos. Para resolver este problema, aumenta la cantidad de claves, lo que también aumenta la cantidad de subprocesos activos.

Posibles Soluciones para aumentar las claves: - puedes aumentar la cantidad de claves con un tipo de clave más específico. Por ejemplo, si el tipo de clave es IP address, hay menos claves disponibles. Sin embargo, si cambias el tipo de clave a IP + [user identifier], hay más claves disponibles, lo que aumenta el paralelismo. - Para las canalizaciones que escriben en BigQuery en las que los receptores podrían ser el cuello de botella, consulta este artículo. - Para otras fuentes o receptores, verifica si tiene un parámetro numShards y auméntalo. En general, un fragmento se asigna a una clave. - Para obtener una orientación más general sobre nuestro modelo de ejecución, consulta este artículo. - El fanout se puede usar para tomar una sola clave de entrada y agregarle un hash a fin de producir varias claves de salida. Reference

La etapa lleva demasiado tiempo en el trabajo

Cuando Dataflow detecta que el trabajo tardó demasiado en terminar el procesamiento, aparece el siguiente mensaje:

Stage spending too long on work

Dataflow envía trabajo a etapas fusionadas en paquetes de elementos para procesar, y cada paquete se considera completo una vez que todos los elementos y sus resultados se procesaron para la etapa. Las canalizaciones de transmisión están optimizadas en torno a los paquetes de trabajo que tardan menos de un minuto en procesarse por completo, por lo que los tiempos de procesamiento largos pueden causar más problemas de rendimiento en las canalizaciones.

Este problema puede deberse a transformaciones de usuarios atascadas o lentas. Estas transformaciones se pueden identificar mediante advertencias emitidas en Cloud Logging y en la pestaña Diagnóstico con las frases clave “Operación en curso” o “Se detuvo el procesamiento”. Para diagnosticar si este problema se debe a una transformación de usuario, usa Cloud Profiler para inspeccionar el rendimiento de las transformaciones de usuario. Luego, realiza un seguimiento de qué código causa la demora y con qué frecuencia. Para obtener más información, consulta Solución de errores comunes de Dataflow.

Si la investigación revela que los tiempos de procesamiento largos no se deben a las transformaciones de usuario, recomendamos comunicarte con el equipo de asistencia de Cloud y describir los pasos realizados para investigar.

Trabajo atascado en el elemento de trabajo

Cuando Dataflow detecta que una clave está atascada porque un solo elemento de trabajo falló varias veces y, luego, vuelve a intentar, aparece el siguiente mensaje:

Job is stuck due to failed and retried work item

En Dataflow, todos los mensajes de una canalización se procesan con una clave en particular. Cuando se produce un error mientras se procesa un mensaje, ese mensaje se vuelve a intentar. Es aceptable que se vuelva a intentar un mensaje dos o tres veces. Sin embargo, si se producen errores una y otra vez, como diez veces consecutivas, por lo general, indica que hay un problema fundamental con el código de la canalización. Cuando se reintenta un mensaje en particular en una clave, otros mensajes con la misma clave no pueden progresar. Si un mensaje falla 10 o más veces, es probable que el problema no se resuelva por sí solo. Esta falla del mensaje puede causar problemas de canalización como los siguientes:

  • retrasa la marca de agua
  • acumula de tareas pendientes
  • evita que una operación de desvío se complete

Para depurar este problema, investiga la etapa que informó la recomendación y revisa los registros para identificar el código problemático. Luego, actualiza el trabajo con el código de canalización nuevo para detener el trabajo.

Streaming Engine no está habilitado

Cuando Dataflow detecta que un trabajo de transmisión no tiene Streaming Engine habilitado, aparece el siguiente mensaje:

This job isn't using Streaming Engine. It might benefit from having Streaming Engine enabled.

El uso de Streaming Engine tiene varios beneficios potenciales, como un mejor ajuste de escala automático horizontal, una mayor compatibilidad y un uso reducido de recursos de CPU, memoria y almacenamiento en Persistent Disk en las VMs de trabajador. Streaming Engine también admite la facturación basada en recursos.