Amazon SageMaker Workshop をやってみた2 ~ 3. Lakehouse ~
こんにちは!コンサルティング部のくろすけです!
前回(Amazon SageMaker Workshop をやってみた1 ~ 2. Unified Studio ~ | DevelopersIO)に引き続きこちらのワークショップをやっていこうと思います。
今回は[3. Lakehouse]のセクションについて記載しようと思います!
目次
- ワークショップのセクション構成
- 3.Lakehouse
- あとがき
※前回同様、つまづいたポイントなどかいつまんで記載していきます。
ワークショップのセクション構成
- 1. Getting Started [必須](ワークショップへの参加方法等なのでスキップ)
- 2. Unified Studio [必須]
- 3. Lakehouse <- 今回はここ
- 4. データ & AI ガバナンス
- 5. データ 処理
- 6. SQL 分析
- 7. ML/GenAI モデル 開発
- 8. GenAI アプリケーション 開発
- 9. おわりに
3.Lakehouse
ワークショップ内の Amazon SageMaker Lakehouse の説明を転記しておきます。
概要
Amazon SageMaker Lakehouse は、Amazon S3 のデータレイク、Amazon Redshift のデータウェアハウス、サードパーティのデータソースにまたがるデータを統合し、統一されたデータカタログ上で強力な分析、機械学習 (ML)、および生成 AI アプリケーションを構築できるようサポートします。Amazon SageMaker Lakehouse は、データの相互運用性とコラボレーションのためのアクセス制御と統合されたオープンソースの Apache Iceberg 形式に則した環境を提供します。Amazon SageMaker Lakehouse を使えば、データアーキテクチャを変更することなく、既存のデータ投資に基づいてオープンなレイクハウスを構築できます。ゼロ ETL 統合を通じて、運用データベースやアプリケーションからデータをリアルタイムにレイクハウスに取り込むことができます。SageMaker Lakehouse では、すべての Apache Iceberg 互換ツールやエンジン、Iceberg REST カタログ をサポートしているものを使って、データをその場所で参照およびクエリできる柔軟性があります。
主要コンポーネント
カタログ
Amazon Redshift からのスキーマ、テーブル、ビュー、マテリアライズドビューなどのデータストアからオブジェクトを編成する論理的なコンテナです。SageMaker AI Lakehouse 内のデータソースの階層構造が動的に反映されるネストされたカタログが作成されます。
Lakehouse にはカタログの種類として、フェデレーテッド カタログと マネージド カタログの 2 種類があります。
- フェデレーテッドカタログは、Lakehouse に追加する既存のデータソースのメタデータをマウントします。フェデレーテッドカタログは、Amazon Redshift、Amazon DynamoDB、Snowflake などの既存のデータソースを取り込むことができます。
- マネージドカタログは、Lakehouse で作成した新しいカタログを指します。マネージドカタログは、Redshift Managed Storage (RMS) または S3 ストレージを使用してデータを管理します。
データベース
データベースは、Amazon SageMaker Lakehouse のカタログ内のメタデータテーブルを編成します。
ストレージ
選択したレイクハウスのデータを格納するストレージの種類に基づいて、Amazon S3 または Redshift Managed Storage (RMS) にデータを読み書きできます。
テーブル/ビュー
テーブルとビューは、基盤となるデータへのアクセス方法と表現方法を定義するデータベースオブジェクトです。これらは、スキーマ、パーティション、ストレージの場所、ストレージ形式、データにアクセスするために必要な SQL クエリなどの詳細を指定します。
ワークショップの内容
- SageMaker Lakehouse - Federated Catalog : Amazon Redshift の「Retail Sales Performance」データセットを使用し、Federated Catalog 機能を使って SageMaker Lakehouse と統合します。
- SageMaker Lakehouse on S3 - Managed Catalog : Amazon S3 の「B2B Sales Pipeline」データセットを使用し、S3 - Managed Catalog 機能を使って SageMaker Lakehouse と統合します。
- SageMaker Lakehouse on RMS - Managed Catalog : Amazon Redshift の「Sales Representative performance」データセットを使用し、RMS - Managed Catalog 機能を使って SageMaker Lakehouse と統合します。
- S3 Tables : Amazon S3 Tables の「Store Details」データセットを使用し、SageMaker Catalog と統合します。
前提条件
Lake Formation の設定
ワークショップ参加者のIAMロール(WSParticipantRole/Participant)ですが、こちらは自分がAWSログインに使用しているIAMユーザーやIAMロールのことです。
権限の詳細まではわからなかったのですが、一部IAMロールなども操作するので強めの権限が必要です。
下記のように作成できました。
IAMロール(DataTransferRole)に関しては割愛します。
EMR Serverless コンピューティング
こちらは手順通り作成できました。
Redshift Serverless コンピュート
Redshift Serverless ワークグループと名前空間は存在しないので、作成する必要があります。
- Redshift serverless コンソール にアクセス
- [ ワークグループの作成 ] を選択
- 今回は以下のように設定し、[ 次へ ] を選択
ネットワーク関連は、前回のブログで作成したVPCのPrivateSubnetを使用するのがいいかと思います。
※セキュリティグループも自前で作成しましたが、特にインバウンドルールは設定しなくても問題ないようです。
- 今回は以下のように設定し、[ 次へ ] を選択
ワークショップの設定では(ユーザー/パスワード: awsuser/Awsuser123)になっていますが、念の為独自のパスワードを設定いただくのがいいかと思います。
※スクショでは設定していませんが、後段の手順で [ 関連付けられた IAM ロール ] に自分の IAM ユーザー/ロール を追加することになるので先んじて追加しておくことをお勧めします。
- 設定を確認し、[ 作成 ] を選択
あとは、前提条件の手順通りでOKでした。
権限の付与 - Unified Studio プロジェクトロール
こちらも手順通り設定できました。
ソースデータセットの準備
テストデータのファイルダウンロードのみなので、こちらも手順通りで問題ないです。
SageMaker Lakehouse - フェデレーテッドカタログ
下記がこのセクションの主な内容です。
- マネージド RMS ストレージを使用した AWS Glue マネージドカタログのセットアップ
- Redshift Serverless 名前空間への小売売上実績データの取り込み
- Redshift Serverless 名前空間での RMS ベースのテーブルの作成
- 名前空間を Federated Catalog として公開
- 異なるクエリエンジン (Amazon Athena、Amazon Redshift、Amazon EMR Serverless) を使用したテーブルのクエリ
SageMaker Lakehouse - フェデレーテッドカタログ (準備手順)
データセットを S3 にアップロードする
- ドメイン S3 プレフィックス (dzd_ で始まる) に移動し、プロジェクトのサブフォルダを展開し、3 つのドットメニューをクリックして files という名前の S3 プレフィックスを作成します。
この手順に関してS3バケット、フォルダの表示が若干変わっていたのでご紹介だけ。
ちなみに...
- S3ノードのパスはS3バケットのフォルダ構成と対応しています。
- 現状フォルダやオブジェクトの削除操作はS3バケット側で行う必要があるようです。
プロジェクトに Redshift コンピューティングを追加する
- 次のユーザー/パスワードの組み合わせを入力します: awsuser / Awsuser123
この手順では、上述の [Redshift Serverless コンピュート] セクションで作成した Redshift Serverless の ユーザー/パスワード を入力してください。
Redshift に retail_sales_performance テーブルを作成してデータをロードする
- 次に、この SQL コマンドを使用して S3 からデータをロードします。前に Notebook にコピーした S3 パスと IAM 認証情報を使用してファイルの場所を更新する必要があります。IAM 認証情報は、スタジオ環境で直接取得できます (詳細は以下の動画を参照してください)。
こちら途中でgifが切れてしまっていました。
あってるいるか微妙ですが自分は下記に記載の IAM ロール を使用しました。
この時、[Redshift Serverless コンピュート] セクションで作成した Redshift Serverless の許可IAMロールに上記のIAMロールを設定してあげる必要があります。
これでデータのロードまでできました。
Redshift Sserverless 名前空間をフェデレーテッドカタログとして登録する
- ここで、LakeFormation の Lakehouse 準備手順で Data Lake 管理者として追加した WSParticipantRole を追加する必要があります。Catalog permissions 欄では super user にチェックを入れます。
この IAM ユーザー/ロール は、[ Lake Formation の設定 ] で管理者登録を行った自分の IAM ユーザー/ロール を設定してください。
あとは、準備手順の手順通りでOKでした。
SageMaker Lakehouse - フェデレーテッドカタログ (AWS 管理クエリエンジンを使用してクエリ)
こちらのセクションに関しては、全て手順通りでOKでした。
Athena をクエリエンジンとして使用する
クエリ結果
Redshift をクエリエンジンとして使用する
クエリ結果
EMR をクエリエンジンとして使用する
クエリ結果
SageMaker Lakehouse - フェデレーテッドカタログ については以上です!
SageMaker Lakehouse on S3 - 管理された カタログ
下記がこのセクションの主な内容です。
- Amazon SageMaker Unified Studio を使用して、Amazon S3 ストレージにデータセットをアップロードする
- Amazon SageMaker Unified Studio によって SageMaker Lakehouse 内に作成されたテーブル構造の検出
- 異なるクエリエンジン (Amazon Athena、Amazon Redshift、Amazon EMR Serverless) を使用したテーブルのクエリ
SageMaker Lakehouse on S3 - 管理された カタログ (準備手順)
S3 にファイルをアップロードする
- ローカルマシンから b2b_sales_pipeline.csv を参照します。 別の方法として ファイルをドラッグアンドドロップすることもできます。
若干表示が変わっていましたのでご紹介までに、ドラックアンドドロップで下記のように設定されました。
- "Upload data" ボタンをクリックして b2b_sales_pipeline.csv ファイルをアップロードします。 注: Amazon SageMaker Unified Studio は、ファイルの種類を CSV、関連する圧縮形式、デリミタを自動的に検出します。ただし、必要に応じてこれらの値を変更することができます。
上記の手順の後に、Create tableの確認画面が追加されていましたので、実行していきます。
これで準備完了です。
SageMaker Lakehouse on S3 - 管理された カタログ (AWS 管理クエリエンジンを使用したクエリ)
こちらのセクションに関しては、全て手順通りでOKでした。
Athena をクエリエンジンとして使用する
クエリ結果
Redshift をクエリエンジンとして使用する
クエリ結果
EMR をクエリエンジンとして使用する
クエリ結果
SageMaker Lakehouse on RMS - 管理された カタログ
下記がこのセクションの主な内容です。
- Amazon SageMaker Unified Studio を使用して、RMS - Managed Catalog 上に SageMaker Lakehouse を作成およびロード
- Amazon SageMaker Unified Studio によって SageMaker Lakehouse 内に作成されたテーブル構造の検出
- 異なるクエリエンジン (Amazon Athena、Amazon Redshift、Amazon EMR Serverless) を使用したテーブルのクエリ
SageMaker Lakehouse on RMS - 管理された カタログ (準備手順)
こちらのセクションに関しては、全て手順通りでOKでした。
SageMaker Lakehouse on S3 - 管理された カタログ (AWS 管理クエリエンジンを使用したクエリ)
こちらのセクションに関しては、全て手順通りでOKでした。
Athena をクエリエンジンとして使用
クエリ結果
Redshift をクエリエンジンとして使用
クエリ結果
EMR をクエリエンジンとして使用
クエリ結果
S3 テーブル
下記がこのセクションの主な内容です。
- S3 テーブルバケットの作成と、その後の S3 テーブルバケット内でのネームスペースの作成
- このネームスペース内で、AWS 管理の S3 テーブルを使用してテーブルを作成
- 新しく作成したテーブルにストアの詳細データを取り込み
- 異なるクエリエンジン (Amazon Athena、Amazon Redshift、Amazon EMR Serverless) を使用してテーブルのクエリ
S3 テーブル (準備手順)
stg テーブルに Store Details データセットをアップロードする
- store_details.csv ファイルをドラッグ&ドロップし、Table name に stg_store_details と入力します。次に Upload data ボタンを選択します。
- Lakehouse > AwsDataCatalog > salesmarketing_XXXXX の下に stg_store_details テーブルが表示されることを確認します。 注: このテーブルは S3 テーブルをロードする際に使用します。
上記の手順については、[ SageMaker Lakehouse on S3 - 管理された カタログ (準備手順)] > [ S3 にファイルをアップロードする ] と同様に若干表示が変わっていました。
s3 テーブルデータベースのリソースリンクを作成する
- Actions ドロップダウンをクリックし、Create resource link を選択します。
[ Create resource link ] の導線が変わっていました。
S3 テーブル (AWS 管理クエリエンジンを使用してクエリ)
- stg テーブル (stg_store_details) を使用して、S3 テーブル (store_details) をロードするための以下の SQL を実行します。
こちらは対応が正しいかは不明ですが、Lake Formation において Unified Studio の Project role を Data lake administrators に登録しないと権限不足のエラーが発生しました。
Athena をクエリエンジンとして使用
クエリ結果
Redshift をクエリエンジンとして使用
クエリ結果
Lakehouse 全体でクエリ
下記がこのセクションの主な内容です。
- 異なるクエリエンジン (Amazon Athena、Amazon Redshift、Amazon EMR Serverless) を使用して下記のテーブルを照会・結合してのクエリ
- SageMaker Lakehouse - Federated Catalog からの retail_sales_performance.csv
- SageMaker Lakehouse on S3 - Managed Catalog からの b2b_sales_pipeline.csv
- SageMaker Lakehouse on RMS - Managed Catalog からの sales_rep_performance.csv
- S3 Tables からの store_details.csv
Lakehouse 全体でクエリ (AWS 管理クエリエンジンを使用してクエリ)
Athena をクエリエンジンとして使用
クエリ結果
Redshift をクエリエンジンとして使用
クエリ結果
EMR をクエリエンジンとして使用
クエリ結果
あとがき
前提の検証環境の構成がわからず苦戦しました。
これからのサービスなので、デザインのアップデートもまだまだ入りそうですね。
結構掻い摘んでしまったのでわかりづらいかもしれないですが、ご参考になれば幸いです。