web-dev-qa-db-ja.com

気流がバックフィルのダグランを防ぐ方法

バックフィルする意味がないエアフローDAGがあるとします。つまり、一度実行すると、その後すぐに実行してもまったく意味がなくなります。

たとえば、1時間ごとに更新されるだけのソースからデータベースにデータをロードする場合、連続して急速に発生するバックフィルは、同じデータを何度も何度もインポートすることになります。

これは、新しい1時間ごとのタスクをインスタンス化するときに特に面倒です。指定した間隔で実行を開始する前に、1時間ごとにN回実行し、冗長な作業を行います。

私が考えることができる唯一の解決策は、彼らが ドキュメントのFAQ で特にアドバイスしたものです

Start_dateとして動的な値を使用することはお勧めしません。特にdatetime.now()は混乱を招く可能性があるため、お勧めしません。

DAGのバックフィルを無効にする方法はありますか、または上記を行う必要がありますか?

42
m0meni

エアフローバージョン1.8にアップグレードし、airflow.cfgでcatchup_by_default = Falseを使用するか、各dagにcatchup = Falseを適用します。

https://github.com/Apache/incubator-airflow/blob/master/UPDATING.md#catchup_by_default

37
sage88

これは未解決のエアフローの問題のようです。まったく同じ機能が本当に欲しいと思っています。これは私が得た限りです。他の人に役立つかもしれません。

この問題に役立つUI機能(少なくとも1.7.1.3では)です。ツリービューに移動して特定のタスク(正方形のボックス)をクリックすると、ダイアログボタンに「成功をマーク」ボタンが表示されます。 「過去」をクリックしてから「成功にマーク」をクリックすると、DAG内のそのタスクのすべてのインスタンスに成功のラベルが付けられ、実行されません。最上位のDAG(上部の円)も同様に成功とラベル付けできますが、複数のDAGインスタンスにラベルを付ける方法はないようです。

まだ十分に検討していませんが、 'trigger_dag'サブコマンドを使用してDAGの状態をマークすることが可能かもしれません。こちらをご覧ください: https://github.com/Apache/incubator-airflow/pull/644/commits/4d30d4d79f1a18b071b585500474248e5f46d67d

DAGをマークするCLI機能は現在開発中です: http://mail-archives.Apache.org/mod_mbox/airflow-commits/201606.mbox/%3CJIRA.12973462.1464369259000.37918.1465189859133@Atlassian .JIRA%3Ehttps://github.com/Apache/incubator-airflow/pull/1590

更新(2016年9月28日):新しい演算子「LatestOnlyOperator」が追加されました( https://github.com/Apache/incubator-airflow/pull/1752 )ダウンストリームタスクの最新バージョンのみを実行します。非常に便利に聞こえますが、すぐにリリースされることを願っています

更新2:エアフロー1.8の時点で、LatestOnlyOperatorがリリースされました。

16
Ziggy Eunicien

Dag宣言でcatchup = Falseを設定すると、この正確な機能が提供されます。

コメントする「評判」はありませんが、catchup = Falseは(私によって)この正確な目的のために設計されたと言いたいと思います。さらに、1.10.1では、インスタンス化で明示的に設定されたときに機能していることを確認できます。ただし、デフォルトの引数に配置された場合、動作しません。ただし、18か月間Airflowを使用していませんでした。そのため、デフォルトの引数がキャッチアップで機能しない理由を調べる前に少し時間がかかります。

dag = DAG('example_dag',
        max_active_runs=3,
        catchup=False,
        schedule_interval=timedelta(minutes=5),
        default_args=default_args)
4
Ben Tallman