🐙

🐙🐙🐙オーケストレーションツールDagster入門してみた(概念編)🐙🐙🐙

2022/12/11に公開

気にはなってるけど触ってないビッグデータ系のツール・サービスを触る 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は2014Dagsterは多分2019年)な分、いわゆる開発者経験(Developer Experience)を改善にフォーカスしている印象です。

例えば、Introducing DagsterA Dagster Crash Courseでは

  • 開発時のローカルでのパイプラインの動かしやすさ
  • 処理対象のデータ(Software Defined Assets)ベースの依存定義
  • 実行環境とパイプラインの分離
  • テストしやすさ

などの開発者経験アピールしており、開発・運用しやすくするために、

  • pip installで、すぐにDagsterのパイプラインを実行できる
  • Task間のデータのやり取りはAssetで明示的に行う

などの機能があります。ここらへんの、開発者経験を改善する方向性は、Prefect(Why not Airflow)と似ている部分がありそうです。

なお、Airflowの方も

など、Dagster(やPrefect)に対抗するように、開発者経験系の改善が進んでいます。

学習リソース

Airflowの方はや、Udemyのコース、また日本語の記事もたくさんありますが、Dagsterの学習リソースはそれより少なく

日本語の記事だと、

くらいだと思います。

最初に触るときは、公式ドキュメント、特に

あたりが良さそうです。

用語・概念

Op(旧Solid)
Airflowで言うところのTask・Task Instanceです。行う処理・入出力(Asset)を記載するPythonの関数です。

Asset(Software-Defined Assets)
Dagsterが処理するデータの定義です。Airflowに直接対応する概念は無いと思います(しいて挙げるならXCom)。Assetは、

として定義し、保存場所はIO Managersで指定します。
組み込みで、ローカルのファイルシステム(デフォルト)、各種オブジェクトストレージ、Snowflakeへの保存が提供されていおり、カスタマイズも可能)です。

GraphJob
Airflowで言うDAGです。Op・Assetの間の依存関係や、スケジュール、各種設定などを定義します。

アーキテクチャ


(Dagster公式ページより)

公式ページのDeployment Overview曰く、主に、

の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

などのコンポーネントもあります。

デプロイ

などへのデプロイ方法が紹介されています。

その他

2022/8に1.0がリリースされ、用語・機能がそれまでのバージョンから変更されています。昔の記事を見るときは注意・適当に読み替えてください

変更については、

あたりを参照すると良さそうです。

Discussion