web-dev-qa-db-ja.com

Airflow 1.9.0は​​キューイングされていますが、タスクを起動していません

気流はランダムにキューに入れられたタスクを実行していません。一部のタスクはキューに入れられたステータスさえ取得しません。スケジューラのログで以下を見続けます

 [2018-02-28 02:24:58,780] {jobs.py:1077} INFO - No tasks to consider for execution.

データベースには、ステータスがないか、キューに登録されたステータスのタスクが表示されますが、開始されません。

気流のセットアップは、Redisを使用したECSで https://github.com/puckel/docker-airflow を実行しています。 4つのスケジューラスレッドと4つのCeleryワーカータスクがあります。実行されていないタスクの場合、タスクアイコンにマウスポインターを合わせるとnullになり、タスクの詳細は次のように表示され、キュー状態(灰色のアイコン)で表示されます。

    All dependencies are met but the task instance is not running. In most cases this just means that the task will probably be scheduled soon unless:- The scheduler is down or under heavy load

スケジューラーのメトリックは、大きな負荷を示しません。 DAGは非常にシンプルで、2つの独立したタスクが最後の実行にのみ依存しています。同じdagには、ステータスなしでスタックしているタスクもあります(白いアイコン)。

注目すべき興味深いことは、スケジューラーを再起動すると、タスクが実行状態に変わることです

29
l0n3r4ng3r

気流の設定は少し難しい場合があります。

  • airflow schedulerを実行していますか?
  • airflow webserverを実行していますか?
  • 実行するすべてのDAGがWeb UIでOnに設定されていることを確認しましたか?
  • 実行するすべてのDAGには過去の開始日がありますか?
  • 実行するすべてのDAGには、Web UIに表示される適切なスケジュールがありますか?
  • 他に機能しない場合は、Web UIを使用してDAGをクリックし、Graph Viewをクリックします。最初のタスクを選択し、タスクインスタンスをクリックします。段落タスクインスタンスの詳細では、DAGが待機中または実行されていない理由がわかります。

たとえば、誤ってdepends_on_past: Trueに設定されたDAGがあり、現在のインスタンスが正しく起動することを禁止しています。

また、ドキュメントに直接記載されている優れたリソースには、さらにいくつかのヒントがあります。 タスクがスケジュールされないのはなぜですか?

39
tobi6

私はpuckel/docker-airflowレポジトリのフォークも実行していますが、ほとんどがAirflow 1.8で約1年間、1000万以上のタスクインスタンスを使用しています。この問題は1.9でも続いていると思いますが、私は前向きではありません。

何らかの理由で、Airflowスケジューラには、時間の経過とともにパフォーマンスが低下するという長年の問題があるようです。スケジューラのコードを確認しましたが、通常のスケジュールに戻すために新たに開始したときの正確な相違点についてはまだわかりません。大きな違いの1つは、スケジュールされたタスクとキューに入れられたタスクの状態が再構築されることです。

Scheduler Basics Airflow wikiには、スケジューラーの仕組みとそのさまざまな状態に関する簡潔なリファレンスがあります。

ほとんどの人は、スケジューラを定期的に再起動することで、スケジューラのスループットの問題を解決します。個人的には1時間間隔で成功しましたが、5〜10分ごとに使用されることも頻繁にあります。タスクの量、タスクの期間、および並列処理の設定は、再起動間隔を試すときに考慮する価値があります。

詳細については、以下を参照してください。

これは SCHEDULER_RUNS config設定 を使用してすべてのX実行を再起動することで対処されていましたが、その設定はデフォルトのsystemdスクリプトから 最近削除されました でした。

Airflow devメーリングリスト への投稿を検討することもできます。私はこれが数回そこで議論されたことを知っています、そして、コア貢献者の1人は追加の文脈を提供できるかもしれません。

関連する質問

12
Taylor Edmiston

私は今日問題に直面しており、tobi6以下の回答からの箇条書き4が解決し、問題を解決したことがわかりました

*'Do all the DAGs you want to run have a start date which is in the past?'*

エアフローバージョンv1.10.3を使用しています

4
Shahbaz Ali

私の問題はさらに一歩先にあり、タスクがキューに入っていることに加えて、Flower UIでセロリ労働者を見ることができませんでした。解決策は、セロリワーカーをルートとして実行していたため、〜/ .bashrcファイルを変更する必要があったということでした。

次の手順で機能しました。

  1. 〜/ .bashrcファイルにexport C_FORCE_ROOT = trueを追加します
  2. ソース〜/ .bashrc
  3. Run Worker:Nohup Airflow Worker $ * >>〜/ airflow/logs/worker.logs&

Http:// {Host}:5555でFlower UIを確認してください

1
Prithu Srinivas

これはセロリバージョン4.2.1とredis 3.0.1の問題で、ここで説明しているように思えます。

https://github.com/celery/celery/issues/3808

redisバージョン2.10.6をダウングレードすることで問題を解決しました。

redis==2.10.6

0
randal25

もう1つ確認する必要があるのは、「DAGの同時実行パラメーターに達しましたか?」です。

いくつかのタスクがNO STATUSと表示されたときに同じ状況を経験しました。

File_Sensorタスクは、timeoutを1週間に設定して実行されましたが、DAGのタイムアウトはわずか5時間でした。そのため、ファイルが欠落しており、タスクを実行している多くのセンサーが同時に実行されていました。結果はconcurrencyオーバーロードです!

センサータスクが成功する前に依存タスクを開始できませんでした。DAGがタイムアウトすると、NO STATUSになりました。

私の解決策:

  • タスクとDAGを慎重に設定timeout
  • AIRFLOW_HOMEフォルダーのairflow.cfgファイルのdag_concurrencyを増やします。

ドキュメントを参照してください。 https://airflow.Apache.org/faq.html#why-isn-t-my-task-getting-scheduled

0
Nhat Cuong Ha

私も同様の問題を抱えていましたが、それは主に合計で3000を超えるタスクインスタンス(30タスク* 44サブダグタスク)を持つSubDagOperatorに関連しています。

私が見つけたのは、airflow schedulerが主にスケジュールされたタスクを「キュースロット」(プール)に入れる役割を果たし、airflow celery workersがキューに入れられたタスクをピックアップし、[使用済み]スロット」(プール)を実行します。

説明に基づいて、schedulerは正常に機能するはずです。 「セロリワーカー」のログをチェックしてエラーがあるかどうかを確認するか、再起動して問題が解決するかどうかを確認することをお勧めします。セロリ労働者は通常、数分間ストライキを行ってから再び作業を開始するという問題をいくつか経験しました(特にSubDagOperatorで)

0
Kevin Li