SlideShare a Scribd company logo
© 2022 NTT DATA Corporation
Apache Airflow 概要
@Airflowの基礎を学ぶハンズオンワークショップ
2022年10月29日
株式会社NTTデータ
関 堅吾
© 2022 NTT DATA Corporation 2
自己紹介
• 株式会社NTTデータ所属のデータエンジニア・OSS開発者
• Apache Hadoop・Apache Spark といった、並列分���処理 OSS を用いたデータ基盤の導入や開発・運用を支援
• Apache Airflow のコミッタ・PMC (プロジェクトマネジメント委員会) メンバー
• その他、データエンジニアリング関係のいくつかの OSS プロジェクトのコミッタを務める
© 2022 NTT DATA Corporation 3
https://oss.nttdata.com/
© 2022 NTT DATA Corporation 4
1. Airflow の概要と歴史
2. Airflow の要素と構成
3. まとめ
© 2022 NTT DATA Corporation 5
01
Airflow の概要と歴史
© 2022 NTT DATA Corporation 6
Apache Airflow (以下 Airflow) とは何か
• 一般に「ジョブスケジューラ」や「ワークフローエンジン」と呼ばれる種類のソフトウェア
• 参考: Wikipedia による「ジョブ管理システム」の説明
• 大雑把に言うと、「複数の処理の依存関係(ワークフロー)を定義し、それらを定められたタイミングで実行するもの」
• 類似の製品やサービスの例 (†は Airflow ベースのサービス)
• OSS: Argo Workflows, Dagster, DigDag, Apache Nifi
• SaaS: Astronomer†, Prefect
• クラウドサービス:
• Amazon Managed Workflows for Apache Airflow (MWAA)†, AWS Step Functions
• Azure Data Factory, Azure Logic Apps
• Google Cloud Composer†, Google Cloud Workflows
• 商用製品: JP1 (日立), Systemwalker (富士通), Hinemos (NTTデータ, OSS) など
© 2022 NTT DATA Corporation 7
Airflow の歴史
• Apache ソフトウェア財団 (Apache Software Foundation, 以下 ASF) 傘下で OSS として開発されている
• 以下, 2022/10 時点の最新バージョンである 2.4.2 に基づいて説明
Maxime Beauchemin によって, Airbnb で開発開始
Incubator project として ASF に寄贈
ASF の TLP (top level project) に昇格
バージョン 2.0 リリース
2014年 2016年 2019年 2020年 現在 (2022年)
2022/10 時点での contributor 数 2,230 名以上、コミット件数 17,800 以上,
GitHub stars は 28,000 以上
© 2022 NTT DATA Corporation 8
他のワークフローエンジンと比べた場合の Airflow の特徴と長所・短所 (発表者の主観で)
特徴 長所 短所
処理内容や、それらの間の
依存関係を Python で記述
・記述の自由度や可読性が高く、
バージョン管理システムとの相性も良い
・プログラミングが不得手な場合は利用しづらい
モダンな Web UI を提供 ・Web UIが見やすく使いやすい
・RBACなど、複数のユーザや組織での利用も考慮
(※RBAC: Role-based Access Control)
・ワークフローの編集機能は提供しない
・表示言語は英語のみ
複数のコンポーネントから成る
システム構成
・要件に応じて、信頼性の高い構成を採ることが可能
- システム上の主要な構成要素は、すべてHA化
もしくはスケールアウト可能
- 公式 Helm Chart を使って Kubernetes 上に
配備すれば、障害復旧の一部を k8s の
self-healing 機能に任せられる
・コンポーネントごとに無駄のないサイジングが可能
・構成が複雑なので、導入や運用が大変
- とはいえ、試すだけなら `airflow standalone`
コマンドで単一サーバ上で実行可能
- また、Kubernetes上に導入する場合は
公式 Helm Chart を使えば、コマンド一発で
インストール・アップグレード可能
コミュニティ主導の開発体制 ・開発やバグ修正の速度が速い
・Web 上の情報も豊富
・込み入ったトラブルに遭遇した場合は、ソースコードの
読解や管理DBの手動更新などが必要になる可能性
その他 ・他の製品と連携するための provider が豊富に提供
されており、多彩な製品・サービスと連携可能
・多くの商用製品が提供する機能であっても、
備えていないものがある
- ジョブネット中の特定のジョブで実行を保留する機能
- DAG versioning (ワークフローの形状が変わっても、
矛盾なく過去の実行結果などを参照できる機能) など
© 2022 NTT DATA Corporation 9
02
Airflow の要素と構成
© 2022 NTT DATA Corporation 10
ワークフローの定義における主な要素
Task 間の依存関係
Operator: ワークフロー内で実行される
個々の処理のテンプレート
Task: Operator に必要な情報(IDや
実行するコマンドなど)を与えてインスタンス
化したもの
DAG: 実行するワークフロー全体を、
Task間の依存関係として定義したもの
© 2022 NTT DATA Corporation 11
Operator の種類 (一部)
Airflow における処理実行の主体。主に以下の2種類に分けられる。
• 処理実行
• BashOperator: bash コマンドを実行
• PythonOperator: python 関数を実行
• その他、多数のソフトウェアや外部サービスと連携するための operator が存在
• 条件分岐
• BranchPythonOperator: 条件に従い、後続の task のいずれかを実行する
• ShortCircuitOperator: 処理の結果に応じて、後続の task を skip する
• BranchDayOfWeekOperator: 曜日に応じて処理を分岐する。曜日は複数指定可能
• BranchDateTimeOperator: 特定の期間だけ処理を分岐
© 2022 NTT DATA Corporation 12
ワークフローの実行における主な要素
DAG Run, Task Instance: それぞれ, DAG・Task の1回1回の実行を表す
© 2022 NTT DATA Corporation 13
ワークフローの実行間隔の指定方法
• start_date, schedule (と、必要であれば end_date) という DAG パラメータで、開始日時と実行間隔 (と終了日時) を指定する
• バージョン 2.3 以前は schedule_interval と timetable という2つのパラメータだったものが、バージョン 2.4 から schedule に統合された
• start_date は logical date (後述) の起点を表すため、初回の DAG Run は (start_date + scheduleで指定された間隔) 後に実行
されることに注意
• schedule は処理対象となるデータの間隔 (data interval) を表し、以下の4通りの形式で指定可能
• cron 書式の文字列 (例: 毎日0:00に実行するなら "0 0 * * *")
• Python の datetime.timedelta オブジェクト
• @once, @hourly, @daily, @weekly, @monthly など既定の文字列
• Airflow の Timetable オブジェクト
• DAG の実行タイミングに紐づいた日時を logical date (旧称 execution date) と呼び、Python コード中に Jinja 記法で埋め込むことができる
• 定期実行の場合、実際に実行される日時から schedule 分遡った日時が logical date となることに注意
• なお DAG は単発で実行することもでき、その場合は実際の実行日時が logical date となる。
※図は『Data Pipelines with Apache Airflow』(Bas Harenslak & Julian de Ruiter, Manning, 2021)より、改変して引用
Start date
2022-01-01
00:00
2022-01-02
00:00
2022-01-03
00:00
2022-01-04
00:00
End date まで実行
(指定した場合)
現在日時
Previous logical date Logical date
(= data_interval_start)
Next logical date
(= data_interval_end)
Data interval
© 2022 NTT DATA Corporation 14
システム構成
https://airflow.apache.org/docs/apache-airflow/stable/concepts/overview.html より引用
Scheduler: 定期的にDAG directoryを
読み込み, DAG を最新化するとともに、実行
時刻が到来した DAG の実行を Executor
に指示するプロセス。
Executor: Scheduler の一部として実行
される, task instance を実行するための仕
組み。
WebServer: ユーザに GUI を提供する
Web サーバ. Metadata Database の
内容をグラフィカルに表示するとともに, DAG
の有効・無効の切り替えや実行なども受け
付ける。
Metadata Database: DAG や Task の
実行状態や結果, ユーザや RBAC の設定,
Connection の定義, XCom の値など,
Airflow のあらゆる情報が格納されている DB.
SQLite, MySQL, PostgreSQL, Microsoft
SQL Server がサポートされている (SQLite
は本番環境での利用は推奨されていない).
Triggerer (図中では省略):Deferrable
Operator を実行するために, scheduler とは
独立して動作するプロセス。本機能を使わない
場合は不要。
© 2022 NTT DATA Corporation 15
Executor の種類
• SequentialExecutor: SQLite と組み合わせて使える唯一の Executor. Task instance を1件ずつ処理する。
本番での利用は非推奨 (動作確認のために存在).
• LocalExecutor: scheduler と同一マシン内で worker プロセスを起動. parallelism パラメータで指定した数まで
task instance を同時に実行できる。
• CeleryExecutor: Python 製のタスクキューである Celery を介して, scheduler 外のサーバに task instance の
実行を指示できる。
• Celery の backend として, RabbitMQ や Redis などの導入が必要
• Worker は何台でも立ち上げてスケールアウト可能
• KubernetesExecutor: Kubernetes 上に起動した worker pod 内で task instance を実行する。
• LocalKubernetesExecutor, CeleryKubernetesExecutor: それぞれ, LocalExecutor や CeleryExecutor
と KubernetesExecutor を併用できる。
© 2022 NTT DATA Corporation 16
その他の要素: Connections
• 連携するサービスへの接続情報を, connection として metadata DB に登録できる
• CLI からは airflow connections サブコマンドで参照・追加・削除が可能
© 2022 NTT DATA Corporation 17
その他の要素: Variables
• DAG内からグローバルに参照可能な変数を, variable として metadata DB に登録できる
• CLI からは airflow variables サブコマンドで参照・追加・削除が可能
© 2022 NTT DATA Corporation 18
その他の要素: XCom
• Task 間でデータを受け渡すための仕組み
• 以下のデータが XCom として Metadata DB に登録され、後続の task から参照可能になる
• BashOperator: stdout に出力した文字列の最終行
• PythonOperator: 実行した Python 関数の戻り値
• 後続の task では, TaskInstance オブジェクトのメソッド xcom_pull に受け渡し元の task_id を指定して呼ぶことで
XCom の値を参照できる. TaskInstance オブジェクトへのアクセス方法は以下の通り。
• BashOperator: 実行するコマンド中で Jinja テンプレートを使って ti もしくは task_instance を参照
• PythonOperator: 実行する Python 関数のキーワード引数として渡される値 (context) から ti もしくは
task_instance を参照
© 2022 NTT DATA Corporation 19
03
まとめ
© 2022 NTT DATA Corporation 20
まとめ
• Apache Airflow は ASF 傘下で OSS として開発されているワークフローエンジン
• Pythonによるワークフローの定義、充実した Web UI, 柔軟なシステム構成が可能なコンポーネント群、多彩な外部の製品
やサービスとの連携、コミュニティ主導による活発な開発体制、などに特徴
• ワークフローの定義における主な要素
• DAG, Task, Operator
• ワークフローの実行における主な要素
• DAG Run, Task Instance
• Start date, Schedule, End date
• Logical date, Data interval
• システム構成の主な要素
• Meta Database
• Scheduler/Executor
• Worker
• WebServer
© 2022 NTT DATA Corporation
本資料に記載されている会社名、商品名、又は
サービス名は、各社の登録商標又は商標です。

More Related Content

Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)

  • 1. © 2022 NTT DATA Corporation Apache Airflow 概要 @Airflowの基礎を学ぶハンズオンワークショップ 2022年10月29日 株式会社NTTデータ 関 堅吾
  • 2. © 2022 NTT DATA Corporation 2 自己紹介 • 株式会社NTTデータ所属のデータエンジニア・OSS開発者 • Apache Hadoop・Apache Spark といった、並列分散処理 OSS を用いたデータ基盤の導入や開発・運用を支援 • Apache Airflow のコミッタ・PMC (プロジェクトマネジメント委員会) メンバー • その他、データエンジニアリング関係のいくつかの OSS プロジェクトのコミッタを務める
  • 3. © 2022 NTT DATA Corporation 3 https://oss.nttdata.com/
  • 4. © 2022 NTT DATA Corporation 4 1. Airflow の概要と歴史 2. Airflow の要素と構成 3. まとめ
  • 5. © 2022 NTT DATA Corporation 5 01 Airflow の概要と歴史
  • 6. © 2022 NTT DATA Corporation 6 Apache Airflow (以下 Airflow) とは何か • 一般に「ジョブスケジューラ」や「ワークフローエンジン」と呼ばれる種類のソフトウェア • 参考: Wikipedia による「ジョブ管理システム」の説明 • 大雑把に言うと、「複数の処理の依存関係(ワークフロー)を定義し、それらを定められたタイミングで実行するもの」 • 類似の製品やサービスの例 (†は Airflow ベースのサービス) • OSS: Argo Workflows, Dagster, DigDag, Apache Nifi • SaaS: Astronomer†, Prefect • クラウドサービス: • Amazon Managed Workflows for Apache Airflow (MWAA)†, AWS Step Functions • Azure Data Factory, Azure Logic Apps • Google Cloud Composer†, Google Cloud Workflows • 商用製品: JP1 (日立), Systemwalker (富士通), Hinemos (NTTデータ, OSS) など
  • 7. © 2022 NTT DATA Corporation 7 Airflow の歴史 • Apache ソフトウェア財団 (Apache Software Foundation, 以下 ASF) 傘下で OSS として開発されている • 以下, 2022/10 時点の最新バージョンである 2.4.2 に基づいて説明 Maxime Beauchemin によって, Airbnb で開発開始 Incubator project として ASF に寄贈 ASF の TLP (top level project) に昇格 バージョン 2.0 リリース 2014年 2016年 2019年 2020年 現在 (2022年) 2022/10 時点での contributor 数 2,230 名以上、コミット件数 17,800 以上, GitHub stars は 28,000 以上
  • 8. © 2022 NTT DATA Corporation 8 他のワークフローエンジンと比べた場合の Airflow の特徴と長所・短所 (発表者の主観で) 特徴 長所 短所 処理内容や、それらの間の 依存関係を Python で記述 ・記述の自由度や可読性が高く、 バージョン管理システムとの相性も良い ・プログラミングが不得手な場合は利用しづらい モダンな Web UI を提供 ・Web UIが見やすく使いやすい ・RBACなど、複数のユーザや組織での利用も考慮 (※RBAC: Role-based Access Control) ・ワークフローの編集機能は提供しない ・表示言語は英語のみ 複数のコンポーネントから成る システム構成 ・要件に応じて、信頼性の高い構成を採ることが可能 - システム上の主要な構成要素は、すべてHA化 もしくはスケールアウト可能 - 公式 Helm Chart を使って Kubernetes 上に 配備すれば、障害復旧の一部を k8s の self-healing 機能に任せられる ・コンポーネントごとに無駄のないサイジングが可能 ・構成が複雑なので、導入や運用が大変 - とはいえ、試すだけなら `airflow standalone` コマンドで単一サーバ上で実行可能 - また、Kubernetes上に導入する場合は 公式 Helm Chart を使えば、コマンド一発で インストール・アップグレード可能 コミュニティ主導の開発体制 ・開発やバグ修正の速度が速い ・Web 上の情報も豊富 ・込み入ったトラブルに遭遇した場合は、ソースコードの 読解や管理DBの手動更新などが必要になる可能性 その他 ・他の製品と連携するための provider が豊富に提供 されており、多彩な製品・サービスと連携可能 ・多くの商用製品が提供する機能であっても、 備えていないものがある - ジョブネット中の特定のジョブで実行を保留する機能 - DAG versioning (ワークフローの形状が変わっても、 矛盾なく過去の実行結果などを参照できる機能) など
  • 9. © 2022 NTT DATA Corporation 9 02 Airflow の要素と構成
  • 10. © 2022 NTT DATA Corporation 10 ワークフローの定義における主な要素 Task 間の依存関係 Operator: ワークフロー内で実行される 個々の処理のテンプレート Task: Operator に必要な情報(IDや 実行するコマンドなど)を与えてインスタンス 化したもの DAG: 実行するワークフロー全体を、 Task間の依存関係として定義したもの
  • 11. © 2022 NTT DATA Corporation 11 Operator の種類 (一部) Airflow における処理実行の主体。主に以下の2種類に分けられる。 • 処理実行 • BashOperator: bash コマンドを実行 • PythonOperator: python 関数を実行 • その他、多数のソフトウェアや外部サービスと連携するための operator が存在 • 条件分岐 • BranchPythonOperator: 条件に従い、後続の task のいずれかを実行する • ShortCircuitOperator: 処理の結果に応じて、後続の task を skip する • BranchDayOfWeekOperator: 曜日に応じて処理を分岐する。曜日は複数指定可能 • BranchDateTimeOperator: 特定の期間だけ処理を分岐
  • 12. © 2022 NTT DATA Corporation 12 ワークフローの実行における主な要素 DAG Run, Task Instance: それぞれ, DAG・Task の1回1回の実行を表す
  • 13. © 2022 NTT DATA Corporation 13 ワークフローの実行間隔の指定方法 • start_date, schedule (と、必要であれば end_date) という DAG パラメータで、開始日時と実行間隔 (と終了日時) を指定する • バージョン 2.3 以前は schedule_interval と timetable という2つのパラメータだったものが、バージョン 2.4 から schedule に統合された • start_date は logical date (後述) の起点を表すため、初回の DAG Run は (start_date + scheduleで指定された間隔) 後に実行 されることに注意 • schedule は処理対象となるデータの間隔 (data interval) を表し、以下の4通りの形式で指定可能 • cron 書式の文字列 (例: 毎日0:00に実行するなら "0 0 * * *") • Python の datetime.timedelta オブジェクト • @once, @hourly, @daily, @weekly, @monthly など既定の文字列 • Airflow の Timetable オブジェクト • DAG の実行タイミングに紐づいた日時を logical date (旧称 execution date) と呼び、Python コード中に Jinja 記法で埋め込むことができる • 定期実行の場合、実際に実行される日時から schedule 分遡った日時が logical date となることに注意 • なお DAG は単発で実行することもでき、その場合は実際の実行日時が logical date となる。 ※図は『Data Pipelines with Apache Airflow』(Bas Harenslak & Julian de Ruiter, Manning, 2021)より、改変して引用 Start date 2022-01-01 00:00 2022-01-02 00:00 2022-01-03 00:00 2022-01-04 00:00 End date まで実行 (指定した場合) 現在日時 Previous logical date Logical date (= data_interval_start) Next logical date (= data_interval_end) Data interval
  • 14. © 2022 NTT DATA Corporation 14 システム構成 https://airflow.apache.org/docs/apache-airflow/stable/concepts/overview.html より引用 Scheduler: 定期的にDAG directoryを 読み込み, DAG を最新化するとともに、実行 時刻が到来した DAG の実行を Executor に指示するプロセス。 Executor: Scheduler の一部として実行 される, task instance を実行するための仕 組み。 WebServer: ユーザに GUI を提供する Web サーバ. Metadata Database の 内容をグラフィカルに表示するとともに, DAG の有効・無効の切り替えや実行なども受け 付ける。 Metadata Database: DAG や Task の 実行状態や結果, ユーザや RBAC の設定, Connection の定義, XCom の値など, Airflow のあらゆる情報が格納されている DB. SQLite, MySQL, PostgreSQL, Microsoft SQL Server がサポートされている (SQLite は本番環境での利用は推奨されていない). Triggerer (図中では省略):Deferrable Operator を実行するために, scheduler とは 独立して動作するプロセス。本機能を使わない 場合は不要。
  • 15. © 2022 NTT DATA Corporation 15 Executor の種類 • SequentialExecutor: SQLite と組み合わせて使える唯一の Executor. Task instance を1件ずつ処理する。 本番での利用は非推奨 (動作確認のために存在). • LocalExecutor: scheduler と同一マシン内で worker プロセスを起動. parallelism パラメータで指定した数まで task instance を同時に実行できる。 • CeleryExecutor: Python 製のタスクキューである Celery を介して, scheduler 外のサーバに task instance の 実行を指示できる。 • Celery の backend として, RabbitMQ や Redis などの導入が必要 • Worker は何台でも立ち上げてスケールアウト可能 • KubernetesExecutor: Kubernetes 上に起動した worker pod 内で task instance を実行する。 • LocalKubernetesExecutor, CeleryKubernetesExecutor: それぞれ, LocalExecutor や CeleryExecutor と KubernetesExecutor を併用できる。
  • 16. © 2022 NTT DATA Corporation 16 その他の要素: Connections • 連携するサービスへの接続情報を, connection として metadata DB に登録できる • CLI からは airflow connections サブコマンドで参照・追加・削除が可能
  • 17. © 2022 NTT DATA Corporation 17 その他の要素: Variables • DAG内からグローバルに参照可能な変数を, variable として metadata DB に登録できる • CLI からは airflow variables サブコマンドで参照・追加・削除が可能
  • 18. © 2022 NTT DATA Corporation 18 その他の要素: XCom • Task 間でデータを受け渡すための仕組み • 以下のデータが XCom として Metadata DB に登録され、後続の task から参照可能になる • BashOperator: stdout に出力した文字列の最終行 • PythonOperator: 実行した Python 関数の戻り値 • 後続の task では, TaskInstance オブジェクトのメソッド xcom_pull に受け渡し元の task_id を指定して呼ぶことで XCom の値を参照できる. TaskInstance オブジェ���トへのアクセス方法は以下の通り。 • BashOperator: 実行するコマンド中で Jinja テンプレートを使って ti もしくは task_instance を参照 • PythonOperator: 実行する Python 関数のキーワード引数として渡される値 (context) から ti もしくは task_instance を参照
  • 19. © 2022 NTT DATA Corporation 19 03 まとめ
  • 20. © 2022 NTT DATA Corporation 20 まとめ • Apache Airflow は ASF 傘下で OSS として開発されているワークフローエンジン • Pythonによるワークフローの定義、充実した Web UI, 柔軟なシステム構成が可能なコンポーネント群、多彩な外部の製品 やサービスとの連携、コミュニティ主導による活発な開発体制、などに特徴 • ワークフローの定義における主な要素 • DAG, Task, Operator • ワークフローの実行における主な要素 • DAG Run, Task Instance • Start date, Schedule, End date • Logical date, Data interval • システム構成の主な要素 • Meta Database • Scheduler/Executor • Worker • WebServer
  • 21. © 2022 NTT DATA Corporation 本資料に記載されている会社名、商品名、又は サービス名は、各社の登録商標又は商標です。