Mais conteúdo relacionado
Semelhante a Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料) (20)
Mais de NTT DATA Technology & Innovation (20)
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 を参照
- 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
本資料に記載されている会社名、商品名、又は
サービス名は、各社の登録商標又は商標です。