11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Airflowのsubdagは注意点多いよ

Last updated at Posted at 2019-10-22

言いたいこと

subdag使うなら注意点多いよ
Cloud ComposerとかAstronomerもオススメしないと言っているよ

subdagとは

複数のタスクをDAGとして切り出して、別のDAGから使える機能です。
公式ドキュメントでいうと、ここらへんに説明があります。

いいじゃん

Airlfowサービス提供者いわく「やめとけ」らしいです

(Airflowを使っているWePayさんも「We have shied away from using some of Airflow’s more exotic features, such as backfill, subdags」と言っています)

なんで悪いのか

いろいろ面倒な点があるっぽいです。各々の問題は対処出来るかもしれませんが…

Executorの問題

(Executor全般についてはAstronomerさんの記事がわかりやすいです)

SubDagOperatorではExecutorを指定する事が出来ます。
が、SequentialExecutor以外(CeleryExecutorやLocalExecutor)を使うのは危険らしく、公式ドキュメントには
「it is possible to specify an executor for the SubDAG. It is common to use the SequentialExecutor if you want to run the SubDAG in-process and effectively limit its parallelism to one. Using LocalExecutor can be problematic as it may over-subscribe your worker, running multiple tasks in a single slot」
とあったり、CeleryExecutorで問題が生じるらしいです。

が、SequentialExecutorだと並列して実行出来ない…

SubDag「Operator」が単一障害点

subdagを使うとSubDagOperator自体のタスクインスタンスも作られます。
Composerはこの点を問題視しており、「SubDag タスクを実行しているワーカーが終了すると、SubDag 内のすべてのタスクが失敗し、ワークフローの信頼性が低下します」と説明しています。

実際、(1)SubDagOperatorを実行、(2)workerに入ってSubDagOperatorのタスクのプロセスを殺すと、下図のように

  1. subdag中のタスクインスタンスは成功
  2. SubDagOperatorタスクインスタンスは失敗した状態になります。
  3. SubDagOperatorのdownstreamのタスクがupstream_failedで未実行

スクリーンショット 2019-10-22 10.19.29.png

スクリーンショット 2019-10-22 10.19.23.png

プール

(この部分は自信ないです…)
SubDagOperatorのソースコードに「 Airflow pool is not honored by SubDagOperator」とあるように、subdag+プールの挙動は怪しいです。

例えば、下図はsubdag中でたくさんタスク実行した時のプール状況ですが、Slotsよりも多くのタスクインスタンスが実行(Used Slots)されています。
スクリーンショット 2019-10-22 9.27.41.png

ソースコード眺めた感じ、

  • SubDagOperatorはBackfillJobでタスクインスタンスをキック
  • 普通のDAGはSchedulerJobでタスクインスタンスをキック
  • タスクインスタンスがプールが実行出来るかのチェックは、SchedulerJobでやっており、BackfillJob中ではやっていない?

のが原因ぽいです。

補足

この話は2019年10月の時点(Airflow1.10.2以前)の話ですが、少しずつ良くなっていくようです。

例えば、1.10.2ではSubDagOperatorは単にsubdagを実行するだけですが、masterのコードではsubdagが無ければ作り、すでにあればその終了を待ちます。
=SubDagOperator自体のリトライ時にsubdag内がリトライされず、SubDagOperatorが単一障害点であることの問題が起きにくい

11
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?