🐙🐙🐙オーケストレーションツールDagster入門してみた(概念編)🐙🐙🐙
気にはなってるけど触ってないビッグデータ系のツール・サービスを触る Advent Calendar 2022の#10です。
Dagsterとは
OSSのオーケストレーションツール・ワークフローツールです。公式サイト曰く
Dagster is an orchestrator that's designed for developing and maintaining data assets, such as tables, data sets, machine learning models, and reports.
だそうです。
(オーケストレーションツール・ワークフローツールについては、ビッグデータを支える技術とかFundamentals of Data Engineering読んでください)
GraphQLの創始者(の一人)でもあるNick Schrockさんが開発を始め、elementlという企業がメインで開発をしています。
比較的後発ですが、海外のTechニュース・Podcastでは同じカテゴリーのAirflow・Prefectと並んで頻繁に登場しています。例えば、2021年のthe most popular OSS data projectsにランクイン(四位)しています。
事例
海外企業では例えば、
- Doordash
- VMWare
- LINE Thailand
などが利用を公開しており、また、
- Mapbox
- Dritzly
- Good Egg
のユーザストーリーが公開されています。
日系企業では、
の事例が公開されています(他に使っている企業さん見逃していればごめんなさい…)。
特徴・機能
Dagsterは
- タスクの実行制御
- タスクの管理
- 他のサービスとの連携
など、オーケストレーションツール・ワークフローツールとして一般的な機能を一通り備えています。
OSSのオーケストレーションツール・ワークフローツールとしてはポピュラーなAirflowと比べると、Dagsterは劇的に新しい機能を提供しているというより、後発(Airflowは2014、Dagsterは多分2019年)な分、いわゆる開発者経験(Developer Experience)を改善にフォーカスしている印象です。
例えば、Introducing DagsterやA Dagster Crash Courseでは
- 開発時のローカルでのパイプラインの動かしやすさ
- 処理対象のデータ(Software Defined Assets)ベースの依存定義
- Airflowでは処理(Task)の間の依存関係に注目しますが、データ間の依存関係の制御については弱いです(特にTaskFlow API以前)
- Why not AirflowのDataflowあたりのお話
- 実行環境とパイプラインの分離
- テストしやすさ
などの開発者経験アピールしており、開発・運用しやすくするために、
- pip installで、すぐにDagsterのパイプラインを実行できる
- Task間のデータのやり取りはAssetで明示的に行う
などの機能があります。ここらへんの、開発者経験を改善する方向性は、Prefect(Why not Airflow)と似ている部分がありそうです。
なお、Airflowの方も
など、Dagster(やPrefect)に対抗するように、開発者経験系の改善が進んでいます。
学習リソース
Airflowの方は本や、Udemyのコース、また日本語の記事もたくさんありますが、Dagsterの学習リソースはそれより少なく
日本語の記事だと、
くらいだと思います。
最初に触るときは、公式ドキュメント、特に
- Crash CourceとTutorialでとりあえず動かしてみる
- Deployment Overviewでシステムの構成を知る
- 色々なExampleで実際のコードを見てみる
あたりが良さそうです。
用語・概念
Op(旧Solid)
Airflowで言うところのTask・Task Instanceです。行う処理・入出力(Asset)を記載するPythonの関数です。
Asset(Software-Defined Assets)
Dagsterが処理するデータの定義です。Airflowに直接対応する概念は無いと思います(しいて挙げるならXCom)。Assetは、
- Assetを作成するPythonの関数
- 外部のAsset
として定義し、保存場所はIO Managersで指定します。
組み込みで、ローカルのファイルシステム(デフォルト)、各種オブジェクトストレージ、Snowflakeへの保存が提供されていおり、カスタマイズも可能)です。
Graph・Job
Airflowで言うDAGです。Op・Assetの間の依存関係や、スケジュール、各種設定などを定義します。
アーキテクチャ
(Dagster公式ページより)
公式ページのDeployment Overview曰く、主に、
- Digit
- Daemon
- Executor
- Database(Dagster Stoage)
- Repository
の5つのコンポーネントから構成されています。
それぞれ、
- DigitはWebUI
- Daemonはスケジュール実行や、センサー、並列実行制御用のキューなどを提供します
- 本番では多分必要ですが、必須なコンポーネントではないです
- ExecutorはJob・Assetの具体的な実行
- 組み込みでは、ローカル(デフォルト)、Dask、Celery、Kubernetes、DockerのExecutorが提供されています
- Databaseは履歴やメタデータ
- SQLite(デフォルト)、MySQL、PostgreSQL
- RepositoryはDagsterが実行するコード
を提供します。
また、上の概要図では省略されていますが、
- Executorを起動・管理するためのコンポーネントDagster Instance
- Executorを起動するLauncher、同時実行制御するCoordinator、ログ管理など
- Assetを管理するIO Manager
などのコンポーネントもあります。
デプロイ
- ECS・EC2
- GCE
- Docker
- Kubernetes(Helmチャート)
- Dask
-
Dagster Cloud
- Elementlが提供するSaaS
などへのデプロイ方法が紹介されています。
その他
2022/8に1.0がリリースされ、用語・機能がそれまでのバージョンから変更されています。昔の記事を見るときは注意・適当に読み替えてください
変更については、
あたりを参照すると良さそうです。
Discussion