概要
Airflowとは、ワークフローエンジンの1種。
実行するタスクの依存関係をDAGを定義し、スケジュールや監視を設定したりしてタスクを実行させる。
Airflow Guides ( https://github.com/astronomer/airflow-guides ) 公式ドキュメント( https://airflow.apache.org/docs/stable/ )
GCPではAirflowのマネージドサービスであるCloud Composerというサービスが存在する。 Cloud Composerを手軽に利用するには、コストがかかるので、Docker(docker-airflow)を開発では利用する。
※この記事では、Airflowの起動までを記載しています。
アーキテクチャ
引用: https://github.com/astronomer/airflow-guides/blob/master/guides/airflow-components.md
4つの主なコンポーネントが存在。
- Webserver: UI
- Scheduler: ジョブのスケジューリング
- Executor: 実際にワークが行われるメカニズム
- Metadata Database: 他のコンポーネントの相互作用を決定するデータベース(通常はPostgres)
docker-airflowをインストールしてみる
リリースされているdocker-airflowは以下。
Docker
docker-compose-LocalExecutor.ymlを配置
docker-compose-LocalExecutor.ymlというファイルを任意のディレクトリに配置します。
## 例 $ mkdir test-airflow $ mv docker-compose-LocalExecutor.yml.yml ~/test-airflow/
ここでExecutorを指定することになるようです。 Executorとは、メッセージのキューイングするプロセス。 スケジューリングした各タスクを実際に実行するWorkerプロセスを決定する役目。
- SequentialExecutor: Schedulerプロセスと同じマシン上でタスクをシーケンシャルに処理する
- LocalExecutor: Schedulerプロセスと同じマシン上でタスクを並列処理する
- CeleryExecutor: Workerマシンのクラスタにタスクを分散して並列処理する
コンテナの構築・起動
docker-compose-LocalExecutor.yml
を配置したディレクトリで以下を実行。
$ docker-compose -f docker-compose-LocalExecutor.yml up -d
以下にように、done
と表示されればおk。
Pulling postgres (postgres:9.6)... 9.6: Pulling from library/postgres 5e35bd43cf78: Pull complete 0df82dab3c88: Pull complete 0670a6d74375: Pull complete bd2be22379ef: Pull complete 9eb829e5b266: Pull complete 95d7f9aaa5bd: Pull complete de97a90167ed: Pull complete 4b50288dfea5: Pull complete 1de3ac04528c: Pull complete 80ae7e788989: Pull complete 03206c3e9141: Pull complete 583f3a17a7fc: Pull complete 630a4a9106e6: Pull complete 9a4e5c50216a: Pull complete Digest: sha256:afe4d4a6b5c5dff5377944d0922636614cf695204e289d68ff91f0c658e84205 Status: Downloaded newer image for postgres:9.6 Pulling webserver (puckel/docker-airflow:1.10.9)... 1.10.9: Pulling from puckel/docker-airflow bc51dd8edc1b: Already exists dc4aa7361f66: Already exists 5f346cb9ea74: Already exists a4f1efa8e0e8: Already exists 7e4812fc693b: Already exists ff8fd055a548: Pull complete c9215f8e7f2f: Pull complete cab2fe472084: Pull complete 1f03789c1e57: Pull complete Digest: sha256:30e7cb9744ad367c54ae30a379fa46c9df4ea582bf2fcb96604adfc2760be79a Status: Downloaded newer image for puckel/docker-airflow:1.10.9 Creating test_20200415_postgres_1 ... done Creating test_20200415_webserver_1 ... done```
dockerのimageとコンテナを確認
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE postgres 9.6 11467448d371 14 hours ago 200MB puckel/docker-airflow latest ce92b0f4d1d5 2 months ago 797MB puckel/docker-airflow 1.10.9 3e408baf20fe 2 months ago 797MB
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d1f3f6b8843a puckel/docker-airflow:1.10.9 "/entrypoint.sh webs…" 16 seconds ago Up 15 seconds (health: starting) 5555/tcp, 8793/tcp, 0.0.0.0:8080->8080/tcp test_20200415_webserver_1 b75c125de3f5 postgres:9.6 "docker-entrypoint.s…" 16 seconds ago Up 15 seconds 5432/tcp test_20200415_postgres_1
postgresのヴァージョン指定などをしたい場合は、さきほど配置したdocker-compose-LocalExecutor.yml
の中身を編集することで、ヴァージョンの指定が可能だと思います。
ここまで確認できたら、一旦ブラウザでもUIが表示されるか確認します。
ブラウザで確認
↑上記にアクセスしてみます。
無事にこのような画面が表示されれば起動は成功です。
<project_name>/ ├── dags ## ← ここにDAGを定義するファイルを作成していく └── docker-compose-LocalExecutor.yml
終わりに
ここまでで起動は確認できました。
AIrflowの機能であるDAGの作成やDB(Postgres)の永続化など、他の事項はまた別記事にて記載します!
以上.