Apache Airflowをとりあえず動かしてみた

公式のAirflow Quick Startを試してみたので、手順などをまとめておきます。
2021.05.24

業務で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の設定

$ 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
}

色々と便利そうなので、これからがっつり触っていきたいと思います!