Airflow Scheduler没有拿起DA G运行

问题描述 投票:1回答:1

我正在设置气流,以便webserver在一台机器上运行,而调度程序在另一台机器上运行。两者共享相同的MySQL Metastore数据库。这两个实例在日志中都没有任何错误,但调度程序没有获取通过Web UI手动触发DAG创建的任何DAG运行。

MysQL中的dag_run表显示的条目很少,都处于运行状态:

mysql> select * from dag_run;
+----+--------------------------------+----------------------------+---------+------------------------------------+------------------+----------------+----------+----------------------------+
| id | dag_id                         | execution_date             | state   | run_id                             | external_trigger | conf   | end_date | start_date                 |
+----+--------------------------------+----------------------------+---------+------------------------------------+------------------+----------------+----------+----------------------------+
|  1 | example_bash_operator          | 2017-12-14 11:33:08.479040 | running | manual__2017-12-14T11:33:08.479040 |                1 | ��       }�.    | NULL     | 2017-12-14 11:33:09.000000 |
|  2 | example_bash_operator          | 2017-12-14 11:38:27.888317 | running | manual__2017-12-14T11:38:27.888317 |                1 | ��       }�.    | NULL     | 2017-12-14 11:38:27.000000 |
|  3 | example_branch_dop_operator_v3 | 2017-12-14 13:47:05.170752 | running | manual__2017-12-14T13:47:05.170752 |                1 | ��       }�.    | NULL     | 2017-12-14 13:47:05.000000 |
|  4 | example_branch_dop_operator_v3 | 2017-12-15 04:26:07.208501 | running | manual__2017-12-15T04:26:07.208501 |                1 | ��       }�.    | NULL     | 2017-12-15 04:26:07.000000 |
|  5 | example_branch_dop_operator_v3 | 2017-12-15 06:12:10.965543 | running | manual__2017-12-15T06:12:10.965543 |                1 | ��       }�.    | NULL     | 2017-12-15 06:12:11.000000 |
|  6 | example_branch_dop_operator_v3 | 2017-12-15 06:28:43.282447 | running | manual__2017-12-15T06:28:43.282447 |                1 | ��       }�.    | NULL     | 2017-12-15 06:28:43.000000 |
+----+--------------------------------+----------------------------+---------+------------------------------------+------------------+----------------+----------+----------------------------+
6 rows in set (0.21 sec)

但是,在另一台计算机上启动并连接到同一MySQL数据库的调度程序只是对与此数据库通信并实际运行这些DAG运行并将它们转换为任务实例不感兴趣。

不知道我在这里的设置中缺少什么。这么几个问题:

  1. 何时以及如何填充位于$ AIRFLOW_HOME / dags的DAGS文件夹?我认为它是在网络服务器启动的时候。但是如果我只是在另一台机器上启动调度程序,该机器上的DAGS文件夹将如何填满?
  2. 目前,我只在托管Web服务器的计算机上执行气流initdb,而不是在调度程序上。希望是对的。

我是否可以为调度程序启用调试日志以获取更多可以指示缺少的日志?从当前日志看起来它只是在本地系统上的DAGS文件夹中查找并且在那里找不到DAGS(甚至不是示例),尽管配置加载示例设置为True。

不要认为这很重要,但我目前正在使用LocalExecutor

任何帮助表示赞赏。

编辑:我知道我需要在机器上同步DAGS文件夹,因为气流文档建议但不确定这是否是调度程序在上述情况下没有完成任务的原因。

scheduler distributed airflow apache-airflow airflow-scheduler
1个回答
1
投票

好的,我得到了答案 - 看起来调度程序在本地DAG文件夹中有任何DAGS之前不会查询数据库。 job.py中的代码看起来像

ti_query = (
        session
        .query(TI)
        .filter(TI.dag_id.in_(simple_dag_bag.dag_ids))
        .outerjoin(DR,
            and_(DR.dag_id == TI.dag_id,
                 DR.execution_date == TI.execution_date))
        .filter(or_(DR.run_id == None,
                not_(DR.run_id.like(BackfillJob.ID_PREFIX + '%'))))
        .outerjoin(DM, DM.dag_id==TI.dag_id)
        .filter(or_(DM.dag_id == None,
                not_(DM.is_paused)))
    )

我在托管Scheduler的计算机上的本地DAG文件夹中添加了一个简单的DAG,它也开始接收其他DAG实例。

我们为此提出了一个问题 - https://issues.apache.org/jira/browse/AIRFLOW-1934

© www.soinside.com 2019 - 2024. All rights reserved.