DAG 在 Web-UI 中不可见
Posted
技术标签:
【中文标题】DAG 在 Web-UI 中不可见【英文标题】:DAG not visible in Web-UI 【发布时间】:2016-12-23 21:31:33 【问题描述】:我是Airflow
的新手。我正在学习教程并编写以下代码。
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta
from models.correctness_prediction import CorrectnessPrediction
default_args =
'owner': 'abc',
'depends_on_past': False,
'start_date': datetime.now(),
'email': ['abc@xyz.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5)
def correctness_prediction(arg):
CorrectnessPrediction.train()
dag = DAG('daily_processing', default_args=default_args)
task_1 = PythonOperator(
task_id='print_the_context',
provide_context=True,
python_callable=correctness_prediction,
dag=dag)
在运行脚本时,它不会显示任何错误,但是当我在 Web-UI
中检查 dags
时,它不会显示在 菜单->DAGs下>
但我可以在菜单->浏览->工作
下看到预定的job
我也看不到 $AIRFLOW_HOME/dags 中的任何内容。应该只有这样吗?谁能解释一下原因?
【问题讨论】:
【参考方案1】:您在作业页面上看到的ScheduleJob
是调度程序的条目。那不是被安排的dag。
你的 $AIRFLOW_HOME/dags 是空的很奇怪。所有 dag 都必须位于 $AIRFLOW_HOME/dags 目录中(特别是在 airflow.cfg
文件中配置的 dags 目录中)。看起来您没有将实际的 dag 存储在正确的目录(dags 目录)中。
或者,有时您还需要重新启动网络服务器才能显示 dag(尽管这似乎不是这里的问题)。
【讨论】:
我是否需要运行 $AIRFLOW_HOME/dags 文件夹中的问题中提到的脚本? 是的,没错。您的所有 dag 定义(python 文件初始化 dag - 上面示例中的行dag = DAG(...)
)应该在您的 airflow.cfg 文件中配置的 DAGs 目录中的全局范围内。【参考方案2】:
检查airflow.cfg
中的dags_folder
变量。如果您有虚拟环境,则从主项目目录运行命令export AIRFLOW_HOME=$(pwd)
。请注意,运行 export AIRFLOW_HOME=$(pwd)
期望您的 dag 位于项目目录中的 dags
子目录中。
【讨论】:
【参考方案3】:运行airflow list_dags
检查 dag 文件的位置是否正确。
由于某种原因,在执行此操作之前,我没有在浏览器 UI 中看到我的 dag。一定是浏览器缓存或其他问题。
如果这不起作用,您应该使用 airflow webserver -p 8080 -D
重新启动网络服务器
【讨论】:
你知道如何解决浏览器UI问题吗? @EricBellet for meairflow list_dags
帮助快速修复,我不知道这个问题的根本原因
是的。使用气流网络服务器 -p 8080 -D 重新启动 UI 这是另一个快速修复
有时即使这样也需要一段时间才能工作。我刚才有一个经验,我按照这个答案中的所有说明进行操作,但是新的 DAG 仍然需要大约 3 分钟才能显示在 UI 中。在某个时候,也许我会深入研究配置设置,看看这是否是可以调整的刷新频率。
对于 Airflow 2,请尝试 airflow dags list
【参考方案4】:
我们需要澄清几件事:
-
绝不需要您自己运行 DAG 文件(除非您是 testing 它的语法错误)。这是调度器/执行器的工作。
要让调度程序(以及 Web 服务器)可以看到 DAG 文件,您需要将其添加到
dags_folder
(在 airflow.cfg
中指定。默认情况下它是 $AIRFLOW_HOME/dags
子文件夹)。
Airflow Scheduler 默认每 5 分钟检查一次 dags_folder
是否有新的 DAG 文件(由 airflow.cfg
中的 dag_dir_list_interval
管理)。因此,如果您只是添加了一个新文件,您有两种选择:
-
重启调度器
等到当前调度程序进程获取新的 DAG。
【讨论】:
啊,对我来说就是这样——我没有运行调度程序来获取新的 dag。谢谢!【参考方案5】:我也有同样的问题。要解决我需要运行调度程序
airflow scheduler
没有这个命令,我看不到我的新 DAG 顺便说一句:用户界面向我显示与该问题相关的警告:
调度程序似乎没有运行。最后一次心跳是在 9 秒前收到的。 DAG 列表可能不会更新,也不会安排新任务。
【讨论】:
【参考方案6】:检查Paused dags
。你的 DAG 可能已经结束了。如果您确定已正确添加 .py
文件,则使用 dag_id
手动键入 dag 的 url。例如http://AIRFLOW_URL/graph?dag_id=dag_id
。然后你可以看看 Airflow 是否接受了你的 dag。
【讨论】:
【参考方案7】:我有同样的问题。我将下载的 Airflow 放了两次,一次没有 sudo,一次使用 sudo。我使用的是 sudo 版本,其中的目录位于我的用户路径下。我只是运行了气流命令: export AIRFLOW_HOME=~/气流
【讨论】:
【参考方案8】:我遇到了同样的问题。就我而言,新 DAG 的权限不正确。
运行 ls -l
以查看新 DAG 的权限。对我来说,所有者被列为我自己,而不是默认气流用户(在我的情况下应该是 root
)。
一旦我更改了权限 (chown root:root <file_name>
),该文件立即显示在 Web UI 中。
【讨论】:
【参考方案9】:列出 dag 或重新启动网络服务器对我没有帮助。但重置 db 确实如此。
airflow db reset
【讨论】:
以上是关于DAG 在 Web-UI 中不可见的主要内容,如果未能解决你的问题,请参考以下文章