执行任务后气流调度程序似乎没有运行
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.err 和 airflow-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 不支持多个连接。这个执行器一次只会运行一个任务实例。对于生产用例,请使用其他执行器。以上是关于执行任务后气流调度程序似乎没有运行的主要内容,如果未能解决你的问题,请参考以下文章