我正在设置气流,以便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运行并将它们转换为任务实例不感兴趣。
不知道我在这里的设置中缺少什么。这么几个问题:
我是否可以为调度程序启用调试日志以获取更多可以指示缺少的日志?从当前日志看起来它只是在本地系统上的DAGS文件夹中查找并且在那里找不到DAGS(甚至不是示例),尽管配置加载示例设置为True。
不要认为这很重要,但我目前正在使用LocalExecutor
任何帮助表示赞赏。
编辑:我知道我需要在机器上同步DAGS文件夹,因为气流文档建议但不确定这是否是调度程序在上述情况下没有完成任务的原因。
好的,我得到了答案 - 看起来调度程序在本地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