web-dev-qa-db-ja.com

シンプルなエアフローDAGを実行する方法

私はAirflowを初めて使用します。指定した日付に簡単なDAGを実行したいと思います。開始日、実行日、バックフィルの違いに苦労しています。また、DAGを実行するコマンドは何ですか?

ここに私が試したものがあります:

airflow run dag_1 task_1 2017-1-23

初めてそのコマンドを実行したとき、タスクは正しく実行されましたが、再試行したときに機能しませんでした。

ここに私が実行した別のコマンドがあります:

airflow backfill dag_1 -s 2017-1-23 -e 2017-1-24

このコマンドに何が期待できるかわかりません。 DAGは23から24まで毎日実行されますか?

上記の2つのコマンドを実行する前に、これを行いました。

airflow initdb
airflow scheduler 
airflow webserver -p 8085 --debug &

これが私のDAGです

from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta
default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2017, 1, 23, 12),
    'email': ['[email protected]'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG(
    'dag_1', default_args=default_args, schedule_interval=timedelta(1))

t1 = BashOperator(
    task_id='create_clients',
    bash_command='Rscript /scripts/Cli.r',
    dag=dag)

t2 = BashOperator(
    task_id='create_operation',
    bash_command='Rscript Operation.r',
    retries=3,
    dag=dag)

t2.set_upstream(t1)

スクリーンショット: ツリービュー

[〜#〜] update [〜#〜]

airflow run dag_1 task_1 2017-1-23T10:34
13
djohon

で一度実行すると

airflow run dag_1 task_1 2017-1-23

実行は保存され、再度実行しても、強制的に再実行を試みることはできません。

airflow run --force=true dag_1 task_1 2017-1-23

Airflow backfillコマンドは、開始日から終了日までに指定された期間に実行された実行を実行します。 DAGで設定したスケジュールによって異なります。24時間実行する必要がある1時間ごとにトリガーするように設定した場合、以前に実行した実行は再実行されません。

実行したことがないかのようにタスクをクリアできます

airflow clear dag_1 -s 2017-1-23 -e 2017-1-24

また、次のcliドキュメントも確認してください。 https://airflow.incubator.Apache.org/cli.html

19
Necravolver

開始日、実行日、埋め戻しの違い

バックフィルは、DAGを明示的に実行し、DAGをテスト/手動で実行/エラーが発生したDAGを再実行するために行われます。 CLIを使用してこれを行います

airflow backfill -s <<start_date>> <<dag>> 
#optionally provide -1 as start_date to run it immediately

start_dateは、名前が示すように、DAG定義が有効な日付です

execution_dateは、実行される日時です。これは、以下のようにDAGの個々のタスクをテストするときに提供します

airflow test <<dag>> <<task>> <<exec_date>>

dAGを実行するコマンドは何ですか

バックフィルは、DAGを明示的に実行するコマンドです。それ以外の場合は、DAGBAGフォルダーにDAGを配置するだけで、スケジューラはDAG定義で定義されたスケジュールに従って実行します

airflow backfill -s <<start_date>> <<dag>> 
#optionally provide -1 as start_date to run it immediately
3
Priyank Mehta