Usar Estadísticas de Dataflow

Puedes usar Dataflow Insights para optimizar el rendimiento de las tareas. En este tema se muestra cómo interactuar con Estadísticas de Dataflow mediante gcloud o la API REST. También puedes consultar las estadísticas en la consola de flujo de datos. Para obtener más información sobre cómo consultar las estadísticas en la consola, consulta Recomendaciones.

Información general

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

Cuando trabajes con Estadísticas de Dataflow, ten en cuenta que es posible que algunas recomendaciones no sean relevantes para tu caso práctico.

Antes de empezar

Antes de empezar a usar Estadísticas de Dataflow, debes completar los siguientes pasos.

  1. Habilita la API Recommender.
  2. Configura la autenticación.

    Select the tab for how you plan to use the samples on this page:

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    REST

    Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

      Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

  3. Asegúrate de que tu cuenta tiene los siguientes permisos:

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

    Puedes conceder estos permisos de forma individual o asignar uno de los siguientes roles:

    • roles/recommender.dataflowDiagnosticsViewer
    • roles/recommender.dataflowDiagnosticsAdmin
    • roles/dataflow.viewer
    • roles/dataflow.developer
    • roles/dataflow.admin
  4. Solicitar estadísticas de Dataflow

    Puedes enumerar las estadísticas de Dataflow como se muestra a continuación. Para obtener información sobre otros tipos de interacciones con estadísticas, consulta la guía de estadísticas de la API Recommender.

    Mostrar estadísticas de Dataflow

    Para enumerar todas las estadísticas de Dataflow de tu 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 especificada.

    Antes de ejecutar el comando, sustituye los siguientes valores:

    • PROJECT_ID: ID del proyecto del que quieres obtener 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 muestran todas las estadísticas de Dataflow de tu proyecto en la región especificada.

    REST

    Puede usar el método insights.list de la API Recommender para enumerar todas las estadísticas de Dataflow de su proyecto en una región específica.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: ID del proyecto del que quieres obtener 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 print-access-token) \
      "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights"
    

    Obtener una sola estadística de Dataflow

    Para obtener más información sobre una estadística concreta, como su descripción, su estado y las recomendaciones asociadas, utilice uno de los siguientes métodos:

    gcloud

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

    • INSIGHT_ID: el ID de la estadística que quieres ver.
    • PROJECT_ID: ID del proyecto del que quieres obtener 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
    

    El resultado muestra la estadística detallada.

    REST

    El método insights.get de la API Recommender obtiene una sola estadística. Antes de usar los datos de la solicitud, haz los siguientes cambios:

    • PROJECT_ID: ID del proyecto del que quieres obtener 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 quieres 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 print-access-token) \
      "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID"
    

    Interpretar las estadísticas de Dataflow

    Una vez que obtengas una estadística, puedes revisar su contenido para entender el patrón de uso de recursos que destaca. Además de los atributos de estadísticas estándar, Estadísticas de Dataflow proporciona los siguientes subtipos:

    • AUTOSCALING_NOT_ENABLED: Se puede habilitar el autoescalado. La tarea tiene un uso de CPU elevado y está usando el número máximo de trabajadores definido. Habilitar el autoescalado podría mejorar el rendimiento.
    • HIGH_FAN_OUT: se puede insertar una interrupción de fusión después de una o varias transformaciones para aumentar el paralelismo.
    • MAX_NUM_WORKERS: Autoescalado: se podría aumentar el número máximo de trabajadores. La tarea usa el autoescalado, tiene un uso de CPU elevado y está usando el número máximo de trabajadores definido. Aumentar el número máximo de trabajadores podría mejorar el rendimiento.
    • WORKER_OUT_OF_MEMORY: Algunos de los trabajadores de la tarea han fallado porque se han quedado sin memoria, lo que podría ralentizar la tarea o provocar que falle.
    • PREBUILD_NOT_UTILIZED: usa el flujo de trabajo de precompilación de la imagen de trabajador para mejorar el tiempo de inicio de los trabajadores y la fiabilidad del escalado automático.
    • ACTIVE_KEYS (Vista previa): El número total de claves activas es inferior al número total de núcleos, por lo que no se puede aumentar.
    • LONG_WORK_ITEM: el trabajo en una fase fusionada tarda demasiado en procesarse, lo que indica que la operación se está ejecutando lentamente o se ha bloqueado.

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

    Dataflow Insights también proporciona un campo content especial que contiene subcampos con información adicional y metadatos sobre una estadística. En función de tu caso práctico, los siguientes subcampos de content pueden ser útiles:

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

    Estadísticas

    Se ha detectado una alta carga de salida

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

    High fan-out detected
    

    Este mensaje se muestra cuando un ParDo que tiene una relación alta entre el número de elementos de salida y de entrada se combina con un ParDo posterior. En esta situación, el segundo ParDo se ejecuta secuencialmente con el primero, lo que obliga a que todos los elementos de salida de una entrada determinada se ejecuten en el mismo trabajador, lo que reduce el paralelismo y ralentiza el rendimiento.

    Para solucionar este problema, sigue estos pasos:

    • Inserta un GroupByKey y desagrupa después del primer ParDo. El servicio Dataflow nunca fusiona operaciones ParDo en una agregación. Para obtener más información, consulte Optimización de la fusión.
    • Pasa el PCollection intermedio como entrada secundaria a otro ParDo. El servicio Dataflow siempre materializa las entradas secundarias.
    • Inserta un paso de aleatorización. La reorganización evita la fusión, crea puntos de control de los datos y reconfigura la estrategia de ventanas para que no se pierdan datos. Dataflow admite la función Reshuffle, aunque esté marcada como obsoleta en la documentación de Apache Beam (ten en cuenta que reorganizar los datos puede aumentar el coste de ejecutar tu flujo de procesamiento).

    Autoescalado: se puede aumentar el número máximo de trabajadores

    Cuando Dataflow detecta que una tarea está usando el número máximo de trabajadores permitidos maxNumWorkers (o max_num_workers) y que podría usar más trabajadores si se aumentara este máximo, aparece el siguiente mensaje:

    maximum number of workers could be increased
    

    Por ejemplo, esta recomendación se produce en un trabajo por lotes o de streaming que tiene maxNumWorkers definido en 50 cuando se utilizan los 50 trabajadores con una utilización media de la CPU de los trabajadores superior al 80%. Esta recomendación también se produce en los trabajos de streaming que tienen maxNumWorkers definido en 50 cuando se utilizan los 50 trabajadores con una utilización media de la CPU de los trabajadores superior al 50% y el trabajo tiene un tiempo de procesamiento estimado de más de 2 minutos.

    Por lo general, aumentar maxNumWorkers incrementa el rendimiento de la canalización. Un flujo de trabajo por lotes podría completarse en menos tiempo, y un flujo de trabajo de streaming podría gestionar picos de datos más grandes y procesar más elementos por segundo. Sin embargo, esto puede suponer un aumento de los costes. Para obtener más información, consulta los precios de los recursos de los trabajadores. Para obtener información sobre cómo funciona el algoritmo de ajuste automático de escala y cómo configurarlo, consulta la guía de ajuste automático de escala.

    Para solucionar este problema, sigue estos pasos:

    • Aumenta o elimina la opción de maxNumWorkers. Si no se usa esta opción, Dataflow usará los valores predeterminados que se indican en la guía de autoescalado.
    • No pasa nada si no haces nada si el rendimiento de la canalización es adecuado.
      • En el caso de las canalizaciones por lotes, comprueba que el tiempo total de ejecución se ajuste a tus requisitos.
      • En el caso de las canalizaciones de streaming, consulta el gráfico Actualización de datos de la pestaña Métricas de la tarea de la página de la tarea. Verifica que los valores del gráfico no aumenten continuamente y que se encuentren dentro de los límites aceptables.

    Autoescalado: definir el número inicial de trabajadores podría mejorar el rendimiento del trabajo

    Cuando Dataflow detecta que una tarea está usando un número determinado de trabajadores durante más del 50% del tiempo de ejecución, definir el número inicial de trabajadores con el valor recomendado puede mejorar el rendimiento de la tarea, ya que se reduce el tiempo de ejecución de las tareas por lotes o se evita que se acumulen las tareas pendientes al actualizar una tarea de streaming.

    Los trabajadores fallan con errores OutOfMemory

    Cuando Dataflow detecta que los trabajadores de una tarea fallan debido a errores de falta de memoria, se muestra el siguiente mensaje:

    Some workers are out of memory
    

    Algunos trabajadores de la tarea han fallado por falta de memoria. Aunque es posible que el trabajo se complete, también es posible que estos errores impidan que se complete correctamente o que ralenticen el rendimiento.

    Prueba las siguientes sugerencias:

    • Aumentar manualmente la cantidad de memoria disponible para los trabajadores.
    • Reduce la cantidad de memoria necesaria creando perfiles de uso de memoria. Para obtener más información, consulta el artículo Solucionar errores de falta de memoria de Dataflow.

    No se ha utilizado el flujo de trabajo precompilado

    Cuando Dataflow detecta un flujo de procesamiento en el que no se utiliza el flujo de trabajo de precompilación de imágenes de trabajador, aparece el siguiente mensaje:

    pre-build workflow not utilized
    

    Cuando no se usa el flujo de trabajo de precompilación de imágenes de trabajador, la canalización tiene dependencias que se instalan repetidamente en el tiempo de ejecución. Esta configuración ralentiza el tiempo de inicio de los trabajadores, lo que reduce el rendimiento del trabajo y provoca un comportamiento de autoescalado poco fiable.

    Para resolver este problema, utiliza el flujo de trabajo de precompilación de imágenes de trabajador al iniciar la canalización. Para obtener más información, consulta Precompilar dependencias de Python.

    Si ya se está usando un contenedor precompilado personalizado, para evitar instalaciones innecesarias, añade la opción "--sdk_location=container" y elimina las siguientes opciones:

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

    Las claves activas son bajas

    Cuando Dataflow detecta que un trabajo se está quedando atrás porque el número de claves activas es inferior al número total de núcleos y no se puede aumentar la escala, aparece el siguiente mensaje:

    Active keys can be increased
    

    Para ejecutar el código de usuario en las tareas, Dataflow usa trabajadores. Cada hilo se asigna a una clave que se encarga de procesar un conjunto de datos. Por motivos de corrección, una clave solo se puede ejecutar en un único núcleo a la vez.

    En algunos casos, algunos núcleos están sobrecargados, mientras que otros están inactivos. Para solucionar este problema, aumenta el número de claves, lo que también aumentará el número de hilos activos.

    Posibles soluciones para aumentar las claves: - Puede aumentar el número de claves usando un tipo de clave más específico. Por ejemplo, si el tipo de clave es IP address, habrá menos claves disponibles. Sin embargo, si cambia el tipo de clave a IP + [user identifier], habrá más claves disponibles, lo que aumentará el paralelismo. - En el caso de las canalizaciones que escriben en BigQuery y en las que los receptores podrían ser el cuello de botella, consulta este artículo. - En el caso de otras fuentes o receptores, comprueba si tienen un parámetro numShards y auméntalo. En general, un fragmento se asigna a una clave. - Para obtener más información general sobre nuestro modelo de ejecución, consulta este artículo. - Fanout se puede usar para tomar una sola clave de entrada y añadirle un hash para generar varias claves de salida. Referencia

    Dedica demasiado tiempo al trabajo

    Cuando Dataflow detecta que el trabajo ha tardado demasiado en finalizar el procesamiento con frecuencia, aparece el siguiente mensaje:

    Stage spending too long on work
    

    Dataflow envía el trabajo a las fases fusionadas en paquetes de elementos que se van a procesar. Cada paquete se considera completo una vez que se han procesado todos los elementos y sus salidas en la fase. Las canalizaciones de streaming se optimizan en torno a paquetes de trabajo que tardan menos de un minuto en procesarse por completo, por lo que los tiempos de procesamiento largos pueden provocar más problemas de rendimiento en las canalizaciones.

    Este problema puede deberse a transformaciones de usuario que están bloqueadas o son lentas. Estas transformaciones se pueden identificar mediante las advertencias emitidas en Cloud Logging y en su pestaña Diagnóstico, con las frases clave "Operación en curso" o "Procesamiento bloqueado". 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. A continuación, rastrea qué código está provocando la ralentización y con qué frecuencia. Para obtener más información, consulta el artículo Solucionar errores habituales de Dataflow.

    Si la investigación revela que los tiempos de procesamiento largos no se deben a transformaciones de usuario, te recomendamos que te pongas en contacto con el equipo de Asistencia de Cloud y describas los pasos que has seguido para investigar el problema.

    El trabajo se queda bloqueado en un elemento de trabajo

    Cuando Dataflow detecta que una clave está bloqueada porque un solo elemento de trabajo ha fallado repetidamente y, a continuación, se ha vuelto 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 concreta. Cuando se produce un error al procesar un mensaje, se vuelve a intentar. Es aceptable que se vuelva a intentar enviar un mensaje dos o tres veces. Sin embargo, si los errores se producen una y otra vez (por ejemplo, diez veces seguidas), suele indicar que hay un problema fundamental con el código de la canalización. Cuando se vuelve a intentar enviar un mensaje concreto de una clave, los demás mensajes de la misma clave no pueden avanzar. Si un mensaje falla 10 veces o más, es probable que el problema no se resuelva por sí solo. Si no se envía este mensaje, pueden producirse problemas en la canalización, como los siguientes:

    • Retrasar la marca de agua
    • acumulación de trabajo pendiente
    • evitar que se complete una operación de drenaje

    Para depurar este problema, investiga la fase que ha indicado la recomendación y revisa los registros para identificar el código problemático. A continuación, actualiza el trabajo con el nuevo código de la canalización para que se desbloquee.

    Streaming Engine no está habilitado

    Cuando Dataflow detecta que una tarea de streaming no tiene habilitado Streaming Engine, aparece el siguiente mensaje:

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

    Usar Streaming Engine tiene varias ventajas potenciales, como un mejor autoescalado horizontal, una mayor compatibilidad y un menor uso de recursos de CPU, memoria y almacenamiento en disco persistente en las VMs de los trabajadores. Streaming Engine también admite la facturación basada en recursos.