为什么我的Airflow任务被排队但没有运行?

10

我对Airflow还不熟悉,正尝试设置Airflow以运行ETL流水线。我已经成功安装了:

  1. Airflow
  2. PostgreSQL
  3. Celery
  4. RabbitMQ

我能够测试运行教程DAG。但是当我尝试调度任务时,调度程序能够将其添加到队列中(在UI上可以看到),但任务没有运行。请问有人能帮我解决这个问题吗?

下面是我的配置文件:

[core]

airflow_home = /root/airflow

dags_folder = /root/airflow/dags

base_log_folder = /root/airflow/logs

executor = CeleryExecutor

sql_alchemy_conn = postgresql+psycopg2://xxxx.amazonaws.com:5432/airflow

api_client = airflow.api.client.local_client


[webserver]


web_server_host = 0.0.0.0

web_server_port = 8080

web_server_worker_timeout = 120

worker_refresh_batch_size = 1

worker_refresh_interval = 30

[celery]

celery_app_name = airflow.executors.celery_executor

celeryd_concurrency = 16

worker_log_server_port = 8793

broker_url = amqp://rabbit:rabbit@x.x.x.x/rabbitmq_vhost

celery_result_backend = db+postgresql+psycopg2://postgres:airflow@xxx.amazonaws.com:5432/airflow


flower_host = 0.0.0.0

flower_port = 5555

default_queue = default

DAG: 这是我使用的教程DAG

我的 DAG 的开始日期为 -- 'start_date': datetime(2017, 4, 11),


确保您的worker和调度程序共享相同的celery_result_backend、相同的dags_folder和相同的broker_url - jhnclvr
@René Hoffmann 我确保了调度程序和工作进程的celery结果后端、DAG文件夹和broker_url相同,并启动了Airflow工作进程……但问题仍然存在……任务已经被调度,但没有任何运行。 - Deepak S
4个回答

13

你是否已经运行了Airflow的三个组件,即:

airflow webserver
airflow scheduler
airflow worker

如果只运行前两个任务,它们将被排队,但不会被执行。airflow worker将提供实际执行dags的工作进程。

另外顺带一提,celery 4.0.2目前与airflow 1.7或1.8不兼容。请改用celery 3。


1
@XiaWang - 你能指出任何支持文件或其他证明celery 4.0.2不兼容的吗?在apache github repo setup.py中,celery版本> = 3.1.17 - 这并没有真正告诉我们它是否受支持。 - Nick
@Nick 这是一个相对较新的报告,关于Apache的问题网页。我认为celery 4的依赖问题目前还没有解决。 - Xia Wang
1
@XiaWang - 感谢提供链接。很有趣,我没有看到这个问题,不知道是否还有其他问题。我使用celery 4.x没有出现任何异常。也许我们需要检查过去的dag运行依赖关系,以确定为什么事情没有运行正确。 - Nick
2
我也遇到了同样的问题,所有的作业都在排队但没有执行。我正在使用LocalExecuter(所以不需要运行“airflow worker”)。有什么解决方法吗? - MJK

0

我知道你的问题已经得到答复并与celery版本不匹配有关,但我也见过任务队列因为我将日志位置更改为airflow服务用户没有写入权限的地方而未运行。

在上面提出问题的示例airflow.cfg中: base_log_folder = /root/airflow/logs

我正在使用AWS EC2机器,并将日志更改为写入 base_log_folder = /mnt/airflow/logs

在UI中没有给出任何指示,说明任务为什么排队,它只是说“未知,所有依赖项都已满足……”给予airflow守护程序/服务用户写入权限解决了这个问题。


0
今天我也尝试升级到Airflow v1.8,但在使用celery和rabbitmq时遇到了困难。最终解决方法是将airflow.cfg中的librabbitmq(默认情况下使用amqp时会使用)更改为pyamqp。
broker_url = pyamqp://rabbit:rabbit@x.x.x.x/rabbitmq_vhost

(这是我得到灵感的地方:https://github.com/celery/celery/issues/3675


-3
如果LocalExecutor对你来说已经足够了,你可以随时回到它。我听说过一些关于CeleryExecutor的问题。
只需在airflow.cfg文件中更改executor = CeleryExecutorexecutor = LocalExecutor(大多数情况下是~/airflow/airflow.cfg)。
重新启动调度程序,就这样!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接