オープンソースのデータ・ディスカバリーおよびメタデータ・エンジン「Amundsen」の概要紹介&クイックスタート実践

2020.10.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

以前購入した下記書籍『AWSで始めるデータレイク』を切っ掛けにこの書籍を題材にした読書会を始めた、というのはエントリ内でも言及していました。その読書会も今月末の第24回を以て無事最終回を迎える予定です。ほぼ週2回(1回1時間)のペースで駆け抜けた形となりましたが、様々なトピックで大いに盛り上がる内容となりました。

その中でも盛り上がったトピックが『データカタログ』でした。書籍ではAWS Glueのデータカタログが言及・紹介されていましたが、Glueデータカタログ機能そのものの話から、『データカタログ』に求めるもの、また『俺達の欲しいデータカタログ機能はこういうものなのだ』というディスカッションは参加者各位の経験やノウハウ等も相まって熱量が最も多く、また様々な示唆に飛んだ知見を共有することが出来てとても有意義な時間となりました。これだけでも読書会をやった価値があったな、と思った次第です。

そんな中、下記たまちゃんのブログエントリを目にしました。このレポートでデータカタログ関連のプロダクトとして「Amundsen」というものが紹介されており、色々内容を確認してみると「これば便利そうだぞ...!」という感じで俄然気になって参りました。

そこで当エントリでは「Amundsen」についてその概要と、公式サイトで紹介されていた「クイックスタート」を実践してみた内容について紹介したいと思います。

目次

 

Amundsenとは

Amundsenは、データ・アナリストやデータ・サイエンティスト、エンジニアがデータと対話する際の生産性を向上させるためのデータ・ディスカバリーおよびメタデータ・エンジンです。謂わば『データのためのGoogle検索』みたいなものと考えて頂ければ良いかと思います。

データリソース(テーブルやダッシュボード、ストリーム情報など)にインデックスを作成し、利用パターンに基づいたページ情報、ランク情報、スタイル等の検索を可能にしています。(例えば、クエリの多いテーブルはクエリの少ないテーブルよりも早く表示されます)

ちなみにプロジェクトの名前(Amundsen)は、南極点を最初に発見したノルウェーの探検家ロアール・アムンセンにちなんで付けられているそうです。

 

Amundsenを構成するコンポーネント

Amundsenは『LF AI Foundation(LF AI)』という団体によってホストされており、3つのマイクロサービス、1つのデータインジェストライブラリ、1つの共通ライブラリで構成されています。

Amundsen Frontend Service
FlaskアプリケーションにReactのフロントエンドを搭載したフロントエンドサービス。
Amundsen Search Service
検索機能にElasticsearchを活用した検索サービス。フロントエンドのメタデータ検索を強力にサポート
Amundsen Metadata Service
メタデータサービス。Neo4jやApache Atlasをパーシステントレイヤーとして活用し、様々なメタデータを提供
Amundsen Databuilder
メタデータグラフと検索インデックスを構築するためのデータインジェストライブラリ。ユーザーはこのライブラリを使って python スクリプトでデータを読み込むか、ライブラリをインポートした Airflow DAG を使ってデータを読み込むことができる
Amundsen Common
Amundsen のマイクロサービス間の共通コードを保持する共通ライブラリ。
amundsengremlin
モデルオブジェクトを gremlin で頂点と辺に変換するためのコードを保持するライブラリ。AWS Neptuneのバックエンドにデータをロードするために使われている

 

Amundsenのアーキテクチャ

Amundsenのアーキテクチャ概要については以下のページにまとまっています。

 

サポートされている統合・連携について

テーブル接続

以下の多種多様なデータソース情報に対応している模様です。

  • Amazon Athena
  • Amazon Glue及びその上に構築されたもの(Databricks Deltaのような)
  • Amazon Redshift
  • Apache Cassandra
  • Apache Druid
  • Apache Hive
  • CSV
  • Google BigQuery
  • IBM DB2
  • Microsoft SQL Server
  • MySQL
  • Oracle (dpapi または sql_alchemy 経由)
  • PostgreSQL
  • Presto
  • Snowflake

Amundsenでは、dbapisql_alchemyを介して任意のデータベースにアクセスする事も可能です。

ダッシュボード接続

  • Mode Analytics
  • Redash
  • Tableau

ETLオーケストレーション

  • Apache Airflow

BI可視化ツール

  • Apache Superset

 

ロードマップ

現在取り組んでいる、または今後想定している『ロードマップ』の情報については以下に記載されています。

 

Amundsen クイックスタート実践

公式ドキュメントには「クイックスタート」のページが用意されています。実際にどのような挙動をするものなのか、環境を構築しながら確認してみたいと思います。

 

Amundsenのインストール

公式ドキュメントには、Dockerを使って環境をセットアップする手順が紹介されています。この手順に従って環境を準備します。

まずはじめに、Docker環境を用意してDocker上で少なくとも3GBの空き領域が利用出来るようにしておきます。今回はMac OSX上にDocker Desktopをインストールする事で環境を準備しました。

実行環境として求められるものは以下。

  • Python = 3.6 or 3.7
  • Node = v10 or v12 (v14には互換性の問題がある可能性があるかもしれない)
  • npm >= 6

Mac OSX上で実践の際に用意していたバージョンは以下。nodeのバージョンがちょっと気になったけど今回の手順を試す分には特に問題ありませんでした。

% python --version
Python 3.7.6
% node --version
v14.6.0
% npm --version
6.14.7

git cloneコマンドで公式リポジトリ及びサブモジュール一式のクローンを作成。

% git --version
git version 2.28.0
% mkdir amundsen-demo
% cd amundsen-demo 
% git clone --recursive https://github.com/amundsen-io/amundsen.git

クローン出来たらディレクトリに移動し以下コマンドを実行。バックエンドに採用する方式としてNeo4jとAtlasの2つが選択可能となっていますが、今回はNeo4jの方を選びました。

% cd amundsen 
% docker-compose -f docker-amundsen.yml up

上記docker-composeコマンドを実行したものとは別のターミナルウインドウを立ち上げ、amundsendatabuilderフォルダに移動。

% pwd
/.../.../amundsen-demo/amundsen
% cd amundsendatabuilder

続いて下記コマンド群を実行。examplesフォルダ配下に含まれるPythonスクリプト群を実行することにより、elasticsearchクライアント、pyhocon、その他のライブラリを用いて依存関係をインストールし、サンプルデータのセットアップまで行っています。

xxxxx@xxxxx amundsendatabuilder % python3 -m venv venv
xxxxx@xxxxx amundsendatabuilder % source venv/bin/activate
(venv) xxxxx@xxxxx amundsendatabuilder % pip3 install -r requirements.txt
(venv) xxxxx@xxxxx amundsendatabuilder % python3 setup.py install
(venv) xxxxx@xxxxx amundsendatabuilder % python3 example/scripts/sample_data_loader.py

これでセットアップ作業は完了です。

 

Amundsenデモ操作実践

ブラウザでhttp://localhost:5000へアクセス。以下のような形でデモ画面が表示されました。

テキストボックスにキーワードを入れると、そのキーワードでデータセットの検索が可能です。結果単体をクリックする事でそのデータセットの詳細に出来ます。また「See all * Datasets results」のリンクをクリックすると、

以下のような形で検索結果の一覧を見ることが出来ます。

画面左側のメニューでは、各種カテゴリや要素による絞り込み検索が可能です。データソースの種類(Source)や、

スキーマ名・テーブル名、

保持するカラム名、

データセットに付与されているタグ名などが利用出来ます。

データセットの結果には「ブックマーク」を付けることが出来ます。星印部分をクリックすると以下のような形で有効となり、

トップページの「Bookmarks」欄に表示されるようになります。

データセット詳細にアクセスすると、以下のような情報がレイアウトされた形で閲覧可能です。

画面右側のカラム情報に関しては、クリックする事でカラム毎の詳細情報を表示・確認することが可能です。

カラムにはメモを追記出来ます。

http://localhost:7474/browser/にアクセスすると、データセット間の関係性をNeo4jのインタフェースで参照・確認することが出来ます。MATCH (n:Table) RETURN n LIMIT 25という条件を入れてEnterを押下すると、

以下のような形で結果が表示されました。これらはクリック操作等で展開可能です。

試しに1つを選択。選択時のメニューで"広がっていく矢印"のアイコンをクリックすると、

以下のような形で要素間の関係性を可視化した状態で更に要素が展開されて表示されました。

Neo4jで可視化した内容は、他の形式でもその内容を確認することが可能です。「Table」だとこんな風に、

「Text」だとこんな風、

「Code」だとこんな風に情報を閲覧することが出来ています。

 

まとめ

というわけで、オープンソースのデータディスカバリー&メタデータエンジン「Amundsen」の概要及びクイックスタート実践の紹介でした。

当エントリで紹介した内容はほんの触り程度でしたが、シンプルながらも分かりやすいインタフェースで、活用出来るとこれはとても便利なのでは...?と思いました。接続可能なデータソース情報の中に(DBやDWHと合わせて)「AWS Glue」も選択肢に入っていたので、AWS Glueで得られたデータカタログ情報を更にこのAmundsenで活用する...みたいなことも出来るのでは?と自分の中でちょっと夢が広がっています。Amundsenを構成するモジュール個別の深堀り、また公式ドキュメントでもこの他に幾つかチュートリアルが展開されているようなので、改めて時間を見つけてその辺りも踏み込んで行ければと思います。