web-dev-qa-db-ja.com

気流タスクが「キュー」ステータスでスタックし、実行されない

Airflow v1.8.1を使用しており、kubernetes&Dockerですべてのコンポーネント(ワーカー、Web、花、スケジューラ)を実行しています。 RedisでCelery Executorを使用していますが、タスクは次のようになります。

(start) -> (do_work_for_product1)
     ├  -> (do_work_for_product2)
     ├  -> (do_work_for_product3)
     ├  …

したがって、startタスクには複数のダウンストリームがあります。そして、以下のように同時実行関連の設定をセットアップします。

parallelism = 3
dag_concurrency = 3
max_active_runs = 1

次に、このDAGを手動で実行すると(スケジュールされたタスクで発生しないかどうかはわかりません)、一部のダウンストリームが実行されますが、他のダウンストリームは「キュー」ステータスのままになります。

管理UIからタスクをクリアすると、実行されます。ワーカーログはありません(最初のダウンストリームを処理した後、ログを出力しません)。

Webサーバーのログ(不明worker exitingは関連しています)

/usr/local/lib/python2.7/dist-packages/flask/exthook.py:71: ExtDeprecationWarning: Importing flask.ext.cache is deprecated, use flask_cache instead.
  .format(x=modname), ExtDeprecationWarning
[2017-08-24 04:20:56,496] [51] {models.py:168} INFO - Filling up the DagBag from /usr/local/airflow_dags
[2017-08-24 04:20:57 +0000] [27] [INFO] Handling signal: ttou
[2017-08-24 04:20:57 +0000] [37] [INFO] Worker exiting (pid: 37)

スケジューラーにもエラーログはありません。そして、私がこれを試すたびに立ち往生する多くのタスクが変化しています。

私もDockerを使用しているため、これが関連しているかどうか疑問に思います: https://github.com/puckel/docker-airflow/issues/94 しかしこれまでのところ、手がかりはありません。

誰かが同様の問題に直面しているか、この問題について私が調査できることを知っていますか?

19
Norio Akagi

立ち往生するタスクは、ほとんどの場合、バグです。現時点(<= 1.9.0alpha1)では、タスクが(リモート)ワーカーで起動することさえできない場合に発生する可能性があります。これは、たとえば、ワーカーの過負荷または依存関係の欠落の場合に発生します。

この patch はその問題を解決するはずです。

タスクが実行状態にならない理由を調査する価値があります。この状態に自分自身を設定することは、タスクが最初に行うことです。通常、ワーカーは実行を開始する前にログを記録し、レポートとエラーも行います。 taskログでこのエントリを見つけることができるはずです。

edit:気流がタスクを実行できない場合の1つが、必要なものに書き込むことができない場合の元の質問に対するコメントで述べたように場所。これにより、処理を続行できなくなり、タスクが停止します。パッチは、スケジューラからのタスクを失敗させることでこれを修正します。

6
Bolke de Bruin

私は同じdockerイメージpuckelに取り組んでいます。私の問題は以下によって解決されました:

交換

 result_backend = db+postgresql://airflow:airflow@postgres/airflow

celery_result_backend = db+postgresql://airflow:airflow@postgres/airflow

これは、puckelによる最新のプルで更新されると思います。変更は2018年2月に元に戻され、コメントは1月に行われました。

3
Rohan Sawant

ソリューションがあり、1.9が公式になる前にここで共有したいと思います。 1.9のBolke de Bruinの更新に感謝します。 1.9より前の私の状況では、現在1.8.1を使用しているのは、別のDAGを実行して、queue stateのタスクを30分以上そのままにしておく場合です。

2
Chengzhi

してみてください airflow schedulerairflow workerコマンド。

おもう airflow workerは各タスクを呼び出し、airflow scheduler 2つのタスク間で呼び出します。

0
Sheng Li