【发布时间】:2017-12-15 15:02:41
【问题描述】:
我正在设置气流,以便网络服务器在一台机器上运行,而调度程序在另一台机器上运行。两者共享相同的 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 运行并将它们转换为任务实例不感兴趣。
不确定我在此处的设置中缺少什么。这么几个问题:
- 何时以及如何填充位于 $AIRFLOW_HOME/dags 的 DAGS 文件夹?我认为它是在网络服务器启动时。但是如果我只是在另一台机器上启动调度程序,那台机器上的 DAGS 文件夹将如何被填满?
- 目前,我只在托管网络服务器的机器上执行气流 initdb,而不是在调度程序上。希望这是正确的。
我可以为调度程序启用调试日志以获取更多可能指示缺少什么的日志吗?从当前日志来看,它看起来只是在本地系统上的 DAGS 文件夹中查找,并且没有发现 DAGS(甚至没有示例),尽管配置加载示例设置为 True。
不认为这很重要,但我目前正在使用 LocalExecutor
感谢任何帮助。
编辑:我知道我需要按照气流文档的建议在机器之间同步 DAGS 文件夹,但不确定这是否是调度程序在上述情况下没有接收任务的原因。
【问题讨论】:
-
我认为您应该将 dags(.py 脚本)部署到 $AIRFLOW_HOME/dags 目录中,如气流.conf 文件中所指定的那样。调度程序是在 dags 目录中查找、提取它们并将它们添加到 dag bag 的服务。要打开调试,您可以编辑 settings.py 文件,将 LOGGING_LEVEL 设置为 1logging.DEBUG1 并重新启动服务,例如github.com/apache/incubator-airflow/blob/master/airflow/…我认为最好忽略这些示例 dag,并尝试根据教程创建一个
-
我的意思是,如果气流.cfg 说要加载示例,那么如果 Dags 文件夹中没有自创建的 dag,调度程序也应该工作。
标签: scheduler distributed airflow apache-airflow airflow-scheduler