【问题标题】: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.

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

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

【问题讨论】:

    标签: airflow


    【解决方案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 不支持多个连接。这个执行器一次只会运行一个任务实例。对于生产用例,请使用其他执行器。
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2023-04-04
                    • 1970-01-01
                    • 1970-01-01
                    • 2023-03-30
                    • 2021-04-16
                    • 2015-09-26
                    相关资源
                    最近更新 更多