airflow airflow-scheduler

Airflow 1.9.0 está haciendo cola pero no está iniciando tareas



airflow-scheduler (6)

El flujo de aire puede ser un poco complicado de configurar.

  • ¿Tiene el airflow scheduler ejecución?
  • ¿Tiene el airflow webserver funcionando?
  • ¿Ha verificado que todos los DAG que desea ejecutar están activados en la interfaz de usuario web?
  • ¿Todos los DAG que desea ejecutar tienen una fecha de inicio que está en el pasado?
  • ¿Todos los DAG que desea ejecutar tienen una programación adecuada que se muestra en la interfaz de usuario web?
  • Si nada más funciona, puede usar la interfaz de usuario web para hacer clic en el dag, luego en Vista gráfica . Ahora seleccione la primera tarea y haga clic en Instancia de tarea . En el párrafo Detalles de la instancia de la tarea , verá por qué un DAG está esperando o no ejecutándose.

He tenido, por ejemplo, un DAG que se configuró incorrectamente en depends_on_past: True que prohíbe que la instancia actual se inicie correctamente.

También es un excelente recurso directamente en los documentos, que tiene algunas sugerencias más: ¿Por qué no se programa mi tarea? .

Airflow no ejecuta aleatoriamente tareas en cola, algunas tareas ni siquiera obtienen el estado en cola. Sigo viendo a continuación en los registros del planificador

[2018-02-28 02:24:58,780] {jobs.py:1077} INFO - No tasks to consider for execution.

Veo tareas en la base de datos que no tienen estado o estado en cola pero nunca comienzan.

La configuración del flujo de aire se ejecuta https://github.com/puckel/docker-airflow en ECS con Redis. Hay 4 hilos de planificación y 4 tareas de trabajo de apio. Las tareas que no se están ejecutando se muestran en estado en cola (icono gris) cuando el cursor sobre el operador del icono de la tarea es nulo y los detalles de la tarea dicen:

All dependencies are met but the task instance is not running. In most cases this just means that the task will probably be scheduled soon unless:- The scheduler is down or under heavy load

Las métricas en el planificador no muestran una carga pesada. El dag es muy simple con 2 tareas independientes que solo dependen de la última ejecución. También hay tareas en el mismo dag que están atascadas sin estado (icono blanco).

Es interesante notar que cuando reinicio las tareas del planificador cambian al estado de ejecución.


Me enfrento al problema hoy y descubrí que el punto 4 de la respuesta tobi6 a continuación funcionó y resolvió el problema

*''Do all the DAGs you want to run have a start date which is in the past?''*

Estoy usando la versión de flujo de aire v1.10.3


Mi problema fue un paso más allá, además de que mis tareas estaban en cola, no pude ver a ninguno de mis trabajadores de apio en la interfaz de usuario de Flower. La solución fue que, como estaba ejecutando mi trabajador de apio como root, tuve que hacer cambios en mi archivo ~ / .bashrc.

Los siguientes pasos lo hicieron funcionar:

  1. Agregue exportar C_FORCE_ROOT = true a su archivo ~ / .bashrc
  2. fuente ~ / .bashrc
  3. Ejecutar trabajador: nohup airflow worker $ * >> ~ / airflow / logs / worker.logs &

Verifique su interfaz de usuario de Flower en http: // {HOST}: 5555


También estoy ejecutando un tenedor del repositorio puckel / docker-airflow, principalmente en Airflow 1.8 durante aproximadamente un año con más de 10 millones de instancias de tareas. Creo que el problema persiste en 1.9, pero no soy positivo.

Por alguna razón, parece haber un problema de larga data con el programador Airflow donde el rendimiento se degrada con el tiempo. He revisado el código del planificador, pero aún no estoy claro qué sucede exactamente de manera diferente en un nuevo comienzo para volver a programarlo normalmente. Una diferencia importante es que los estados de tareas programadas y en cola se reconstruyen.

Aspectos básicos del programador en el wiki de Airflow proporciona una referencia concisa sobre cómo funciona el programador y sus diversos estados.

La mayoría de las personas resuelve el problema del rendimiento del programador disminuyendo reiniciando el programador regularmente. He encontrado el éxito personalmente en un intervalo de 1 hora, pero también he visto con tanta frecuencia como cada 5-10 minutos. Vale la pena considerar el volumen de la tarea, la duración de la tarea y la configuración de paralelismo al experimentar con un intervalo de reinicio.

Para más información ver:

Esto solía solucionarse reiniciando cada X ejecuciones utilizando la configuración de configuración SCHEDULER_RUNS , aunque esa configuración se eliminó recientemente de los scripts predeterminados de systemd.

También puede considerar publicar en la lista de correo de desarrollo de Airflow . Sé que esto se ha discutido allí varias veces y uno de los principales contribuyentes puede proporcionar un contexto adicional.

preguntas relacionadas


También tuve un problema similar, pero está relacionado principalmente con SubDagOperator con más de 3000 instancias de tareas en total (30 tareas * 44 tareas de subdag).

Lo que descubrí es que el airflow scheduler principal responsable de poner sus tareas programadas en "ranuras en cola" (grupo), mientras que los airflow celery workers son los que recogen su tarea en cola y la colocan en los "ranuras usadas" (grupo) y ejecutarlo

Según su descripción, su scheduler debería funcionar bien. Le sugiero que revise su registro de "trabajadores de apio" para ver si hay algún error, o reiniciarlo para ver si ayuda o no. Experimenté algunos problemas que los trabajadores de apio normalmente hacen huelga durante unos minutos y luego comienzan a trabajar nuevamente (especialmente en SubDagOperator)


Una cosa más para verificar es si "alcanzó el parámetro de concurrencia de su DAG". .

Experimenté la misma situación cuando alguna tarea se mostró como SIN ESTADO .

Resultó que mis tareas File_Sensor se ejecutaron con un tiempo de espera configurado de hasta 1 semana, mientras que el tiempo de espera del DAG fue de solo 5 horas. Eso llevó al caso cuando faltaban los archivos, muchos sensores asignados funcionaban al mismo tiempo. ¡Lo que da como resultado la concurrencia sobrecargada!

Las tareas dependientes no podían iniciarse antes de que la tarea del sensor tuviera éxito, cuando el tiempo de espera de dag, NO obtuvieron ESTADO .

Mi solución:

  • Establezca cuidadosamente las tareas y el tiempo de espera de DAG
  • Aumente dag_concurrency en el archivo airflow.cfg en la carpeta AIRFLOW_HOME.

Por favor, consulte los documentos. https://airflow.apache.org/faq.html#why-isn-t-my-task-getting-scheduled