Help us understand the problem. What is going on with this article?

Airflowのsubdagは注意点多いよ

言いたいこと

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が単一障害点であることの問題が起きにくい

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away