我已经启动了Airflow网络服务器并安排了一些骰子。我可以在网页GUI上看到这些dags。
如何删除特定DAG在Web GUI中的运行和显示?是否有Airflow CLI命令来执行此操作?
我环顾四周,但是在加载和安排DAG后,无法找到一个删除DAG的简单方法的答案。
答案 0 :(得分:42)
编辑8/27/18 - Airflow 1.10现已在PyPI上发布!
https://pypi.org/project/apache-airflow/1.10.0/
我们现在在Airflow中使用此功能≥1.10!
向Airflow添加DAG删除的PR #2199(Jira:AIRFLOW-1002)现已合并,允许从所有相关表中完全删除DAG的条目。
核心delete_dag(...)代码现在是实验API的一部分,并且有可用的入口点via the CLI和via 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。
要升级,请运行:
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
答案 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的功能
请注意,这实际上并没有从文件系统中删除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的操作序列为:
答案 9 :(得分:0)
我遇到了鸡/蛋问题,我点击了正在运行的 DAG 实例的绿色小圆圈,它可以让你“标记为失败”等。我点击了“删除”,它不再卡住了。< /p>
答案 10 :(得分:0)
答案 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
(将来的版本中可能会有更多表) 然后重新启动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