45

私は Airbnb の airflow を使い始めたばかりでバックフィルがいつ、どのように行われるのかまだはっきりしていません。

具体的には、私を混乱させる2つのユースケースがあります:

  1. 数分間実行airflow schedulerし、1 分間停止してから再起動すると、DAG は最初の 30 秒ほど余分なタスクを実行しているように見えますが、その後は通常どおり (10 秒ごとに実行) 続行します。これらの余分なタスクは、以前の実行で完了できなかった「埋め戻された」タスクですか? もしそうなら、どうすれば気流にそれらのタスクをバックフィルしないように指示できますか?

  2. airflow scheduler数分間実行してから実行してからairflow clear MY_tutorial再起動airflow schedulerすると、大量の余分なタスクが実行されるようです。これらのタスクも何らかの形で「埋め戻された」タスクですか? それとも私は何かを逃していますか。

現在、私は非常に単純なダグを持っています:

default_args = {
    'owner': 'me',
    'depends_on_past': False,
    'start_date': datetime(2016, 10, 4),
    'email': ['airflow@airflow.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
    # 'queue': 'bash_queue',
    # 'pool': 'backfill',
    # 'priority_weight': 10,
    # 'end_date': datetime(2016, 1, 1),
}

dag = DAG(
    'MY_tutorial', default_args=default_args, schedule_interval=timedelta(seconds=10))

# t1, t2 and t3 are examples of tasks created by instantiating operators
t1 = BashOperator(
    task_id='print_date',
    bash_command='date',
    dag=dag)

t2 = BashOperator(
    task_id='sleep',
    bash_command='sleep 5',
    retries=3,
    dag=dag)

templated_command = """
    {% for i in range(5) %}
        echo "{{ ds }}"
        echo "{{ macros.ds_add(ds, 8)}}"
        echo "{{ params.my_param }}"
    {% endfor %}
"""

t3 = BashOperator(
    task_id='templated',
    bash_command=templated_command,
    params={'my_param': 'Parameter I passed in'},
    dag=dag)

second_template = """
    touch ~/airflow/logs/test
    echo $(date) >> ~/airflow/logs/test
"""

t4 = BashOperator(
    task_id='write_test',
    bash_command=second_template,
    dag=dag)

t1.set_upstream(t4)
t2.set_upstream(t1)
t3.set_upstream(t1)

気流構成で変更したのは2つだけです

  1. sqlite db の使用から postgres db の使用に変更しました
  2. CeleryExecutora の代わりに aを使用していますSequentialExecutor

助けてくれてどうもありがとう!

4

3 に答える 3

-1

Airflow の UI のオン/オフは「一時停止」のみを示します。つまり、オンの場合、トリガーされた時間にのみ一時停止し、オフの場合はその日付に再び続行します。

于 2018-03-20T07:53:35.360 に答える