Airflow Webサーバーを起動し、いくつかのスケジュールを設定しました。 Web GUIでくぼみを見ることができます。
特定のDAGを実行から削除してWeb GUIに表示するにはどうすればよいですか?それを行うためのAirflow CLIコマンドはありますか?
見回したが、DAGがロードされてスケジュールされた後、DAGを削除する簡単な方法の答えが見つかりませんでした。
編集8/27/18-Airflow 1.10がPyPIでリリースされました!
https://pypi.org/project/Apache-airflow/1.10.0/
Airflow≥1.10でこの機能を使用できるようになりました!
PR #2199 (Jira: AIRFLOW-1002 )DAGの削除をAirflowに追加すると、関連するすべてのテーブルからDAGのエントリを完全に削除できるようになりました。
コア delete_dag(...) コードは実験的なAPIの一部であり、利用可能なエントリポイントがあります CLI経由 および 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クラスター 認証を使用 が本番環境であることを確認します。
アップグレードするには、次のいずれかを実行します。
export SLUGIFY_USES_TEXT_UNIDECODE=yes
または:
export AIRFLOW_GPL_UNIDECODE=yes
次に:
pip install -U Apache-airflow
詳細については、最初に PDATING.md を確認してください。
これは、デフォルトのconnection_idでPostgresHookを使用した私の適応コードです。
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)
Apache AirflowにDAGを削除する明白で簡単な方法がない理由がわからない
特定のDAGに関連するすべてを削除するスクリプトを作成しましたが、これはMySQL専用です。 PostgreSQLを使用している場合は、別のコネクタメソッドを記述できます。もともとLanceが https://groups.google.com/forum/#!topic/airbnb_airflow/GVsNsUxPRC に投稿したコマンドは、スクリプトに入れました。お役に立てれば。形式: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)
DAG-sはAirflow 1.10で削除できますが、アクションのプロセスとシーケンスは正しい必要があります。 「卵と鶏肉の問題」があります-ファイルがまだある間にフロントエンドからDAGを削除すると、DAGがリロードされます(ファイルは削除されないため)。最初にファイルを削除してページを更新すると、DAGはWeb GUIから削除できなくなります。したがって、フロントエンドからDAGを削除できる一連のアクションは次のとおりです。
デフォルトのSQLite DBの特定のデータに関連するすべてのメタデータを削除するスクリプトを作成しました。これは上記のイエスの答えに基づいていますが、PostgresからSQLiteに適応しました。ユーザーは、../airflow.db
を、デフォルトのairflow.dbファイルを基準にしてscript.pyが保存されている場所(通常は~/airflow
)に設定する必要があります。実行するには、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()
Airflowに組み込まれているものはありません。 DAGを削除するには、リポジトリから削除し、Airflowメタストアテーブルのデータベースエントリを削除します-dag。
一連のタスクインスタンスを、それらが実行されなかったかのようにクリアできます。
airflow clear dag_id -s 2017-1-23 -e 2017-8-31
そして、dagsフォルダーからdagファイルを削除します
それをmysqlから削除するだけで、私にとってはうまくいきます。それらを以下の表から削除します。
ダグ
dag_constructor
(将来のリリースではさらにテーブルが増える可能性があります)、ウェブサーバーとワーカーを再起動します。
バージョン> = 1.10.0:
エアフローバージョン1.10.2があり、airflow delete_dagコマンドを実行しようとしましたが、コマンドは次のエラーをスローします。
bash-4.2#airflow delete_dag dag_id
[2019-03-16 15:37:20,804] {settings.py:174}情報-settings.configure_orm():プール設定を使用しています。 pool_size = 5、pool_recycle = 1800、pid = 28224 /usr/lib64/python2.7/site-packages/psycopg2/init.py:144: UserWarning:psycopg2 wheelパッケージはリリース2.8から名前が変更されます。バイナリからインストールを続けるには、代わりに「pip install psycopg2-binary」を使用してください。詳細については、 http://initd.org/psycopg/docs/install.html#binary-install-from-pypi を参照してください。 "" ")これにより、指定されたDAGに関連する既存のすべてのレコードが削除されますProceed?(y/n)yトレースバック(最後の最後の呼び出し):args.func( args)ファイル「/usr/lib/python2.7/site-packages/airflow/utils/cli.py」、74行目、ラッパーでreturn f(* args、** kwargs)File "/ usr/lib/python2 7/site-packages/airflow/bin/cli.py "、行258、delete_dagでAirflowException(err)のairflow.exceptions.AirflowException:サーバーエラーを発生させます
Curlコマンドを使用して削除できますが。誰かがこのコマンドの実行について知っているか、これが知られているか、何か間違ったことをしている場合、私に知らせてください。
バージョン<= 1.9.0:
DAGを削除するコマンドはありません。したがって、まずDAGファイルを削除してから、気流メタデータデータベースからdag_idへのすべての参照を削除する必要があります。
エアフローメタデータベースをリセットできます。ダグを含むすべてを消去しますが、履歴、プール、変数なども消去することを忘れないでください。
airflow resetdb
、次にairflow initdb
Dagsフォルダーからdag(削除する)を削除し、airflow resetdb
を実行します。
または、airflow_dbに移動して、それらのエントリをdagテーブル(task_fail、xcom、task_instance、sla_miss、log、job、dag_run、dag、dag_stats)から手動で削除することもできます。
@OlegYaminの答えに基づいて、私はpostgresに裏打ちされた気流を削除するために次のことをしています。気流はpublic
スキーマを使用します。
delete from public.dag_pickle where id = (
select pickle_id from public.dag where dag_id = 'my_dag_id'
);
delete from public.dag_run where dag_id = 'my_dag_id';
delete from public.dag_stats where dag_id = 'my_dag_id';
delete from public.log where dag_id = 'my_dag_id';
delete from public.sla_miss where dag_id = 'my_dag_id';
delete from public.task_fail where dag_id = 'my_dag_id';
delete from public.task_instance where dag_id = 'my_dag_id';
delete from public.xcom where dag_id = 'my_dag_id';
delete from public.dag where dag_id = 'my_dag_id';
WARNING:最初の削除クエリの効果/正確性は不明です。それは単に必要であるという仮定です。