Anúncio

OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)

NTT DATA Technology & Innovation
20 de Mar de 2023
Anúncio

Mais conteúdo relacionado

Apresentações para você(20)

Similar a OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)(20)

Anúncio

Mais de NTT DATA Technology & Innovation(20)

Último(20)

Anúncio

OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)

  1. © 2023 NTT DATA Corporation OpenLineage による Airflow のデータ来歴の収集と可視化 @Airflow Meetup Tokyo #3 2023/03/16 株式会社NTTデータ 関 堅吾
  2. © 2023 NTT DATA Corporation 2 1. Data Lineage とは何か 2. OpenLineage とは何か 3. Airflow で OpenLineage を使う方法
  3. © 2023 NTT DATA Corporation 自己紹介 • 株式会社NTTデータ 技術開発本部所属のデータエンジニア/OSS開発者 • Apache Hadoop・Apache Spark といった、並列分散処理 OSS を用いたデータ基盤の構築・運用支援やサポート, R&D を行っています • データエンジニアリング関係のいくつかの OSS 開発にも参加しており、いくつかのプロジェクトでコミッタを務めています • ワークフローエンジン: • Hadoop 関連 OSS のパッケージング・構築・運用管理: • データフォーマット・RPC: • GIS ライブラリ: • OSSプロジェクトの品質・テスト改善ツール群:
  4. © 2023 NTT DATA Corporation 4 01 Data Lineage とは何か
  5. © 2023 NTT DATA Corporation 5 Data Lineage とは • "Data lineage includes the data origin, what happens to it, and where it moves over time" (Wikipedia より引用: https://en.wikipedia.org/wiki/Data_lineage) • データの系譜・来歴(データをどこから受け取り、どのような加工を経て、どこへ送られるのか)を追跡すること ※図は https://marquezproject.ai/ から引用
  6. © 2023 NTT DATA Corporation 6 Data Lineage の用途:業務理解・影響分析 ? 新しい処理を追加したいが、 必要なデータをどこから持って くればよい? このデータセットの形式を変更 したら、どの処理やデータセット に影響がある? このデータセットの値は、 何に基づいて・どういった 方法で計算されている? :入出力データセット :移動・コピー・加工などの処理
  7. © 2023 NTT DATA Corporation 7 Data Lineage の用途:トラブルシュート 処理結果のデータがおかしい! 問題の原因はどこだ? :入出力データセット :移動・コピー・加工などの処理
  8. © 2023 NTT DATA Corporation 8 02 OpenLineage とは何か
  9. © 2023 NTT DATA Corporation 9 Data Lineage をサポートするメタデータ管理ツール • Data Lineage を含むメタデータを管理するツール (※) は近年活発に開発されており, OSS だけでも多数の製品が存在 • 現状のままだと、ETLツール (※) x メタデータ管理ツールの組合せ数分、連携機能を実装する必要がある (図は https://openlineage.io/docs/ より引用) ※本資料では、データの構造や各項目の意味、所有者や開示範囲、リネージ情報などを含む「データに関するデータ」を格納・提供するツールを「メタデータ管理ツール」、 データの移動やコピー、加工などを行いリネージデータの発生源となるツールを「ETLツール」と総称する
  10. © 2023 NTT DATA Corporation 10 OpenLineage とは • リネージ情報を収集するための REST API を, OpenAPI 仕様を用いてオープン標準化するためのプロジェクト • ETLツール側では, OpenLineage にさえ対応すれば、メタデータ管理ツールごとに異なる収集方法に対応しなくて済む • OpenLineage からメタデータ管理ツールへの連携は、リネージデータの取り込み方法に応じた backend を設置することで実現 (図は https://openlineage.io/docs/ より引用)
  11. © 2023 NTT DATA Corporation 11 OpenLineage の歴史 • Twitter 社で Apache Parquet を開発した Julien Le Dem が2020/12 にプロジェクトを立ち上げ • 彼が設立した DataKin 社が開発の中心だったが、後に Airflow の SaaS 提供会社である Astronomer に買収され、 引き続き同社が開発の中心を担っている • WeWork が開発した Marquez が, OpenLineage でリネージデータを収集するメタデータ管理ツールのリファレンス実装と なっている • Marquez, OpenLineage ともに, Linux Foundation のサブ組織である LF AI & Data Foundation 傘下で開発中 • OpenLineage は, 2021/07 に sandbox project として参加し, 2023/01 に incubation stage に昇格
  12. © 2023 NTT DATA Corporation 12 OpenLineage の現在 • 2023/03 時点の最新バージョンは 0.21.1 • ここ最近は毎月1~3回のペースでリリースしており、活発に開発を継続中 • ETLツールとしては Airflow, Spark, dbt などをサポート • Apache Flinkもサポートしているが、まだexperimental扱い • 月次の TSC (Technical Steering Committee) meeting の議事録・録画が公開されている • 開発を主導している Astronomer 以外にも, ETL/データマネジメント系の SaaS ベンダ (Atlan, Collibra, Fivetran, MANTA 等) に加えて、クラウド・エンタープライズ系の大手ベンダ (Microsoft, AWS, HPE等) も参加 • Microsoft や AWS は、以下のようなドキュメント・記事も公開している • Azure Databricks のリネージ情報を OpenLineage を用いて Microsoft Purview に収集 https://learn.microsoft.com/en-us/samples/microsoft/purview-adb-lineage-solution-accelerator/azure- databricks-to-purview-lineage-connector/ • MWAA (AWSのAirflowマネージドサービス) のリネージ情報を OpenLineage を用いて Marquez に収集する例 https://aws.amazon.com/blogs/big-data/automate-data-lineage-on-amazon-mwaa-with-openlineage/ (図は https://openlineage.io/docs/ より引用)
  13. © 2023 NTT DATA Corporation 13 03 Airflow で OpenLineage を使う方法
  14. © 2023 NTT DATA Corporation 14 Airflow への OpenLineage の導入・実行例 • Airflow 2.3 以上を使用している場合, openlineage-airflow パッケージをインストールするだけで利用可能 • setuptools の entrypoint 機能を使った plugin 登録方式を利用し, Airflow の plugin として追加される • バージョン2.3から Airflow に導入された Listener API を利用している • このListener APIを追加したのもOpenLineageの開発者 (https://github.com/apache/airflow/pull/20443) • OpenLineage に対応したメタデータ管理ツールを立ち上げた上で、そのリネージデータ送信先URLを環境変数 OPENLINEAGE_URL に指定するか、設定ファイルに記述して Airflow を起動する • なお、本パッケージを Airflow の provider に移管する提案 (AIP-53) も Airflow コミュニティに提出されており、将来的に は導入方法が変更されると思われる $ pip install openlineage-airflow $ airflow plugins name | macros | listeners | source ==================+=============================================================+==============================+=========================================================== OpenLineagePlugin | openlineage.airflow.macros.lineage_run_id,openlineage.airfl | openlineage.airflow.listener | openlineage-airflow==0.21.1: | ow.macros.lineage_parent_id | | EntryPoint(name='OpenLineagePlugin', | | | value='openlineage.airflow.plugin:OpenLineagePlugin', | | | group='airflow.plugins') $ OPENLINEAGE_URL=http://localhost:3000 airflow standalone
  15. © 2023 NTT DATA Corporation 15 Airflow への OpenLineage の導入・実行例 実際に Marquez をメタデータ管理ツールとして、リネージ情報を送信するまでの例を以下に示す。(Ubuntu 22.04 上で確認) 1. (簡便のため Docker コンテナとして) Marquez を起動する。 コンテナが起動したらブラウザで3000番ポートに接続する。この時点では Marquez には何のリネージ情報も登録されていない。 $ sudo apt-get install -y docker.io docker-compose $ sudo usermod $USER -aG docker (logout & relogin) $ git clone --depth=1 --branch=0.31.0 https://github.com/MarquezProject/marquez $ cd marquez $ docker/up.sh
  16. © 2023 NTT DATA Corporation 16 Airflow への OpenLineage の導入・実行例 2. 別のターミナルから Airflow と OpenLineage をインストールし, OpenLineage 関連の設定とともに Airflow を起動する。 後でサンプルの DB に MySQL を使用するため、対応するパッケージもインストールしておく。 3. 別のターミナルから MySQL をインストールし、サンプルデータを登録するとともに、動作確認用のアカウントを追加する。 $ sudo apt-get install -y python3-pip python3-venv libmysqlclient-dev $ python3 -m venv OL $ . OL/bin/activate $ pip install -U pip setuptools wheel $ AIRFLOW_VERSION=2.5.1 $ PYTHON_VERSION=$(python -V | awk '{ print $2 }' | awk -F. '{ print $1 "." $2 }') $ pip install "apache-airflow[mysql]==${AIRFLOW_VERSION}" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints- no-providers-${PYTHON_VERSION}.txt" $ pip install openlineage-airflow==0.21.1 $ OPENLINEAGE_URL=http://localhost:3000 OPENLINEAGE_NAMESPACE=my_namespace airflow standalone $ sudo apt-get install -y mysql-server $ sudo -i # curl -sL https://downloads.mysql.com/docs/world-db.tar.gz | tar xz # mysql < world-db/world.sql # mysql -e "CREATE USER airflow@localhost IDENTIFIED BY 'password'" # mysql -e "GRANT ALL ON world.* TO airflow@localhost"
  17. © 2023 NTT DATA Corporation 17 Airflow への OpenLineage の導入・実行例 4. 3で登録したアカウント情報を Airflow の connection に登録 (Web UI から実行してもよい) 5. 以下の DAG ファイルを ~/airflow/dags 以下に配置し, Web UIからDAGをunpauseして実行 (CLI から実行してもよい) $ . ~/OL/bin/activate $ airflow connections delete mysql_default $ airflow connections add mysql_default --conn-uri mysql://airflow:password@localhost/world $ cat airflow/dags/count_cities.py import pendulum from airflow.decorators import dag from airflow.providers.mysql.operators.mysql import MySqlOperator @dag(dag_id="count_cities", schedule_interval=None, start_date=pendulum.datetime(2023, 1, 1, tz="UTC")) def CountCities(): MySqlOperator( task_id="count_cities", sql=""" CREATE TABLE IF NOT EXISTS citycount AS SELECT Code, count(*) FROM country a JOIN city b ON a.Code = b.CountryCode GROUP BY Code """, ) dag = CountCities() ...
  18. © 2023 NTT DATA Corporation 18 Airflow への OpenLineage の導入・実行例 6. DAG Run が成功した後で Marquez を確認すると、リネージ情報が登録されている。
  19. © 2023 NTT DATA Corporation 19 Airflow と OpenLineage の連携の仕組み • OpenLineage は, Airflow の Operator に対応する Extractor を通じてリネージ情報を取得し、メタデータ管理ツール に送信する。バージョン 0.21.1 時点では以下の Operator に対応している。 Airflow Operator OpenLineage Extractor PostgresOperator PostgresExtractor MySqlOperator MySqlExtractor AthenaOperator, AWSAthenaOperator AthenaExtractor BigQueryOperator, BigQueryExecuteQueryOperator BigQueryExtractor SnowflakeOperator SnowflakeExtractor TrinoOperator TrinoExtractor GreatExpectationsOperator GreatExpectationsExtractor SFTPOperator SFTPExtractor FTPFileTransmitOperator FTPExtractor BashOperator, PythonOperator BashExtractor, PythonExtractor RedshiftDataOperator, RedshiftSQLOperator RedshiftDataExtractor, RedshiftSQLExtractor SageMakerProcessingOperator, SageMakerProcessingOperatorAsync SageMakerProcessingExtractor SageMakerTrainingOperator, SageMakerTrainingOperatorAsync SageMakerTrainingExtractor SageMakerTransformOperator, SageMakerTransformOperatorAsync SageMakerTransformExtractor S3CopyObjectExtractor, S3FileTransformExtractor S3CopyObjectExtractor, S3FileTransformExtractor GCSToGCSOperator GCSToGCSExtractor
  20. © 2023 NTT DATA Corporation 20 Extractor の自作方法 • 使っている Operator/Transfer が前頁のリストにない場合は, Extractor を自作できる • 基本的には、OpenLineage が提供する BaseExtractor を継承し、以下の3つのメソッドを実装したクラスを登録すればよい • 詳細は以下のブログ記事で紹介されている • https://openlineage.io/blog/extractors/ • https://openlineage.io/blog/operators-and-extractors-technical-deep-dive/ class BaseExtractor(ABC, LoggingMixin): @classmethod def get_operator_classnames(cls) -> List[str]: ... @abstractmethod def extract(self) -> Optional[TaskMetadata]: ... def extract_on_complete(self, task_instance) -> Optional[TaskMetadata]: ... リネージ情報を送信する Operator の名前 Operator の開始時に送信するリネージ情報の定義 Operator の終了時に送信するリネージ情報の定義
  21. © 2023 NTT DATA Corporation 21 まとめ • データリネージとは、データの送信元や加工内容、送信先に関するメタデータであり、管理ツールに一元化することで業務理解 や影響分析、トラブルシュート等に有用 • OpenLineage は、メタデータ管理ツールごとにまちまちなリネージ情報の収集方法をオープン標準化するためのプロジェクトで あり、Airflow や Spark, dbt などに対応 • OpenLineage に対応したメタデータ管理ツールのリファレンス実装として Marquez が存在 • Airflow 2.3 以上であれば, openlineage-airflow パッケージをインストールするだけで容易に導入可能 • 多くの Airflow Operator をサポート済みであるのに加えて、ユーザ自身で Extractor を追加することで未サポートの Operator にも対応可能
  22. © 2023 NTT DATA Corporation 本資料に記載されている会社名、商品名、 またはサービス名は、各社の登録商標または商標です。
Anúncio