#はじめに
Apatch-AirflowはAirbnbがOSSとして公開した、ジョブスケジューリングソフトです。
普通のジョブスケジューリングツールとして使ってみたのですが、少し癖があります。
特徴としては
・プログラマー向き。スケジュール設定はCrontabの書式で書き、起動処理はPythonで書きます。
・ジョブの依存関係の変更が簡単で、視覚化してWebで確認できます。
・Web画面からは起動とステータスの確認のみ。ジョブのキャンセルはできません。
機能はデータ連携に特化しているという感じです。
##Airflowのインストール
本家のURL
まずpipを使ってインストール。pip install airflowは古いバージョン用なので、apache-airflowとapacheを入れる
pip install apache-airflow
次にDBの初期設定。レポジトリのSQLiteが作成されます。
実行するとConfigファイルが作られるので、他のDBを使用する場合もまず実行します
airflow initdb
インストールフォルダ直下にairflow.cfgができるのでそれを編集。
sql_alchemy_connのパラメータを修正。
mySQLの場合はこんな感じになります。
sql_alchemy_conn = [DB名]://[ユーザ名]:[パスワード]@[ホスト名]/[DB名]
sql_alchemy_conn = mysql://myName:myPassword@localhost/myDB
mySQLを使うのでpip install apache-airflow[mysql]
でmysqlのサブパッケージを取り込んでおく。
その後もう一度airflow initdb
を実行。
1.8系のときはOracleを使っていたのですが、1.10.2になってOracle未対応の設定が多くなり、
修正しきれなかったので、断念してmySQLを使用した。
DBのログ削除とかWebからできないので、使い慣れたDBを使えるに越したことはないです。
airflowはmySQLとPostgresを推奨。
##起動
Webサービスの起動。これでWebサイトから確認できます
airflow webserver
Scheduleサービスの起動。これがないとスケジュール起動しないです。
airflow scheduler
その他分散処理をするためには、CeleryのWorkerというサービスを起動します。
そのCeleryを使うにはRedisというインメモリ型のDBが必要だったりと、
芋ずる式に新しいソフトが必要になって大変です、新しいことをたくさん学べます。
##設定変更関係
いろいろありますが、まずはこの2つの設定を推奨。
他は慣れてきたら順次変更していけばいいと思います。
default_timezone
タイムゾーンの設定で、デフォルトはUTC。
catchup_by_default
デフォルトのTrueだと、例えば過去のスケジュール実行日を設定すると今時点まで順次実行します。
つまり1年前の起動日の日次実行のジョブを設定すると365回実行されます。
デフォルトをFalseにして、個別のDAGというジョブスケジュール設定内で、catchup = True
とした方がわかりやすいと思います。
なぜこんなことするの?と初めは疑問でしたが、指定日付だけ処理するプログラムだった場合こちらの方が便利です。
[core]
default_timezone = system
[scheduler]
catchup_by_default = False
#まとめ
ユーザよりのソフトではなく、尖った感じのソフトです。
自分の目的のために特化していて、それ以外は自分でやってといったスタイルのソフトです。
ユーザ登録もコマンドですし、ログ削除もデフォルトではなく、自分で用意する必要があります。
ただ逆に使っていくとソフト作成者の思考やわかったり、周辺技術を学べるのでおもしろいソフトです。
コミュニケーションが活発なので使ってみましたが、それもうなずけるソフトです。