Airflow 1.9.0 is queuing but not launching tasks

AirflowAirflow Scheduler

Airflow Problem Overview


Airflow is randomly not running queued tasks some tasks dont even get queued status. I keep seeing below in the scheduler logs

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

I do see tasks in database that either have no status or queued status but they never get started.

The airflow setup is running https://github.com/puckel/docker-airflow on ECS with Redis. There are 4 scheduler threads and 4 Celery worker tasks. For the tasks that are not running are showing in queued state (grey icon) when hovering over the task icon operator is null and task details says:

	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

Metrics on scheduler do not show heavy load. The dag is very simple with 2 independent tasks only dependent on last run. There are also tasks in the same dag that are stuck with no status (white icon).

Interesting thing to notice is when I restart the scheduler tasks change to running state.

Airflow Solutions


Solution 1 - Airflow

Airflow can be a bit tricky to setup.

  • Do you have the airflow scheduler running?
  • Do you have the airflow webserver running?
  • Have you checked that all DAGs you want to run are set to On in the web ui?
  • Do all the DAGs you want to run have a start date which is in the past?
  • Do all the DAGs you want to run have a proper schedule which is shown in the web ui?
  • If nothing else works, you can use the web ui to click on the dag, then on Graph View. Now select the first task and click on Task Instance. In the paragraph Task Instance Details you will see why a DAG is waiting or not running.

I've had for instance a DAG which was wrongly set to depends_on_past: True which forbid the current instance to start correctly.

Also a great resource directly in the docs, which has a few more hints: Why isn't my task getting scheduled?.

Solution 2 - Airflow

I'm running a fork of the puckel/docker-airflow repo as well, mostly on Airflow 1.8 for about a year with 10M+ task instances. I think the issue persists in 1.9, but I'm not positive.

For whatever reason, there seems to be a long-standing issue with the Airflow scheduler where performance degrades over time. I've reviewed the scheduler code, but I'm still unclear on what exactly happens differently on a fresh start to kick it back into scheduling normally. One major difference is that scheduled and queued task states are rebuilt.

Scheduler Basics in the Airflow wiki provides a concise reference on how the scheduler works and its various states.

Most people solve the scheduler diminishing throughput problem by restarting the scheduler regularly. I've found success at a 1-hour interval personally, but have seen as frequently as every 5-10 minutes used too. Your task volume, task duration, and parallelism settings are worth considering when experimenting with a restart interval.

For more info see:

This used to be addressed by restarting every X runs using the SCHEDULER_RUNS config setting, although that setting was recently removed from the default systemd scripts.

You might also consider posting to the Airflow dev mailing list. I know this has been discussed there a few times and one of the core contributors may be able to provide additional context.

Related Questions

Solution 3 - Airflow

Make sure you don't have datetime.now() as your start_date

It's intuitive to think that if you tell your DAG to start "now" that it'll execute "now." BUT, that doesn't take into account how Airflow itself actually reads datetime.now().

For a DAG to be executed, the start_date must be a time in the past, otherwise Airflow will assume that it's not yet ready to execute. When Airflow evaluates your DAG file, it interprets datetime.now() as the current timestamp (i.e. NOT a time in the past) and decides that it's not ready to run. Since this will happen every time Airflow heartbeats (evaluates your DAG) every 5-10 seconds, it'll never run.

To properly trigger your DAG to run, make sure to insert a fixed time in the past (e.g. datetime(2019,1,1)) and set catchup=False (unless you're looking to run a backfill).

By design, an Airflow DAG will execute at the completion of its schedule_interval

That means one schedule_interval AFTER the start date. An hourly DAG, for example, will execute its 2pm run when the clock strikes 3pm. The reasoning here is that Airflow can't ensure that all data corresponding to the 2pm interval is present until the end of that hourly interval.

This is a peculiar aspect to Airflow, but an important one to remember - especially if you're using default variables and macros.

Time in Airflow is in UTC by default

This shouldn't come as a surprise given that the rest of your databases and APIs most likely also adhere to this format, but it's worth clarifying.

Full article and source here

Solution 4 - Airflow

I also had a similar issue, but it is mostly related to SubDagOperator with more than 3000 task instances in total (30 tasks * 44 subdag tasks).

What I found out is that airflow scheduler mainly responsible for putting your scheduled tasks in to "Queued Slots" (pool), while airflow celery workers is the one who pick up your queued task and put it into the "Used Slots" (pool) and run it.

Based on your description, your scheduler should work fine. I suggest you check your "celery workers" log to see whether there is any error, or restart it to see whether it helps or not. I experienced some issues that celery workers normally go on strike for a few minutes then start working again (especially on SubDagOperator)

Solution 5 - Airflow

I am facing the issue today and found that bullet point 4 from tobi6 answer below worked out and resolved the issue

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

I am using airflow version v1.10.3

Solution 6 - Airflow

My problem was one step further, in addition to my tasks being queued, I couldn't see any of my celery workers on the Flower UI. The solution was that, since I was running my celery worker as root I had to make changes in my ~/.bashrc file.

The following steps made it work:

  1. Add export C_FORCE_ROOT=true to your ~/.bashrc file
  2. source ~/.bashrc
  3. Run worker : nohup airflow worker $* >> ~/airflow/logs/worker.logs &

Check your Flower UI at http://{HOST}:5555

Solution 7 - Airflow

I think it's worth mentioning that there's an open issue that can cause tasks to fail to run with no obvious reason: https://issues.apache.org/jira/browse/AIRFLOW-5506

The problem seems to occur when using LocalScheduler connected to a PostgreSQL airflow db, and results in the scheduler logging a number of "Killing PID xxxx" lines. Check the scheduler logs after the DAGs have been stalled without starting any new tasks for a while.

Solution 8 - Airflow

You can try to stop the webserver and the scheduler:

ps -ef | grep airflow       #show the process id
kill 1234                   #kill the webserver
kill 5678                   #kill the scheduler

Remove the files from the airflow folder if they exist (they will be created again):

airflow-scheduler.err
airflow-scheduler.pid
airflow-webserver.err
airflow-webserver.pid

Start the webserver and the scheduler again.

airflow webserver -D
airflow scheduler -D

-D will make the services run in the background.

Solution 9 - Airflow

I had a similar issue of a triggered DAG "running" indefinitely because its first task stuck in "queued" state.

I realized this was because of a "ghost" DAG that actually changed name. It seems that since the DAG has run in the past (had data in the postgresDG) and was referenced as child-DAG in other DAGs, the trigger of the parent DAGs referencing the old name would "resurrect" the old DAG name, but with the new code. Indeed the old DAG name and new DAG code did not match, thus producing an "infinite queued execution" bug.

Solution:

  1. Delete the all the previous DAG runs of the previous DAG-runs with the old name
  2. Restart everything (webserver, worker, executor,...) OR Delete relevant DAGs (with the "delete DAG" button in the UI).

The interpretation of the bug can vary but this fix worked in my case.

Solution 10 - Airflow

One of the very silly reasons could be that the DAG is "paused" which is the default state for the first time. I lost around 2 hrs fighting it. If you are using Airflow Web interface, then this shows up as a toggle next to your DAG in the list

Solution 11 - Airflow

One more thing to check is whether "the concurrency parameter of your DAG reached?".

I'd experienced the same situation when some task was shown as NO STATUS.

It turned out that my File_Sensor tasks were run with timeout set up to 1 week, while DAG time out was only 5 hours. That leaded to the case when the Files were missing, many sensors tasked were running at the same time. Which results the concurrency overloaded!

The depending tasks couldn't be started before the sensor task succeed, when the dag timeout, they got NO STATUS.

My solution:

  • Carefully set tasks and DAG timeout
  • Increase dag_concurrency in airflow.cfg file in AIRFLOW_HOME folder.

Please refer to the docs. https://airflow.apache.org/faq.html#why-isn-t-my-task-getting-scheduled

Solution 12 - Airflow

I believe this is an issue with celery version 4.2.1 and redis 3.0.1 as described here:

https://github.com/celery/celery/issues/3808

we resolved the issue by downgrading our redis version 2.10.6:

redis==2.10.6

Solution 13 - Airflow

In my case, tasks were not being launched because I had for all operators a pool configured and hadn't created it, hence, tasks were not even scheduled. An operator looks like:

foo = DummyOperator(
    task_id='foo',
    dag=dag,
    pool='capser'
)

To create a pool go to Admin > Pools > Create and set slots, for example, 128, which runs successfully for me. You can also configure by using the CLI.

Solution 14 - Airflow

counter intuitive UI message! I have spent days on this. So want to elaborate on my specific issue (s).

Each dag has a state. By default the state could be 'pause' or 'not pause'.

The first confusion arises from - what is the default state on startup? The UI message attached seems to indicate that the state is 'not pause' and on clicking the toggle, it pauses.

In reality, the default state is 'pause'. This state can be controlled by settings, environment variables, parameters and UI. I have detailed them below.

The second confusion arises because of the UI again. When we manually trigger a dag which is in the pause state. The UI shows the dag as running (green circle)! But the dag is actually in the 'pause' state. The tasks will not execute unless it is 'un-paused'.

If we read the task instance details. The message would be

Task is in the 'None' state which is not a valid state for execution. The task must be cleared in order to be run.

What is the 'None' state!? And clear which task?!

The actual problem is that the dag is in the pause state. On toggling the dag state the tasks would start to execute.

The pause state of the dag can be changed by

  • clicking the button on the UI.
  • set your particular dag to run, by adding the below parameter to your dag
DAG(dag_id='your-dag', is_paused_upon_creation=True)

  • setting the config variable in airflow.cfg file. (caution: this will start all your dags including the example ones)
dags_are_paused_at_creation = FALSE
  • configuring an environment variable before starting up the scheduler/webserver.(caution: this will start all your dags including the example ones)
AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION=False

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionl0n3r4n83rView Question on Stackoverflow
Solution 1 - Airflowtobi6View Answer on Stackoverflow
Solution 2 - AirflowTaylor D. EdmistonView Answer on Stackoverflow
Solution 3 - AirflowNicoKoweView Answer on Stackoverflow
Solution 4 - AirflowKevin LiView Answer on Stackoverflow
Solution 5 - AirflowShahbaz AliView Answer on Stackoverflow
Solution 6 - AirflowPrithu SrinivasView Answer on Stackoverflow
Solution 7 - Airflowemote_controlView Answer on Stackoverflow
Solution 8 - AirflowdasilvadanielView Answer on Stackoverflow
Solution 9 - AirflowRuben1View Answer on Stackoverflow
Solution 10 - AirflowKrishna Chaitanya AmmanabroluView Answer on Stackoverflow
Solution 11 - AirflowNhat Cuong HaView Answer on Stackoverflow
Solution 12 - Airflowrandal25View Answer on Stackoverflow
Solution 13 - AirflowTomás Denis Reyes SánchezView Answer on Stackoverflow
Solution 14 - Airflowuser3733528View Answer on Stackoverflow