web-dev-qa-db-ja.com

Airflowタスク/ Dagを並行して実行する

いくつかのpythonスクリプトをオーケストレーションするためにエアフローを使用しています。いくつかのサブダグが実行される「メイン」DAGがあります。私のメインDAGは次の概要に従って実行されるはずです:

enter image description here

次の行を使用して、メインのDAGでこの構造に到達できました。

etl_internal_sub_dag1 >> etl_internal_sub_dag2 >> etl_internal_sub_dag3
etl_internal_sub_dag3 >> etl_adzuna_sub_dag
etl_internal_sub_dag3 >> etl_adwords_sub_dag
etl_internal_sub_dag3 >> etl_facebook_sub_dag
etl_internal_sub_dag3 >> etl_pagespeed_sub_dag

etl_adzuna_sub_dag >> etl_combine_sub_dag
etl_adwords_sub_dag >> etl_combine_sub_dag
etl_facebook_sub_dag >> etl_combine_sub_dag
etl_pagespeed_sub_dag >> etl_combine_sub_dag

私が気流にしたいことは、最初にetl_internal_sub_dag1 そうして etl_internal_sub_dag2、次にetl_internal_sub_dag3etl_internal_sub_dag3終了しましたetl_adzuna_sub_dagetl_adwords_sub_dagetl_facebook_sub_dagetl_pagespeed_sub_dag並列実行します。最後に、これらの最後の4つのスクリプトが完了したら、etl_combine_sub_dag 走る。

ただし、メインのDAGを実行すると、etl_adzuna_sub_dagetl_adwords_sub_dagetl_facebook_sub_dagetl_pagespeed_sub_dagは1つずつ実行され、並行して実行されません。

質問:スクリプトを確認するにはどうすればよいですかetl_adzuna_sub_dagetl_adwords_sub_dagetl_facebook_sub_dagetl_pagespeed_sub_dagは並行して実行されますか?

Edit:My default_argsDAGは次のようになります。

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': start_date,
    'end_date': end_date,
    'email': ['[email protected]'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 0,
    'retry_delay': timedelta(minutes=5),
}

DAG_NAME = 'main_dag'

dag = DAG(DAG_NAME, default_args=default_args, catchup = False)
9
Mr. President

LocalExecutorを使用する必要があります。

設定(airflow.cfg)を確認してください。タスクをシリアルに実行するSequentialExectuorを使用している可能性があります。

Airflowは、バックエンドデータベースを使用してメタデータを格納します。 airflow.cfgファイルを確認し、executorキーワードを探します。デフォルトでは、AirflowはSequentialExecutorを使用します。これは、何があっても順次タスクを実行します。したがって、Airflowがタスクを並列で実行できるようにするには、PostgesまたはMySQLでデータベースを作成し、それをairflow.cfgsql_alchemy_conn param)で構成してから、executorをLocalExecutorに変更する必要がありますairflow.cfgを実行してから、airflow initdbを実行します。

LocalExecutorを使用するには、バックエンドデータベースとしてSQLiteではなくPostgresまたはMySQLを使用する必要があることに注意してください。

詳細: https://airflow.incubator.Apache.org/howto/initialize-database.html

Airflowの実際のテストドライブを利用する場合は、実際のデータベースバックエンドをセットアップし、LocalExecutorに切り替えることを検討する必要があります。 Airflowは、優れたSqlAlchemyライブラリを使用してメタデータと対話するように構築されているため、SqlAlchemyバックエンドとしてサポートされているデータベースバックエンドを使用できるはずです。 MySQLまたはPostgresの使用をお勧めします。

6
kaxil