Solución de problemas del programador de Airflow

Cloud Composer 1 | Cloud Composer 2

En esta página, se proporcionan instrucciones y pasos para solucionar problemas comunes con los programadores de Airflow.

Identifica el origen del problema

Para comenzar a solucionar problemas, primero debes identificar si el problema ocurre en el momento del análisis del DAG o mientras se procesan las tareas en el momento de la ejecución. Para obtener más información sobre el tiempo de análisis y el tiempo de ejecución, consulta la Diferencia entre el tiempo de análisis y de ejecución del DAG.

Inspecciona los tiempos de análisis del DAG

Para verificar si el problema ocurre durante el análisis del DAG, sigue estos pasos.

Console

  1. En Google Cloud Console, ve a la página Entornos.

    Ir a Entornos

  2. En la lista de entornos, haga clic en el nombre de su entorno. Se abrirá la página Detalles del entorno.

  3. Ve a la pestaña Monitoring.

  4. En la pestaña Monitoring, revisa el gráfico Tiempo total de análisis de todos los archivos DAG en la sección Ejecuciones de DAG y, luego, identifica posibles problemas.

    La sección de ejecuciones de DAG en la pestaña Monitoring de Composer muestra las métricas de estado de los DAG de su entorno

gcloud

Usa el comando list_dags con la marca -r para ver el tiempo de análisis de todos tus DAG.

gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION \
    list_dags -- -r

Reemplaza lo siguiente:

  • ENVIRONMENT_NAME por el nombre del entorno.
  • LOCATION por la región donde se encuentra el entorno

El resultado del comando es similar al siguiente:

-------------------------------------------------------------------
DagBag loading stats for /home/airflow/gcs/dags
-------------------------------------------------------------------
Number of DAGs: 5
Total task number: 13
DagBag parsing time: 0.6765180000000001
-----------+----------+---------+----------+-----------------------
file       | duration | dag_num | task_num | dags
-----------+----------+---------+----------+-----------------------
/dag_1.py  | 0.6477   |       1 |        2 | ['dag_1']
/dag_2.py  | 0.018652 |       1 |        2 | ['dag_2']
/dag_3.py  | 0.004024 |       1 |        6 | ['dag_3']
/dag_4.py  | 0.003476 |       1 |        2 | ['dag_4']
/dag_5.py  | 0.002666 |       1 |        1 | ['dag_5']
-----------+----------+---------+----------+-----------------------

Busca el valor de tiempo de análisis de DagBag. Un valor alto puede indicar que uno de tus DAG no se implementa de manera óptima. En la tabla de resultados, puedes identificar qué DAG tienen un tiempo de análisis prolongado.

Supervisa tareas en ejecución y en cola

Para verificar si hay tareas atascadas en una cola, sigue estos pasos.

  1. En Google Cloud Console, ve a la página Entornos.

    Ir a Entornos

  2. En la lista de entornos, haga clic en el nombre de su entorno. Se abrirá la página Detalles del entorno.

  3. Ve a la pestaña Monitoring.

  4. En la pestaña Monitoring, revisa el gráfico Tareas en cola y en ejecución en la sección Ejecuciones de DAG para identificar posibles problemas.

Soluciona problemas durante el análisis de DAG

En las siguientes secciones, se describen los síntomas y las posibles soluciones para algunos problemas comunes durante el análisis de DAG.

Cantidad limitada de subprocesos

Permitir que el administrador de procesadores DAG (la parte del programador que procesa archivos DAG) use solo una cantidad limitada de subprocesos puede afectar el tiempo de análisis de tu DAG.

Para resolver el problema, aplica los siguientes cambios en el archivo de configuración airflow.cfg:

  • Para Airflow 1.10.12 y versiones anteriores, usa el parámetro max_threads:

    [scheduler]
    max_threads = <NUMBER_OF_CORES_IN_MACHINE - 1>
    
  • Para Airflow 1.10.14 y versiones posteriores, usa el parámetro parsing_processes:

    [scheduler]
    parsing_processes = <NUMBER_OF_CORES_IN_MACHINE - 1>
    

Reemplaza NUMBER_OF_CORES_IN_MACHINE por la cantidad de núcleos en las máquinas de nodos trabajadores.

Distribución de números y horarios de las tareas

Airflow es conocido por tener problemas para programar una gran cantidad de tareas pequeñas. En tales casos, debes elegir una cantidad menor de tareas más consolidadas.

Programar una gran cantidad de DAG o tareas al mismo tiempo también puede ser una posible fuente de problemas. Para evitar este problema, distribuye tus tareas de manera más uniforme en el tiempo.

Soluciona problemas de tareas en ejecución y en cola

En las siguientes secciones, se describen los síntomas y las posibles soluciones para algunos problemas comunes con las tareas en cola y en ejecución.

Las listas de tareas en cola son demasiado largas

En algunos casos, la lista de tareas en cola podría ser demasiado larga para el programador. Para obtener información sobre cómo optimizar los parámetros de trabajador y Celery, lee sobre cómo escalar tu entorno de Cloud Composer junto con tu negocio.

Recursos de clúster limitados

Esta sección se aplica solo a Cloud Composer 1.

Es posible que experimentes problemas de rendimiento si el clúster de GKE de tu entorno es demasiado pequeño para todos tus DAG y tareas. En este caso, prueba una de las siguientes soluciones:

  • Crea un entorno nuevo con un tipo de máquina que proporcione más rendimiento y migra tus DAG a él
  • Crea más entornos de Cloud Composer y divide los DAG entre ellos
  • Cambia el tipo de máquina de los nodos de GKE, como se describe en Actualización del tipo de máquina de los nodos de GKE. Dado que este procedimiento es propenso a errores, es la opción menos recomendada.
  • Actualiza el tipo de máquina de la instancia de Cloud SQL que ejecuta la base de datos de Airflow en tu entorno, por ejemplo, mediante los comandos gcloud composer environments update. El rendimiento bajo de la base de datos de Airflow puede ser la razón por la que el programador es lento.

Evita la programación de tareas durante los períodos de mantenimiento

Puedes definir períodos de mantenimiento específicos para tu entorno. Durante estos períodos, se producen los eventos de mantenimiento para Cloud SQL y GKE.

Haz que el programador de Airflow ignore archivos innecesarios

Puedes mejorar el rendimiento del programador de Airflow si omites los archivos innecesarios en la carpeta de DAG. El programador de Airflow ignora los archivos y carpetas especificados en el archivo .airflowignore.

Para que el programador de Airflow ignore archivos innecesarios, haz lo siguiente:

  1. Crea un archivo .airflowignore.
  2. En este archivo, se muestra una lista de los archivos y las carpetas que se deben ignorar.
  3. Sube este archivo a la carpeta /dags en el bucket de tu entorno.

Para obtener más información sobre el formato de archivo .airflowignore, consulta la documentación de Airflow.

El programador de Airflow procesa los DAG pausados

Los usuarios de Airflow pausan los DAG para evitar su ejecución. Esto ahorra ciclos de procesamiento de los trabajadores de Airflow.

El programador de Airflow continuará analizando los DAG pausados. Si realmente deseas mejorar el rendimiento del programador de Airflow, usa .airflowignore o borra los DAG pausados de la carpeta de DAG.

Uso de “wait_for_downstream” en tus DAG

Si configuras el parámetro wait_for_downstream en True en tus DAG, para que una tarea tenga éxito, todas las tareas que se encuentran en una etapa posterior de esta tarea también deben tener éxito. Significa que la ejecución de las tareas que pertenecen a una ejecución de DAG determinada puede ralentizarse mediante la ejecución de tareas de la ejecución del DAG anterior. Obtén más información en la documentación de Airflow.

Las tareas que estén en cola demasiado tiempo se cancelarán y se reprogramarán

Si una tarea de Airflow se mantiene en cola durante mucho tiempo, el programador lo marcará como con errores o arriba y volverá a reprogramarlo para su ejecución. Una forma de observar los síntomas de esta situación es observar el gráfico con la cantidad de tareas en cola (la pestaña Supervisión en la IU de Cloud Composer). Si los aumentos en este gráfico no disminuyen alrededor de 10 minutos, probablemente haya fallas en las tareas (sin registros) seguidas de entradas de registro pendientes ... en el registro. En estos casos, es posible que veas que el archivo de registro no se encuentra... o mensaje en los registros de tareas de Airflow porque la tarea no se ejecutó.

En general, se espera que esta tarea falle y la siguiente instancia de la tarea programada debe ejecutarse según el programa. Si observas muchos de esos casos en tus entornos de Cloud Composer, es posible que no haya suficientes trabajadores de Airflow en tu entorno para procesar todas las tareas programadas.

Resolución: Para resolver este problema, debes asegurarte de que siempre haya capacidad en los trabajadores de Airflow para ejecutar tareas en cola. Por ejemplo, puedes aumentar la cantidad de trabajadores o la de trabajadores_simultaneidad. También puedes ajustar el paralelismo o grupos para evitar que las tareas en cola superen la capacidad que tienes.

Esporádicamente, las tareas inactivas podrían bloquear la ejecución de un DAG específico

En casos normales, el programador de Airflow debe poder abordar situaciones en las que hay tareas inactivas en la cola y, por algún motivo, no es posible ejecutarlas de manera correcta (p.ej., se borró un DAG al que pertenecen las tareas inactivas).

Si el programador no borra definitivamente estas tareas inactivas, es posible que debas borrarlas manualmente. Puedes hacerlo, por ejemplo, en la IU de Airflow: puedes navegar a Menú > Navegador > Instancias de tarea; encontrar tareas en cola que pertenezcan a un DAG inactivo y borrarlos.

Enfoque de Cloud Composer para el parámetro min_file_process_interval

Cloud Composer cambia la forma en que el programador de Airflow usa min_file_process_interval.

En el caso de Cloud Composer que usa Airflow 1, los usuarios pueden establecer el valor de min_file_process_interval entre 0 y 600 segundos. Los valores superiores a 600 segundos mostrarán los mismos resultados que si se configurara min_file_process_interval en 600 segundos.

En el caso de Cloud Composer que usa Airflow 2, los usuarios pueden establecer el valor de min_file_process_interval en un valor de entre 0 y 1,200 segundos. Los valores superiores a 1,200 segundos generarán los mismos resultados que si min_file_process_interval se configurara en 1,200 segundos.

Ajusta la configuración de Airflow

Airflow proporciona opciones de configuración que controlan cuántas tareas y DAG de Airflow pueden ejecutarse al mismo tiempo. Si quieres configurar estas opciones de configuración, anula sus valores para tu entorno.

  • Simultaneidad de los trabajadores

    El parámetro [celery]worker_concurrency controla la cantidad máxima de tareas que un trabajador de Airflow puede ejecutar al mismo tiempo. Si multiplicas el valor de este parámetro por la cantidad de trabajadores de Airflow en tu entorno de Cloud Composer, obtendrás la cantidad máxima de tareas que se pueden ejecutar en un momento determinado de tu entorno. Este número está limitado por la opción de configuración de Airflow [core]parallelism, que se describe más a continuación.

  • Ejecuciones máximas de DAG activas

    La opción de configuración [core]max_active_runs_per_dag de Airflow controla la cantidad máxima de ejecuciones activas del DAG por DAG. El programador no crea más ejecuciones de DAG si alcanza este límite.

    Si este parámetro se establece de forma incorrecta, puedes encontrar un problema en el que el programador regula la ejecución del DAG porque no puede crear más instancias de ejecución de DAG en un momento determinado.

  • Máx. de tareas activas por DAG

    La opción de configuración [core]max_active_tasks_per_dag de Airflow controla la cantidad máxima de instancias de tareas que se pueden ejecutar de forma simultánea en cada DAG. Es un parámetro a nivel del DAG.

    Si este parámetro se establece de manera incorrecta, es posible que tengas un problema en el que la ejecución de una sola instancia de DAG sea lenta porque solo hay una cantidad limitada de tareas de DAG que se pueden ejecutar en un momento determinado.

    Solución: Aumente [core]max_active_tasks_per_dag.

  • Paralelismo y tamaño del grupo

    La opción de configuración [core]parallelism de Airflow controla cuántas tareas puede poner en cola el programador de Airflow en la cola del ejecutor después de que se cumplen todas las dependencias para estas tareas.

    Este es un parámetro global para toda la configuración de Airflow.

    Las tareas se ponen en cola y se ejecutan dentro de un grupo. Los entornos de Cloud Composer usan solo un grupo. El tamaño de este grupo controla cuántas tareas puede poner en cola el programador para su ejecución en un momento determinado. Si el tamaño del grupo es demasiado pequeño, el programador no puede poner en cola las tareas para su ejecución a pesar de los límites, que se definen mediante la opción de configuración [core]parallelism y [celery]worker_concurrency multiplicada por la cantidad de trabajadores de Airflow, que todavía no se cumplen.

    Puedes configurar el tamaño del grupo en la IU de Airflow (Menú > Administrador > Grupos). Ajusta el tamaño del grupo al nivel del paralelismo que esperas en tu entorno.

El programador no programa los DAG debido a que se agotó el tiempo de espera del procesador del DAG

Para obtener más información sobre este problema, consulte Solución de problemas de DAG.

Marcando tareas como fallidas después de alcanzar dagrun_timeout

El programador marca las tareas que no se completaron (en ejecución, programadas y en cola) como fallidas si una ejecución de DAG no se completa en dagrun_timeout (un parámetro de DAG).

Solución:

Síntomas de la base de datos de Airflow bajo presión de carga

En ocasiones, es posible que en los registros del programador de Airflow vea la siguiente entrada de registro de advertencia.

Scheduler heartbeat got an exception: (_mysql_exceptions.OperationalError) (2006, "Lost connection to MySQL server at 'reading initial communication packet', system error: 0")"

Este error o advertencia puede ser un síntoma de que la base de datos de Airflow Metadata está abrumada con operaciones.

Soluciones posibles:

¿Qué sigue?