web-dev-qa-db-ja.com

Airflowスケジューラーが次のサイクルを開始する前に、最初に前日のサイクルを終了することは可能ですか?

現在、DAGのノードは、そのDAGの残りのノードが終了する前に、翌日のタスクに進みます。残りのDAGが終了するのを待ってから、次の日のDAGサイクルに移動する方法はありますか?

(私はdepends_on_pastをtrueとして持っていますが、この場合は機能しません)

私のDAGは次のようになります。

               O
               l
               V
O -> O -> O -> O -> O

また、ダグのツリービュー写真]

tree view pic of the dag

12
user3542930

この回答には少し遅れるかもしれませんが、同じ問題が発生し、それを解決する方法は、各データに2つのタスクを追加することです。最初は「前へ」、最後は「完了」。前のタスクは、前のジョブを監視する外部タスクセンサーです。 Completeは単なるダミー演算子です。 30分ごとに実行されるため、dagは次のようになります。

dag = DAG(dag_id='TEST_DAG', default_args=default_args, schedule_interval=timedelta(minutes=30))

PREVIOUS = ExternalTaskSensor(
    task_id='Previous_Run',
    external_dag_id='TEST_DAG',
    external_task_id='All_Tasks_Completed',
    allowed_states=['success'],
    execution_delta=timedelta(minutes=30),
    dag=DAG
)

T1 = BashOperator(
    task_id='TASK_01',
    bash_command='echo "Hello World from Task 1"',
    dag=dag
)

COMPLETE = DummyOperator(
    task_id='All_Tasks_Completed',
    dag=DAG
)

PREVIOUS >> T1 >> COMPLETE

したがって、次のダグは、キューに入ったとしても、PREVIOUSが完了するまでタスクを実行させません。

13
Oleg Yamin

一度に1つのインスタンスだけを実行する場合は、max_active_runs = 1を設定してみてください

3
user7126545