簡體   English   中英

如何在 Airflow 上重新啟動失敗的任務

[英]How to restart a failed task on Airflow

我正在使用LocalExecutor並且我的 dag 有3 個任務,其中任務(C)依賴於任務(A)。 任務(B)和任務(A)可以像下面這樣並行運行

A-->C

所以 task(A) 失敗了,但task(B) 運行良好 由於任務(A) 失敗,任務(C) 尚未運行。

我的問題是我如何單獨運行 Task(A) 以便 Task(C) 在Task(A) 完成並且 Airflow UI 將它們標記為成功后運行。

在用戶界面中:

  1. 轉到要更改的運行的 dag 和 dag run
  2. 單擊圖形視圖
  3. 點擊任務A
  4. 點擊“清除”

這會讓任務 A 再次運行,如果成功,任務 C 應該運行。 這是有效的,因為當您清除任務的狀態時,調度程序會將它視為之前沒有運行過此 dag 運行。

這是一個替代解決方案,您可以在其中清除並自動重試某些任務。 如果您只想清除某個任務,則不會使用 -d(下游)標志:

from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta


def clear_upstream_task(context):
    execution_date = context.get("execution_date")
    clear_tasks = BashOperator(
        task_id='clear_tasks',
        bash_command=f'airflow tasks clear -s {execution_date}  -t t1 -d -y clear_upstream_task'
    )
    return clear_tasks.execute(context=context)


# Default settings applied to all tasks
default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(seconds=5)
}


with DAG('clear_upstream_task',
         start_date=datetime(2021, 1, 1),
         max_active_runs=3,
         schedule_interval=timedelta(minutes=5),
         default_args=default_args,
         catchup=False
         ) as dag:
    t0 = DummyOperator(
        task_id='t0'
    )

    t1 = DummyOperator(
        task_id='t1'
    )

    t2 = DummyOperator(
        task_id='t2'
    )
    t3 = BashOperator(
        task_id='t3',
        bash_command='exit 123',
        on_failure_callback=clear_upstream_task
    )

    t0 >> t1 >> t2 >> t3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM