web-dev-qa-db-ja.com

Airflowスケジューラが後続のタスクをスケジュールするのに時間がかかる

Airflow 1.8.0でDAGを実行しようとすると、先行タスクの完了時間と後続タスクが実行のためにピックアップされる時間(通常、個々のタスクの実行時間が長くなる)の間に長い時間がかかることがわかりました)。同じことが、シーケンシャル、ローカル、およびセロリエグゼキュータのシナリオです。上記のオーバーヘッド時間を減らす方法はありますか? (DAGの実行を高速化できるairflow.cfgのパラメーターと同様に?)参照用にガントチャートが追加されました。 Gantt chart

15
Prasann

Nickが言ったように、Airflowはリアルタイムのツールではありません。タスクはできるだけ早くスケジュールされて実行されますが、次のタスクが最後のタスクの直後に実行されることはありません。

それぞれに〜3個のタスクがある〜100個を超えるDAGまたは多くのタスク(〜100個以上)を含むDAGがある場合は、3つのことを考慮する必要があります。

  1. DagFileProcessorManagerがDags(airflow.cfg)の読み込みと実行に使用するスレッドの数を増やします。

【スケジューラー】

max_threads = 2

Max_threadsは、選択され、実行/終了されるDAGの数を制御します( ここを参照 )。

この構成を増やすと、タスク間の時間を短縮できます。

  1. Airflowデータベースを監視して、ボトルネックがないか確認します。 Airflowデータベースは、プロセスの管理と実行に使用されます。

最近、私たちは同じ問題に苦しんでいました。タスク間の時間は約10〜15分で、AWSでPostgreSQLを使用していました。

インスタンスはリソースを十分に使用していませんでした。 〜20 IOPS、メモリの20%、CPUの〜10%。ただし、Airflowは非常に低速でした。

PgHeroを使用してデータベースのパフォーマンスを調べたところ、小さなテーブルでインデックスを使用したクエリでさえ、1秒以上を費やしていることがわかりました。

そのため、データベースのサイズを増やし、Airflowはロケットと同じくらい高速で実行されています。 :)

  1. AirflowがDagsの読み込みに費やしている時間を取得するには、次のコマンドを実行します。

エアフローlist_dags -r

DagBag解析時間:7.9497220000000075

DagBagの解析時間が5分より長い場合は、問題である可能性があります。

これらすべてにより、Airflowをより高速に実行することができました。このバージョンで修正された多くのパフォーマンスの問題があるため、バージョン1.9にアップグレードすることをお勧めします

ところで、メタデータデータベースとしてLocalExecutorとPostgreSQLを使用して、本番環境でAirflowマスターを使用しています。

19

ガントチャートには、秒単位で表示されます。 Airflowは、リアルタイムのスケジューリングエンジンではありません。それは分単位のものを扱います。より高速に実行する必要がある場合は、エアフローとは異なるスケジューリングツールを検討することができます。または、すべての作業を1つのタスクにまとめることができるため、スケジューラーの遅延に悩まされることはありません。

2
Nick

各ワーカーがDAGバッグの充填に30秒以上費やしたため、DAG充填コードにパッチを適用する必要がありました。問題は、実行に長い時間がかかるmodels.py detect_downstream_cycleコードにあります。 list_dagsコマンドを使用した私のテストでは、ここに私の結果があります:

0
Don Iuppa