Airflow 你好,Apache的世界不工作

Airflow 你好,Apache的世界不工作,airflow,Airflow,我正在学习ApacheAirflow并尝试编写HelloWorld版本 我已经用python版本3.8安装了apache airflow版本2.0,下面是包含dag和task的代码 import datetime import logging from airflow import DAG from airflow.operators.python import PythonOperator def greet_hello(): logging.info("Hello W

我正在学习ApacheAirflow并尝试编写HelloWorld版本

我已经用python版本3.8安装了apache airflow版本2.0,下面是包含dag和task的代码

import datetime
import logging

from airflow import DAG
from airflow.operators.python import PythonOperator


def greet_hello():
    logging.info("Hello World")


dag = DAG("FirstDag", start_date=datetime.datetime.now(),schedule_interval=None)

first_task = PythonOperator(python_callable=greet_hello , dag=dag , task_id="first-task")
我以以下方式配置了apache airflow

  • pip在venv中安装apache气流
  • 创建用户
  • 气流db init
  • 气流网络服务器
  • 气流调度器
  • 我可以在UI中看到Dag

    但当我检查任务实例详细信息时,我会看到下面的消息

    “任务实例状态任务处于“无”状态,这不是执行的有效状态。必须清除该任务才能运行。”

    即使调度程序正在运行,我也会在UI中看到下面的消息


    当我转到“图形视图”并将鼠标悬停在第一个任务上时,它会显示“尚未启动”。我正在努力找出我到底出了什么错,以及如何解决它。谢谢

    我认为这里有两个问题

  • DAG本身似乎已暂停。您需要将其设置为
    活动
    ,以便安排任务

  • 调度程序警报可能会给您提供稍微误导的信息。气流涉及多个同时运行的独立进程。它使用“心跳”来跟踪调度程序进程是否处于活动状态。换句话说,计划程序正在定期与另一个气流进程签入。如果调度程序在预定的时间内没有发出心跳,则无法确定调度程序是否仍处于活动状态,因此会出现此错误

  • 这是误导的原因,因为这可能只是意味着调度程序配置为心跳频率低于“正常”截止时间间隔。这通常发生在局部使用气流时。默认配置设置为最小化系统资源,因此心跳可能不频繁

    这很容易检查

  • 查看airflow正在使用什么值来确定调度器最近是否发出了心跳信号
  • 在我的机器上,如果调度程序在过去30秒内返回心跳,那么airflow会认为它是健康的

  • 检查心率值。这是调度程序签入以指示其正常运行的频率
  • 这里,气流每5秒检查一次

    如果
    scheduler\u heartbeat\u sec
    scheduler\u health\u check\u threshold
    ,您将看到指示的消息。这并不意味着任何东西都坏了,只是意味着不确定调度程序是否处于活动状态

  • 要确保调度程序正在运行,请检查用于运行调度程序的任何终端窗口。如果它定期输出日志,而您没有看到任何错误,那么它应该可以正常工作

  • 检查计划程序上次发出心跳的时间
    http://localhost:8080/health
    (或本地使用的任何端口)。不要担心
    状态
    值,因为它是用与
    心跳
    心率
    相同的逻辑生成的。但是
    latest\u scheduler\u heartbeat
    将告诉您调度器最近什么时候有心跳


  • 切勿将
    datetime.datetime.now()用作
    开始日期
    。请阅读以了解原因

    开始日期应尽可能保持静态


    其次,正如James所建议的,确保
    unpause
    DAG来自Web服务器,或者在创建DAG对象时将
    设置为
    True
    ,检查调度程序的运行状况…显示运行状况良好,并且在调度程序的日志中没有错误。是否执行其他步骤,包括确保DAG处于活动状态?停止并重新启动您的计划程序也不会有什么坏处。我能够按照您提到的步骤解决问题。非常感谢
    $ airflow config get-value scheduler scheduler_health_check_threshold
    
    30
    
    $ airflow config get-value scheduler scheduler_heartbeat_sec
    
    5