Apache Airflowをとりあえず動かしてみた
業務でAirflowを触る必要があり、まずは公式のQuick Startを動かしてみました。
Airflowのバージョンは 2.1.0
です。
初期設定
今回はDocker環境で動かしていきます。
まずは docker-compose.yml
ファイルを取得します。
$ curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.1.0/docker-compose.yaml'
次に、必要なディレクトリやファイルを作成します。
$ mkdir ./dags ./logs ./plugins $ echo -e "AIRFLOW_UID=$(id -u)\nAIRFLOW_GID=0" > .env
下記コマンドを実行し、環境を構築します。
$ docker compose up airflow-init
次のように表示されれば成功です!
airflow-init_1 | Upgrades done airflow-init_1 | Admin user airflow created airflow-init_1 | 2.1.0 start_airflow-init_1 exited with code 0
起動する
下記コマンドで起動します。
$ docker-compose up
このとき、自分の環境ではメモリ不足でWebサーバーが落ちてしまいました。
airflow-quick-start_airflow-webserver_1 exited with code 137
こちらを参考に、Dockerの設定でメモリの割当を4GBにすることで、無事に起動できました。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9c06fbf786de 16cccc028183 "/usr/bin/dumb-init …" 2 hours ago Up 2 hours (healthy) 8080/tcp airflow_sample_airflow-scheduler_1 e601c630414d 16cccc028183 "/usr/bin/dumb-init …" 2 hours ago Up 2 hours (healthy) 0.0.0.0:5555->5555/tcp, :::5555->5555/tcp, 8080/tcp airflow_sample_flower_1 6f02639227ee 16cccc028183 "/usr/bin/dumb-init …" 2 hours ago Up 2 hours (healthy) 8080/tcp airflow_sample_airflow-worker_1 d46a5120352e 16cccc028183 "/usr/bin/dumb-init …" 2 hours ago Up 2 hours (healthy) 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp airflow_sample_airflow-webserver_1 452a7e7576c0 bc8d70f9ef6c "docker-entrypoint.s…" 2 hours ago Up 2 hours (healthy) 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp airflow_sample_redis_1 ad50aef1cb20 293e4ed402ba "docker-entrypoint.s…" 2 hours ago Up 2 hours (healthy) 5432/tcp airflow_sample_postgres_1
管理画面の表示
http://localhost:8080にアクセスすることで、Airflowの管理画面を表示することができます。
初期状態のUsernameとPasswordは、どちらも airflow
となっています。
管理画面上からジョブの確認や実行が可能です。
CLIから実行
コマンドラインからジョブの実行などを行うこともできます。
各コマンドについては、こちらのドキュメント
にまとまっています。
試しに、 example_complex
のジョブのスケジュールを開始して、ついでに実行もしてみます。
$ docker-compose run airflow-worker airflow dags unpause example_complex # スケジュールを開始 $ docker-compose run airflow-worker airflow dags trigger example_complex # ジョブを実行
管理画面を確認すると、コマンドが反映されていることがわかります。
REST APIから実行
あまり試していませんが、REST APIからも実行できるようです。
$ curl -X GET --user "airflow:airflow" "http://localhost:8080/api/v1/pools" { "pools": [ { "name": "default_pool", "occupied_slots": 0, "open_slots": 128, "queued_slots": 0, "running_slots": 0, "slots": 128 } ], "total_entries": 1 }
色々と便利そうなので、これからがっつり触っていきたいと思います!