执行任务后气流调度程序似乎没有运行

Posted

技术标签:

【中文标题】执行任务后气流调度程序似乎没有运行【英文标题】:Airflow scheduler does not appear to be running after execute a task 【发布时间】:2019-12-31 06:36:26 【问题描述】:

当有任务运行时,Airflow 会弹出一个通知,说调度程序似乎没有运行,并且一直显示直到任务完成:

The scheduler does not appear to be running. Last heartbeat was received 5 minutes ago.

The DAGs list may not update, and new tasks will not be scheduled.

实际上,调度程序进程正在运行,因为我已经检查了该进程。任务完成后,提示消失,一切恢复正常。

我的任务有点繁重,可能要运行几个小时。

【问题讨论】:

【参考方案1】:

我认为它是 Sequential Executor 所期望的。顺序执行器一次运行一件事,因此它不能同时运行心跳和任务。

为什么需要使用 Sequential Executor / Sqlite?切换到其他 DB/Executor 的建议非常有意义。

【讨论】:

【参考方案2】:

我有同样的问题。 我通过更新 airflow.cfg 文件 > sql_alchemy_conn =postgresql+psycopg2://airflow@localhost:5432/airflow 切换到 postgresql 和executor = LocalExecutor

此链接可能有助于如何在本地进行设置 https://medium.com/@taufiq_ibrahim/apache-airflow-installation-on-ubuntu-ddc087482c14

【讨论】:

【参考方案3】:

您已启动airflow webserver,但尚未启动您的airflow scheduler。 在后台运行气流调度程序

airflow scheduler > /console/scheduler_log.log &

【讨论】:

不是,调度器正在运行【参考方案4】:

一个快速的解决办法是单独运行气流调度程序。也许不是最好的解决方案,但它确实对我有用。为此,请在终端中运行以下命令:

airflow scheduler

【讨论】:

【参考方案5】:

我遇到了类似的问题,并且一直在尝试解决此问题。

我设法通过在 airflow.cfg 中设置这个值来修复它:

scheduler_health_check_threshold = 240

PS:根据 Airflow Slack 社区最近的一次对话,这可能是由于数据库端的争用而发生的。因此,建议的另一个解决方法是scale up 数据库。就我而言,这不是一个可行的解决方案。

【讨论】:

【参考方案6】:

我已经通过删除airflow-scheduler.pid 文件解决了这个问题。 然后 气流调度器-D

【讨论】:

【参考方案7】:

我在使用 sqlite 时遇到了同样的问题。 Airflow 日志中有一条特殊消息:ERROR - Cannot use more than 1 thread when using sqlite. Setting max_threads to 1。如果只使用 1 个线程,则调度程序在执行 dag 时将不可用。

所以如果使用 sqlite,请尝试切换到另一个数据库。如果没有,请检查 airflow.cfg 中的 max_threads 值。

【讨论】:

它不工作,仍然显示相同。我修改了max_threads=10,重启了调度器。 你使用哪个数据库? 我用的是mysql数据库。【参考方案8】:

在 Composer 页面上,点击您的环境名称,它将打开 Environment details,转到 PyPIPackages 选项卡。

点击Edit按钮,增加任意包版本。

例如:

我增加了pymsql包的版本,这重启了airflow环境,花了一段时间才更新。完成后,我不再有此错误。

你也可以添加一个Python包,它会重启airflow环境。

【讨论】:

【参考方案9】:

更改气流时区后,我遇到了同样的问题。然后我重新启动了气流调度程序,它可以工作了。您还可以检查气流调度程序和气流工作人员是否在不同的服务器上。

【讨论】:

【参考方案10】:

检查 airflow-scheduler.errairflow-scheduler.log 文件。

我收到这样的错误:

Traceback(最近一次调用最后一次): 文件“/home/myVM/venv/py_env/lib/python3.8/site-packages/lockfile/pidlockfile.py”,第 77 行,在获取中 write_pid_to_pidfile(self.path) 文件“/home/myVM/venv/py_env/lib/python3.8/site-packages/lockfile/pidlockfile.py”,第 161 行,在 write_pid_to_pidfile pidfile_fd = os.open(pidfile_path, open_flags, open_mode) FileExistsError:[Errno 17] 文件存在:'/home/myVM/venv/py_env/airflow-scheduler.pid'

我删除了现有的 airflow-scheduler.pid 文件,并通过 airflow scheduler -D 再次启动了调度程序。那时它工作得很好。

【讨论】:

【参考方案11】:

将执行者从SequentialExecutor 更改为LocalExecutor 后,它可以工作了!

airflow.cfg:

executor = LocalExecutor

【讨论】:

我需要使用 SequentialExecutor。 仅供参考:airflow.apache.org/docs/apache-airflow/stable/executor/… SequentialExecutor 是您首次安装气流时的默认执行程序。它是唯一可以与 sqlite 一起使用的执行器,因为 sqlite 不支持多个连接。这个执行器一次只会运行一个任务实例。对于生产用例,请使用其他执行器。

以上是关于执行任务后气流调度程序似乎没有运行的主要内容,如果未能解决你的问题,请参考以下文章

气流回填不起作用

如何使用气流检查长时间运行的 http 任务的状态?

每月日期和时间的气流 DAG 调度

气流:任务调度间隔数秒,两次

使用 Azure SQL 服务器作为后端数据库运行 Apache Airflow

气流将长时间运行的任务标记为失败