气流未在 /usr/local/airflow/dags 中加载 dag
Posted
技术标签:
【中文标题】气流未在 /usr/local/airflow/dags 中加载 dag【英文标题】:Airflow not loading dags in /usr/local/airflow/dags 【发布时间】:2018-01-14 00:42:16 【问题描述】:Airflow 似乎跳过了我添加到 /usr/local/airflow/dags 的 dags。
当我跑步时
airflow list_dags
输出显示
[2017-08-06 17:03:47,220] models.py:168 INFO - Filling up the DagBag from /usr/local/airflow/dags
-------------------------------------------------------------------
DAGS
-------------------------------------------------------------------
example_bash_operator
example_branch_dop_operator_v3
example_branch_operator
example_http_operator
example_passing_params_via_test_command
example_python_operator
example_short_circuit_operator
example_skip_dag
example_subdag_operator
example_subdag_operator.section-1
example_subdag_operator.section-2
example_trigger_controller_dag
example_trigger_target_dag
example_xcom
latest_only
latest_only_with_trigger
test_utils
tutorial
但这不包括 /usr/local/airflow/dags 中的 dags
ls -la /usr/local/airflow/dags/
total 20
drwxr-xr-x 3 airflow airflow 4096 Aug 6 17:08 .
drwxr-xr-x 4 airflow airflow 4096 Aug 6 16:57 ..
-rw-r--r-- 1 airflow airflow 1645 Aug 6 17:03 custom_example_bash_operator.py
drwxr-xr-x 2 airflow airflow 4096 Aug 6 17:08 __pycache__
气流是否需要满足其他条件才能识别 DAG 并加载它?
【问题讨论】:
【参考方案1】:在列出 dag 之前尝试 airflow db init。这是因为 airflow list_dags 列出了数据库中存在的所有 dag(而不是在您提到的文件夹中)。 Airflow initdb 将在数据库中为这些 dag 创建条目。
确保您已将环境变量 AIRFLOW_HOME 设置为 /usr/local/airflow。如果未设置此变量,则气流会在主气流文件夹中查找 dag,在您的情况下该文件夹可能不存在。
【讨论】:
【参考方案2】:您需要先设置气流并初始化数据库
export AIRFLOW_HOME=/myfolder
mkdir /myfolder/dags
airflow db init
你也需要创建一个用户
airflow users create \
--username admin \
--firstname FIRST_NAME \
--lastname LAST_NAME \
--role Admin \
--email admin@example.org
如果您正确完成了操作,您应该会在您的文件夹中看到airflow.cfg
。在那里你会找到dags_folder
,它显示了 dags 文件夹。
如果您已将 dag 保存在此文件夹中,您应该会在 dag 列表中看到它
airflow dags list
,或使用 UI 与
airflow webserver --port 8080
否则,再次运行airflow db init
。
【讨论】:
【参考方案3】:在我的例子中,dag 文件中的print(something)
阻止在命令行上打印 dag 列表。
如果上述解决方案不起作用,请检查您的 dag 中是否有打印行。
【讨论】:
【参考方案4】:如果airflow.cfg 配置指向不正确的路径,就会出现这种情况。
第 1 步: 转到 basepath/src/config/
第 2 步:打开airflow.cfg
文件
第 3 步:检查它应该指向您创建的 dags 文件夹的路径
dags_folder = /usr/local/airflow/dags
【讨论】:
【参考方案5】:可能有两个问题: 1.查看DAG python程序中创建DAG对象时给出的Dag名称
dag = DAG(
dag_id='Name_Of_Your_DAG',
....)
请注意,在很多情况下,给出的名称可能与 DAG 列表中已经存在的名称相同(因为如果您复制了 DAG 代码)。如果不是这种情况,那么 2. 检查在 Airflow 的配置文件中设置为 DAG 文件夹的路径。 您可以在系统上的任何位置创建 DAG 文件,但您需要在 Airflow 的配置文件中设置该 DAG 文件夹/目录的路径。
例如,我在主目录中创建了我的 DAG 文件夹,然后我必须在终端中使用以下命令编辑气流.cfg 文件:
在主目录或根目录创建 DAG 文件夹
$mkdir ~/DAG
在我安装了气流的气流目录中编辑气流.cfg
~/$cd airflow
~/airflow$nano airflow.cfg
在此文件中,将 dags_folder 路径更改为我们创建的 DAG 文件夹。
如果您仍然遇到问题,请重新安装 Airflow 并参考此link 以安装 Apache Airflow。
【讨论】:
这对我有帮助!我已将 DAG 复制到新文件中,但忘记更改 id。【参考方案6】:当我对 dags 文件夹中的 dag 进行更改时,我发现我必须重新启动 UI 的调度程序才能获取新的 dags。我发现当我更新 dag 时,它们会在我运行 airflow list_dags 时出现在列表中,只是在我重新启动调度程序之前不会出现在 UI 中。
首先尝试运行:
airflow scheduler
【讨论】:
【参考方案7】:示例文件不在 /usr/local/airflow/dags 中。您可以通过编辑airflow.cfg(通常在~/airflow 中)简单地将它们静音。在“核心”部分设置load_examples = False
。
有几个错误可能会导致您的 DAG 未在 list_dags
中列出。
-
您的 DAG 文件存在语法问题。要检查这一点,只需运行
python custom_example_bash_operator.py
并查看是否有任何问题。
查看文件夹是否为默认dag加载路径。对于一只新鸟,我建议只需创建一个新的 .py 文件并从这里 https://airflow.incubator.apache.org/tutorial.html
复制样本,然后查看测试 dag 是否出现。
确保 dag 文件中有 dag = DAG('dag_name', default_args=default_args)
。
【讨论】:
【参考方案8】:您能分享custom_example_bash_operator.py
中的内容吗? Airflow 扫描文件中的某些魔法以确定是否是 DAG。它会扫描airflow
和DAG
。
此外,如果您对 DAG 使用重复的 dag_id,它将被覆盖。正如您似乎源自示例 bash 运算符,您是否保留了 DAG example_bash_operator
的名称?尝试重命名它。
【讨论】:
这就是我的收获。我以为它会扫描DAG
对象,但实际上它首先会扫描文件中的字符串 DAG
和 airflow
,然后再尝试解析它。【参考方案9】:
是你的
custom_example_bash_operator.py
DAG 名称与其他名称不同吗? 如果是,请尝试重新启动调度程序甚至 resetdb。我通常将文件名也误认为是 dag 名称,因此最好将它们命名为相同的名称。
【讨论】:
【参考方案10】:尝试重新启动调度程序。当需要向 DAG Bag 添加新的 DAGS 时,需要重启调度器
【讨论】:
这不是真的。调度器在 dag bag 中获取新的 dag。【参考方案11】:dag = DAG(
dag_id='example_bash_operator',
default_args=args,
schedule_interval='0 0 * * *',
dagrun_timeout=timedelta(minutes=60))
当一个 DAG 被实例化时,它会以您在 dag_id 属性中指定的名称弹出。 dag_id 用作 DAG 的唯一标识符
【讨论】:
【参考方案12】:正在加载我的 dag,但我输入了错误的 DAG 名称。我期望 dag 由文件命名,但名称由 DAG 构造函数的第一个参数确定
dag = DAG(
'tutorial', default_args=default_args, schedule_interval=timedelta(1))
【讨论】:
是的,第一个元素是DAG id,可以看到变量列表here 各位大神,谢谢。我遇到了同样的问题 谢谢,我也犯了同样的错误,这个答案对我有帮助。 感谢您的回答,您节省了我下午剩下的时间!以上是关于气流未在 /usr/local/airflow/dags 中加载 dag的主要内容,如果未能解决你的问题,请参考以下文章