helloworlds

not a noun, it's a verb

【Airflow】入門 part.1

概要

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の起動までを記載しています。

アーキテクチャ

f:id:o21o21:20200910121446p:plain

引用: https://github.com/astronomer/airflow-guides/blob/master/guides/airflow-components.md

4つの主なコンポーネントが存在。

  • Webserver: UI
  • Scheduler: ジョブのスケジューリング
  • Executor: 実際にワークが行われるメカニズム
  • Metadata Database: 他のコンポーネントの相互作用を決定するデータベース(通常はPostgres)

docker-airflowをインストールしてみる

リリースされているdocker-airflowは以下。

github - docker-airflow

Docker

Dockerをココ(mac用)からインストール。

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が表示されるか確認します。

ブラウザで確認

http://localhost:8080

↑上記にアクセスしてみます。

無事にこのような画面が表示されれば起動は成功です。

f:id:o21o21:20200910121554p:plain

<project_name>/
├── dags                        ## ← ここにDAGを定義するファイルを作成していく
└── docker-compose-LocalExecutor.yml

終わりに

ここまでで起動は確認できました。

AIrflowの機能であるDAGの作成やDB(Postgres)の永続化など、他の事項はまた別記事にて記載します!

以上.