背景
luigi と airflow の使い勝手を比較したい。 現在は Makefile で ruby のワンライナーで日付を生成して xargs で make を呼んだりしている。
作業
luigi
airflow と比べるとすんなりできた。
airflow
以下にハマったところを書く。
自動生成されたファイルのコメントを読め!
initdb コマンドで作成される、airflow.cfg ファイル中の、dags_folder と、base_log_folder が絶対パス指定する必要があったこと。
これは、その設定ファイル中のコメントに
# This path must be absolute
と書かれているだけで、ドキュメントには特に何も書かれていない。
自動生成するならそのあたり自動で絶対パスにするか、エラーにするか、警告が欲しいところ。それにドキュメントにも書くべきじゃない?
ちなみにこれを書かなくても、testコマンドなどは通るが(ここが曲者)、run, backfill は通らない。
解決方法は、AIRFLOW_HOMEに絶対パス指定して、initdb コマンドを実行すれば、airflow.cfg 中の設定値は絶対パスとなる。
run は内部で使うコマンドだよ?
run は確かにチュートリアルにも出てこないけど、test はログに何も表示されないし、タスクの依存の検証とか、同時実行や重複実行の回避の検証には使えない。backfill は全タクス実行なので、検証としてはでかすぎる。だから runを使いたい。
しかし、run コマンドを使うと、再びrunを実行するexecutor を呼び出すようになっている。何言っているか分からないと思うが、 run コマンドを実行すると、内部でもう一度 run コマンドを実行するようになっている。
それも Makefile のように、依存関係のあるタスクに対して芋づる式には実行されない。ただし、依存関係のあるタスクが成功していないと失敗となる。
*失敗*:タスクは「成功」状態にあり実行すべき状態でない (exit 0)
以下の超意訳:
'Task Instance State' FAILED: Task is in the 'success' state which is not a valid state for execution. ... INFO - Task exited with return code 0
失敗なのか成功なのか始め分からなかった。「既にタスク実行済みでタスクを実行しない」という意味っぽい。
ログはタスク×日付時刻毎にファイルを分けて出力する!
流れが追いにくい…。
今日はここまで。