web-dev-qa-db-ja.com

一度に1つのDAGのみを実行するようにAirflowを制限するにはどうすればよいですか?

次の実行の最初のタスクが実行される前に、DAG内のすべてのタスクをすべて終了させたい。

私にはmax_active_runs = 1がありますが、 this はまだ起こります。

default_args = {
'depends_on_past': True,
'wait_for_downstream': True,
'max_active_runs': 1,
'start_date': datetime(2018, 03, 04),
'owner': 'tin.nguyen',
'email': ['[email protected]'],
'email_on_failure': True,
'email_on_retry': False,
'retries': 3,
'retry_delay': timedelta(minutes=4)
}

dag = DAG('example', default_args=default_args, schedule_interval = schedule_interval)

(私のタスクはすべて前のタスクに依存しています。Airflowのバージョンは1.8.0です)

ありがとうございました

default_argumentsの代わりにDAG()の引数としてmax_active_runsを指定するように変更しました。

直接あなたの答えでそれを指していないが、私にアイ​​デアを与えてくれたSimonDに感謝します。

19

これを行うには、'max_active_runs': 1をDAGオブジェクトに渡す方法があります。 (1.7.1.3でも)この問題は発生しないため、設定方法に問題があるはずです。

DAGの例を次に示します。

dag_args = {
    'owner': 'Owner',
    'depends_on_past': False,
    'start_date': datetime(2018, 01, 1, 12, 00),
    'email_on_failure': False
}

sched = timedelta(hours=1)
dag = DAG(job_id, default_args=dag_args, schedule_interval=sched, max_active_runs=1)

DAGが実行しているタスクが実際にサブDAGである場合、max_active_runsもサブDAGに渡す必要があるかもしれませんが、これについては100%確実ではありません。

6
SimonD

実際には、環境変数としてDAG_CONCURRENCY = 1を使用する必要があります。私のために働いた。

0
karl j

Xcomsを使用してそれを行うことができます。最初に2 python演算子をDAGの「開始」および「終了」として受け取ります。フローを次のように設定します。

開始--->すべてのタスク---->終了

「end」は常に変数をプッシュします

last_success = context ['execution_date'] to xcom(xcom_Push)。 (PythonOperatorsでは、provide_context = Trueが必要です)。

そして、 'start'は常にxcom(xcom_pull)をチェックして、前のDagRunのexecution_dateまたはDAGのstart_date(プロセスを開始させるため)に等しい値を持つlast_success変数が存在するかどうかを確認します。

フォロード この答え

0
MB11