Airflow:如何删除DAG?

时间:2016-11-17 09:59:25

标签: airflow

我已经启动了Airflow网络服务器并安排了一些骰子。我可以在网页GUI上看到这些dags。

如何删除特定DAG在Web GUI中的运行和显示?是否有Airflow CLI命令来执行此操作?

我环顾四周,但是在加载和安排DAG后,无法找到一个删除DAG的简单方法的答案。

18 个答案:

答案 0 :(得分:42)

编辑8/27/18 - Airflow 1.10现已在PyPI上发布!

https://pypi.org/project/apache-airflow/1.10.0/

如何完全删除DAG

我们现在在Airflow中使用此功能≥1.10!

向Airflow添加DAG删除的PR #2199(Jira:AIRFLOW-1002)现已合并,允许从所有相关表中完全删除DAG的条目。

核心delete_dag(...)代码现在是实验API的一部分,并且有可用的入口点via the CLIvia the REST API

CLI:

airflow delete_dag my_dag_id

REST API(在本地运行网络服务器):

curl -X "DELETE" http://127.0.0.1:8080/api/experimental/dags/my_dag_id

有关REST API的警告:确保生产中的Airflow集群uses authentication

安装/升级到Airflow 1.10(当前)

要升级,请运行:

export SLUGIFY_USES_TEXT_UNIDECODE=yes

或:

export AIRFLOW_GPL_UNIDECODE=yes

然后:

pip install -U apache-airflow

请务必首先查看UPDATING.md以获取完整详情!

答案 1 :(得分:17)

这是我使用PostgresHook和默认connection_id修改后的代码。

import sys
from airflow.hooks.postgres_hook import PostgresHook

dag_input = sys.argv[1]
hook=PostgresHook( postgres_conn_id= "airflow_db")

for t in ["xcom", "task_instance", "sla_miss", "log", "job", "dag_run", "dag" ]:
    sql="delete from {} where dag_id='{}'".format(t, dag_input)
    hook.run(sql, True)

答案 2 :(得分:12)

不确定为什么Apache Airflow没有明显而简单的方法来删除DAG

提起https://issues.apache.org/jira/browse/AIRFLOW-1002

答案 3 :(得分:10)

我刚写了一个脚本,删除了与特定dag相关的所有内容,但这只适用于MySQL。如果使用PostgreSQL,可以编写不同的连接器方法。最初由Lance在https://groups.google.com/forum/#!topic/airbnb_airflow/GVsNsUxPRC0发布的命令 我只是把它放在脚本中。希望这可以帮助。格式:python script.py dag_id

import sys
import MySQLdb

dag_input = sys.argv[1]

query = {'delete from xcom where dag_id = "' + dag_input + '"',
        'delete from task_instance where dag_id = "' + dag_input + '"',
        'delete from sla_miss where dag_id = "' + dag_input + '"',
        'delete from log where dag_id = "' + dag_input + '"',
        'delete from job where dag_id = "' + dag_input + '"',
        'delete from dag_run where dag_id = "' + dag_input + '"',
        'delete from dag where dag_id = "' + dag_input + '"' }

def connect(query):
        db = MySQLdb.connect(host="hostname", user="username", passwd="password", db="database")
        cur = db.cursor()
        cur.execute(query)
        db.commit()
        db.close()
        return

for value in query:
        print value
        connect(value)

答案 4 :(得分:5)

我编写了一个脚本,用于删除与默认SQLite DB的特定dag相关的所有元数据。这是基于耶稣在上面的回答,但改编自Postgres到SQLite。用户应将../airflow.db设置为相对于默认airflow.db文件(通常为~/airflow)存储script.py的位置。要执行,请使用python script.py dag_id

import sqlite3
import sys

conn = sqlite3.connect('../airflow.db')
c = conn.cursor()

dag_input = sys.argv[1]

for t in ["xcom", "task_instance", "sla_miss", "log", "job", "dag_run", "dag" ]:
    query = "delete from {} where dag_id='{}'".format(t, dag_input)
    c.execute(query)

conn.commit()
conn.close()

答案 5 :(得分:3)

Airflow 1.10.1已发布。从文件系统中删除相应的DAG之后,此版本增加了从Web UI删除DAG的功能。

请参阅此票证以获取更多详细信息:

[AIRFLOW-2657]添加了从Web ui删除DAG的功能

Airflow Links menu with delete icon

请注意,这实际上并没有从文件系统中删除DAG,您需要先手动执行此操作,否则DAG将被重新加载。

答案 6 :(得分:2)

Airflow中没有任何内置功能可以帮助您。要删除DAG,请将其从存储库中删除,并删除Airflow Metastore表中的数据库条目 - dag。

答案 7 :(得分:1)

您可以清除一组任务实例,就好像它们从未运行过:

airflow clear dag_id -s 2017-1-23 -e 2017-8-31

然后从dags文件夹中删除dag文件

答案 8 :(得分:1)

DAG-s可以在Airflow 1.10中删除,但是操作的过程和顺序必须正确。 有一个“鸡蛋和小鸡的问题”-如果在文件仍然存在的情况下从前端删除DAG,则会重新加载DAG(因为未删除文件)。如果先删除文件并刷新页面,则无法再从Web gui中删除DAG。 因此,让我从前端删除DAG的操作序列为:

  1. 删除DAG文件(在我的情况下,从管道存储库中删除并部署到气流服务器,尤其是调度程序)
  2. 请勿刷新Web GUI。
  3. 在Web GUI的DAGs视图(普通首页)中,单击“删除dag”-> enter image description here最右边的红色图标。
  4. 它会从数据库中清除此DAG的所有剩余内容。

答案 9 :(得分:0)

我遇到了鸡/蛋问题,我点击了正在运行的 DAG 实例的绿色小圆圈,它可以让你“标记为失败”等。我点击了“删除”,它不再卡住了。< /p>

答案 10 :(得分:0)

在新的气流版本中,用户界面中的 DAG 旁边有一个删除 dag(红色 x)按钮

enter image description here

答案 11 :(得分:0)

对于那些可以直接访问气流数据库的Postgres ws['I6']="123123123" wb.save(filename=path....) 控制台的用户,您只需执行以下请求即可删除DAG:

psql

类似的查询(稍有更改)适用于其他数据库,例如MySQL和SQLite。

答案 12 :(得分:0)

第一-> 从$ AIRFLOW_HOME / dags文件夹中删除DAG文件。 注意:根据您是否使用过子目录,您可能必须在子目录中进行挖掘以找到DAG文件并将其删除。

第二个-> 使用删除按钮(圆圈中的x)从Web服务器UI中删除DAG

答案 13 :(得分:0)

只是从mysql删除它,对我来说很好。从下表中删除它们:

  • dag

  • dag_constructor

  • dag_group_ship
  • dag_pickle
  • dag_run
  • dag_stats

(将来的版本中可能会有更多表) 然后重新启动Webserver和worker。

答案 14 :(得分:0)

基于@OlegYamin的回答,我正在执行以下操作以删除由postgres支持的dag,其中,气流使用y_test = tf.nn.softmax(test_network[0]) 模式。

public

警告:我不知道第一个删除查询的效果/正确性。只是一个需要的假设。

答案 15 :(得分:0)

版本> = 1.10.0:

airflow delete_dag <dag_id>

版本<= 1.9.0:

没有删除dag的命令,因此您需要先删除dag文件,然后再从气流元数据数据库中删除所有对dag_id的引用。

警告

您可以重置气流元数据库,将擦除所有数据,包括dag,但请记住,您还将擦除历史记录,池,变量等。

airflow resetdb然后是airflow initdb

答案 16 :(得分:-1)

从dags文件夹中删除dag(要删除),然后运行React is pretty flexible but it has a single strict rule: all React components must act like pure functions with respect to their props.

或者,您可以进入airflow_db并从dag表中手动删除这些条目(task_fail,xcom,task_instance,sla_miss,log,job,dag_run,dag,dag_stats)。

答案 17 :(得分:-5)

对于仍在寻找答案的人。在Airflow 1.8版本中,很难删除DAG,您可以参考上面的答案。但是自从1.9发布以来,你只需要

  

删除dags文件夹中的dag并重新启动webserver