🛫

入門 Airflow

2021/11/15に公開

概要

Airflowを触ったことがない人が業務にスッと入れるようにするための知識として社内のチームメンバー向けに書いてたのですが、インターネットに出せる形に調整して公開してみることにしました。

ちなみにv.1.0.0ぐらいのノリなので今後も必要に応じて更新していく予定です(ドキュメント自体も30分ぐらいで一気に書いたこともあり荒削り感は否めません)

また、だいぶ前に勉強会向けに作成した資料もここに貼っておきます。

Airflowについて

Airflowとは

一言で言うと「ワークフローエンジン」です。

Pythonでワークフローを実装し、その実行をスケジューリングやモニタリングを通じて管理くれるプラットフォームとなっています。

公式サイトからの引用

Airflow is a platform created by the community to programmatically author, schedule and monitor workflows.

https://airflow.apache.org/

Airflowの用語

ワークフロー、DAG

データ分析において、ワークフローは、データの取り込み、変換、分析、または利用のための一連のタスクを表します。
Airflow では、DAG(つまり「有向非巡回グラフ」)を使用してワークフローが作成されます。

https://cloud.google.com/composer/docs/concepts/overview?hl=ja

タスク

DAGを構築する際に1つ以上定義される処理のことです。

以下はgistに公開しているサンプルのDAGですが、「momota-demo-dag」というのがDAGで、task1, task2,... といったブロック一つ一つがタスクです。

これらのタスクに依存関係を持たせて有向非巡回グラフ(DAG)を生成し、それが結果としてワークフローになるという感じになります。

Operator

Airflowでタスクを実装する際に必要となるのがこのOperatorという機能です。
例えば、「BQにクエリを実行するタスク」であれば「BigQueryOperator」を使います

このOperatorには種類がたくさんあるので、これもまた使いながら覚えつつ要件に一番フィットしそうなOperatorを選択して実装していくことになります。

代表的なOperatorとしては以下があります(個人の感想)

  • BashOperator
  • PythonOperator
  • BigQueryOperator
  • GCSToBigQueryOperator
  • DummyOperator
  • BranchPythonOperator

いろいろあるので見てみると良いでしょう

https://airflow.apache.org/docs/apache-airflow/2.1.2/_api/airflow/operators/index.html

Airflow config

Airflowでは airflow.cfg の定義により構成の設定を行うことができます。いきなり全部を覚えるというよりは使いながら徐々に覚えていくイメージです。

https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html

それぞれのconfgにはデフォルトの値が設定されていますが、要件次第で変更をするなどします

cloud composer(後述)においては、GUIベースの設定画面がありそこから設定をすることができます。

Airflowのv1とv2について

Airflowのv1とv2ではUIも大幅に変わり、ワークフローを作成するコードもそのまま使えるといった事はなくアップデートが必要になります。

また、ググって出てくる記事が自身の使っているAirflowのバージョンに即したものなのかどうかはよく注意した方が良いです(特に公式の資料)

AirflowのDAG実装におけるPython

AirflowのDAGはPythonによって記述されますがAirflow独自の記法がありますので、このセクションでは「AirflowにおけるPythonの書き方」として紹介します。

AirflowにおけるPythonでは、前述の「DAG」を実装することによってワークフローを構築していきます。

一つのDAGの中には1つ以上のタスクがあり、それらのタスクの依存関係を定義することによってワークフローを構築します。

サンプル

大まかな流れとしては

  • DAGの定義(パラメータを必要に応じて設定)
  • タスクの定義(Operatorを駆使して要件を実現する(task1 = ... , task2 = ...)
  • タスクの依存関係を定義( >> みたいな記述)

の3つになります。

Cloud Composerについて

Cloud Composer(以下composer)はGCPが提供しているAirflowのフルマネージドサービスです。

Airrflowはworker, web UI, queue, databaseなど様々なミドルウェアが組み合わさって成り立っているので、チームによっては自前で運用する工数を鑑みた際にcloud composerを選択する余地は大いにあると思います。

以下Pros/Consです

Pros

  • 運用負荷が大幅に低下してアプリケーション(workflow)の開発に専念できる

Cons

Cloud Composerのアーキテクチャは以下のようになっています

https://cloud.google.com/composer/docs/concepts/architecture?hl=ja

Discussion