1

我正在设置气流,以便网络服务器在一台机器上运行,调度程序在另一台机器上运行。两者共享同一个 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. 目前,我只在托管网络服务器的机器上而不是在调度程序上执行气流 initdb。希望这是正确的。

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

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

任何帮助表示赞赏。

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

4

1 回答 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)))
    )

我在托管调度程序的机器上的本地 DAG 文件夹中添加了一个简单的 DAG,它也开始拾取其他 DAG 实例。

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

于 2017-12-18T06:52:44.943 回答