Solucionar problemas con tareas por lotes lentas o bloqueadas

En esta página se explica cómo solucionar los problemas habituales que provocan que los trabajos por lotes de Dataflow se ejecuten lentamente o se queden bloqueados.

Si tu trabajo por lotes es lento o se ha quedado bloqueado, usa la pestaña Detalles de la ejecución para obtener más información sobre el trabajo e identificar la fase o el trabajador que está provocando un cuello de botella.

Identificar la causa principal

  1. Comprueba si el trabajo tiene problemas durante el inicio del trabajador. Para obtener más información, consulta Error al sincronizar el pod.

    Para verificar que el trabajo ha empezado a procesar datos, busca en el registro job-message la siguiente entrada de registro:

    All workers have finished the startup processes and began to receive work requests
    
  2. Para comparar el rendimiento de diferentes tareas, asegúrese de que el volumen de datos de entrada, la configuración de los trabajadores, el comportamiento del autoescalado y los ajustes de Shuffle de Dataflow sean los mismos.

  3. Consulta los registros job-message para ver si hay problemas como límites de cuota, problemas de falta de stock o agotamiento de direcciones IP.

  4. En la pestaña Detalles de la ejecución, compara el progreso de las fases para identificar las fases que han tardado más.

  5. Busca cualquier hebra suelta en el trabajo. Para obtener más información, consulta Solucionar problemas de tareas por lotes que se retrasan.

  6. Consulta las métricas de rendimiento, CPU y uso de memoria.

  7. Consulta los registros de los trabajadores para ver si hay advertencias y errores.

  8. Comprueba si hay teclas de acceso rápido.

  9. Si no usas Dataflow Shuffle, consulta los registros de la función Shuffle para ver si hay advertencias y errores durante la operación Shuffle. Si aparece un error de tiempo de espera de RPC en el puerto 12345 o 12346, es posible que falte una regla de cortafuegos en tu trabajo. Consulta Reglas de cortafuegos de Dataflow.

  10. Si Runner v2 está habilitado, comprueba si hay errores en los registros de harness. Para obtener más información, consulta Solucionar problemas de Runner v2.

Identificar los elementos que se han quedado atrás

Un elemento de trabajo rezagado es un elemento de trabajo que es lento en comparación con otros elementos de trabajo de la fase. Para obtener información sobre cómo identificar y corregir las tareas pendientes, consulta el artículo Solucionar problemas de tareas pendientes en trabajos por lotes.

Identificar fases lentas o bloqueadas

Para identificar las fases lentas o bloqueadas, usa la vista Progreso de la fase. Las barras más largas indican que la fase lleva más tiempo. Usa esta vista para identificar las fases más lentas de tu flujo de procesamiento.

Una vez que hayas identificado la fase que provoca el cuello de botella, puedes seguir estos pasos:

Identificar un trabajador con retraso

Para identificar un trabajador que se retrasa en una fase específica, usa la vista Progreso del trabajador. En esta vista se muestra si todos los trabajadores están procesando el trabajo hasta el final de la fase o si un trabajador está bloqueado en una tarea con retraso. Si detectas un trabajador con retraso, sigue estos pasos:

Herramientas de depuración

Si una canalización es lenta o se bloquea, las siguientes herramientas pueden ayudarte a diagnosticar el problema.

  • Para correlacionar incidentes e identificar cuellos de botella, usa Cloud Monitoring para Dataflow.
  • Para monitorizar el rendimiento de la canalización, usa Cloud Profiler.
  • Algunas transformaciones son más adecuadas para las canalizaciones de gran volumen que otras. Los mensajes de registro pueden identificar una transformación de usuario bloqueada en las canalizaciones por lotes o de streaming.
  • Para obtener más información sobre una tarea bloqueada, consulta las métricas de tareas de Dataflow. En la siguiente lista se incluyen métricas útiles:
    • La métrica Bytes de la lista de pendientes (backlog_bytes) mide la cantidad de entradas sin procesar en bytes por fase. Usa esta métrica para encontrar un paso fusionado que no tenga un rendimiento. Del mismo modo, la métrica de elementos pendientes (backlog_elements) mide el número de elementos de entrada sin procesar de una fase.
    • La métrica Claves de paralelismo de procesamiento (processing_parallelism_keys) mide el número de claves de procesamiento en paralelo de una fase concreta de la canalización durante los últimos cinco minutos. Use esta métrica para investigar de las siguientes formas:
      • Acota el problema a fases específicas y confirma las advertencias de teclas de acceso rápido, como A hot key ... was detected.
      • Detecta cuellos de botella de rendimiento causados por un paralelismo insuficiente. Estos cuellos de botella pueden provocar que las canalizaciones se ralenticen o se bloqueen.
    • La métrica Retraso del sistema (system_lag) y la métrica de retraso del sistema por fase (per_stage_system_lag) miden el tiempo máximo que un elemento de datos ha estado procesándose o esperando a procesarse. Usa estas métricas para identificar las fases ineficientes y los cuellos de botella de las fuentes de datos.

Para ver otras métricas que no se incluyen en la interfaz web de monitorización de Dataflow, consulta la lista completa de métricas de Dataflow en Métricas de Google Cloud Platform.