Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20241220_S3 tablesの使い方を検証してみた

daiki.handa
December 20, 2024

20241220_S3 tablesの使い方を検証してみた

「Storage-JAWS #6 AWS re:Invent 2024 re:Cap 大会!」での発表資料です。

daiki.handa

December 20, 2024
Tweet

More Decks by daiki.handa

Other Decks in Technology

Transcript

  1. Copyright © 2024 BeeX Inc. All Rights Reserved. 2 Storage-JAWS

    #6 自己紹介 ・名前 半田 大樹(Handa Daiki) ・所属 株式会社BeeX ・業務歴 2022年~:クラウド全般の技術支援 2019年~:データ分析基盤の開発保守 ・好きなAWSサービス Amazon S3、AWS Step Functions ・趣味 猫様のお世話、資格取得 ×15 ×10 ×9 X→@handydd18 2024 Japan AWS ALL Certifications Engineer 2023 Japan AWS Top Engineer 2023 Japan AWS ALL Certifications Engineer 2022 APN ALL AWS Certifications Engineer
  2. Copyright © 2024 BeeX Inc. All Rights Reserved. 3 免責事項

    • 本日お話しする内容は2024/12/20時点の情報を元に作成しております • Preview機能が含まれるため、一般提供時には変更される可能性があります Storage-JAWS #6
  3. Copyright © 2024 BeeX Inc. All Rights Reserved. 4 今日の話

    Storage-JAWS #6 参考:https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html
  4. Copyright © 2024 BeeX Inc. All Rights Reserved. 5 今日の話

    Storage-JAWS #6 参考:https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html この部分
  5. Copyright © 2024 BeeX Inc. All Rights Reserved. 6 まずその前に…

    S3 Tablesとは? (What’s Newより) • Apache Icebergをサポートした初のクラウドオブジェクトストア • 表形式データを最も簡単に大規模に保存する • 自己管理テーブル(通常のS3)と比較して最大3倍のクエリスループットと最大 10倍のトランザクション/秒を実現 • 一般的なAWSサービスやサードパーティのクエリエンジンで簡単にクエリ可能 Storage-JAWS #6 参考:https://aws.amazon.com/jp/about-aws/whats-new/2024/12/amazon-s3-tables-apache-iceberg-tables-analytics-workloads/
  6. Copyright © 2024 BeeX Inc. All Rights Reserved. 7 まずその前に…

    Apache Icebergとは? • Netflixが2017年に開発したOpen Tables Format • 現在はApache Foundationに寄贈され、開発が進められている • データレイク上のデータ処理を簡素化する • 最新バージョンは2024/12/6にリリースされた v1.7.1 • S3 Tablesで利用しているのは2024/8/27にリリースされた v1.6.1 Storage-JAWS #6
  7. Copyright © 2024 BeeX Inc. All Rights Reserved. 8 まずその前に…

    Open Table Formatとは? Storage-JAWS #6 クエリエンジン ストレージ テーブルフォーマット 参考:https://bering.hatenadiary.com/entry/2023/09/24/175953 Amazon S3 Amazon Athena(Glue) ・ ・ ・ アクセス 操作 テーブル仕様に基づいてデータ、 メタデータへアクセス
  8. Copyright © 2024 BeeX Inc. All Rights Reserved. 9 まずその前に…

    Open Table Formatとは? 参考:https://iceberg.apache.org/spec/#overview Storage-JAWS #6 S3上でファイルとして管理 Glue上で管理 Athenaでアクセス Icebergをサポートしている必要がある Icebergをサポートしている必要がある =概念的にはNTFSやext4などが近い? 拡張子はparquet 拡張子はjsonなど
  9. Copyright © 2024 BeeX Inc. All Rights Reserved. 10 まずその前に…

    S3 Tablesで何が嬉しいのか? 参考:https://iceberg.apache.org/spec/#overview Storage-JAWS #6 S3上でファイルとして管理 Glue上で管理 Athenaでアクセス Icebergをサポートしている必要がある Icebergをサポートしている必要がある ファイルが貯まり続けるため定期的な整理が必要 =圧縮やスナップショットの管理作業など Iceberg Cataglogのメタデータ管理のための 仕組みが必要
  10. Copyright © 2024 BeeX Inc. All Rights Reserved. 11 まずその前に…

    S3 Tablesで何が嬉しいのか? 参考:https://iceberg.apache.org/spec/#overview Storage-JAWS #6 S3上でファイルとして管理 Glue上で管理 Athenaでアクセス Icebergをサポートしている必要がある Icebergをサポートしている必要がある ファイルが貯まり続けるため定期的な整理が必要 =圧縮やスナップショットの管理作業など Iceberg Cataglogのメタデータ管理のための 仕組みが必要 自動化するメンテナンスジョブが提供される 定期的なクローリング等の追加のメタデータ管理が不要になる
  11. Copyright © 2024 BeeX Inc. All Rights Reserved. 13 本題

    技術的な内容は以下の記事に大体書いてますので、今日はいくつかポイントを ピックアップして説明します Storage-JAWS #6 https://qiita.com/handy-dd18/items/1e0b251f9dce767f6bcd https://qiita.com/handy-dd18/items/8af7f5a9427402d94ed3
  12. Copyright © 2024 BeeX Inc. All Rights Reserved. 14 S3

    Tablesリソースの構築方法 2024/12/20時点でドキュメント上で確認できた限りだと、 3種類の構築方法があります。 CloudFormation/CDKはドキュメントに記載が見つかりませんでした。 Storage-JAWS #6 AWS Management Console AWS CLI ※v2.22.10で確認済み AWS SDK ※Boto3 v1.35.84ドキュメントに記載あり Terraformは既に対応しているようです →https://www.hashicorp.com/blog/terraform-launch-day-support-amazon-s3-tables-eks-hybrid-nodes-and-more
  13. Copyright © 2024 BeeX Inc. All Rights Reserved. 15 S3

    Tablesの構成 S3 Tablesの構成と分析サービスの関連図は次のようになっています。 ※S3 Tablesと分析サービスの統合機能はPreview提供 Storage-JAWS #6 参考:https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html AWS Cloud Region S3 Tables Table Bucket A Namespace A Table A Lake Formation s3tablescatalog Catalog A Database A Table A awsdatacatalog Resource link A Shared Catalog A Table A 登録 共有設定 Table B Table C Athena Redshift Data Firehose EMR QuickSight 参照 クエリ クエリ
  14. Copyright © 2024 BeeX Inc. All Rights Reserved. 16 S3

    Tablesの構成 S3 Tablesの構成と分析サービスの関連図は次のようになっています。 ※S3 Tablesと分析サービスの統合機能はPreview提供 Storage-JAWS #6 参考:https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html AWS Cloud Region S3 Tables Table Bucket A Namespace A Table A Lake Formation s3tablescatalog Catalog A Database A Table A awsdatacatalog Resource link A Shared Catalog A Table A 自動マウント 共有設定 Table B Table C Athena Redshift Data Firehose EMR QuickSight 参照 クエリ クエリ テーブルバケットは複数のテーブルの管理単位 名前空間はテーブルの論理的な分割単位 マネージドなIcebergテーブル
  15. Copyright © 2024 BeeX Inc. All Rights Reserved. 17 S3

    Tablesの構成 S3 Tablesの構成と分析サービスの関連図は次のようになっています。 ※S3 Tablesと分析サービスの統合機能はPreview提供 Storage-JAWS #6 参考:https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html AWS Cloud Region S3 Tables Table Bucket A Namespace A Table A Lake Formation s3tablescatalog Catalog A Database A Table A awsdatacatalog Resource link A Shared Catalog A Table A 登録 共有設定 Table B Table C Athena Redshift Data Firehose EMR QuickSight 参照 クエリ クエリ S3 Tablesの論理的な紐付け先 1対1で紐付け
  16. Copyright © 2024 BeeX Inc. All Rights Reserved. 18 S3

    Tablesの構成 S3 Tablesの構成と分析サービスの関連図は次のようになっています。 ※S3 Tablesと分析サービスの統合機能はPreview提供 Storage-JAWS #6 参考:https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html AWS Cloud Region S3 Tables Table Bucket A Namespace A Table A Lake Formation s3tablescatalog Catalog A Database A Table A awsdatacatalog Resource link A Shared Catalog A Table A 登録 共有設定 Table B Table C Athena Redshift Data Firehose EMR QuickSight 参照 クエリ クエリ Glue Data Catalogに紐付けのため リソースリンクを作成 Glue 紐付け
  17. Copyright © 2024 BeeX Inc. All Rights Reserved. 19 S3

    Tablesの構成 S3 Tablesの構成と分析サービスの関連図は次のようになっています。 ※S3 Tablesと分析サービスの統合機能はPreview提供 Storage-JAWS #6 参考:https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-aws.html AWS Cloud Region S3 Tables Table Bucket A Namespace A Table A Lake Formation s3tablescatalog Catalog A Database A Table A awsdatacatalog Resource link A Shared Catalog A Table A 登録 共有設定 Table B Table C Athena Redshift Data Firehose EMR QuickSight 参照 クエリ クエリ QuickSightはAthena経由でアクセスする
  18. Copyright © 2024 BeeX Inc. All Rights Reserved. 20 S3

    Tablesの構成 S3 TablesのAPIを分類すると次のようになります。 Storage-JAWS #6 参考:https://docs.aws.amazon.com/AmazonS3/latest/API/API_Operations_Amazon_S3_Tables.html テーブルバケット 関連 ネームスペース 関連 テーブル 関連 メンテナンス 関連 • CreateNamespace • DeleteNamespace • GetNamespace • ListNamespaces • CreateTableBucket • DeleteTableBucket • DeleteTableBucketPolicy • GetTableBucket • GetTableBucketPolicy • GetTableMetadataLocation • ListTableBuckets • PutTableBucketPolicy • UpdateTableMetadataLocation • CreateTable • DeleteTable • DeleteTablePolicy • GetTable • GetTablePolicy • ListTables • PutTablePolicy • RenameTable • GetTableBucketMaintenanceConfig uration • GetTableMaintenanceConfiguration • GetTableMaintenanceJobStatus • PutTableBucketMaintenanceConfig uration • PutTableMaintenanceConfiguration
  19. Copyright © 2024 BeeX Inc. All Rights Reserved. 21 S3

    Tablesの使い方 公開されているドキュメントや検証記事を見る限りだと、現時点で明示的にテー ブルリソースにデータを投入するにはSpark SQLかData Firehoseを利用するし かなさそうです。 Storage-JAWS #6 Data Firehose EMR Glue CloudShell Local
  20. Copyright © 2024 BeeX Inc. All Rights Reserved. 22 S3

    Tablesの使い方 • ドキュメントに記載されているSpark Shell起動コマンド(EMR) • 実際に実施したSpark Shell起動コマンド(Local) Storage-JAWS #6 spark-shell ¥ --packages software.amazon.s3tables:s3-tables-catalog-for-iceberg-runtime:0.1.3 ¥ --conf spark.sql.catalog.s3tablesbucket=org.apache.iceberg.spark.SparkCatalog ¥ --conf spark.sql.catalog.s3tablesbucket.catalog-impl=software.amazon.s3tables.iceberg.S3TablesCatalog ¥ --conf spark.sql.catalog.s3tablesbucket.warehouse=arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket1 ¥ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions $ spark-shell ¥ --packages org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.6.1,¥ software.amazon.s3tables:s3-tables-catalog-for-iceberg-runtime:0.1.3,¥ org.apache.hadoop:hadoop-aws:3.3.4,¥ software.amazon.awssdk:s3:2.20.68,¥ software.amazon.awssdk:sts:2.20.68,¥ software.amazon.awssdk:dynamodb:2.20.68,¥ software.amazon.awssdk:glue:2.20.68,¥ software.amazon.awssdk:kms:2.20.68,¥ software.amazon.awssdk:url-connection-client:2.20.68 ¥ --conf spark.sql.catalog.[構築したテーブルバケット名]=org.apache.iceberg.spark.SparkCatalog ¥ --conf spark.sql.catalog.[構築したテーブルバケット名].catalog-impl=software.amazon.s3tables.iceberg.S3TablesCatalog ¥ --conf spark.sql.catalog.[構築したテーブルバケット名].warehouse=[構築したテーブルバケットARN] ¥ --conf spark.sql.catalog.[構築したテーブルバケット名].region=us-east-1 ¥ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
  21. Copyright © 2024 BeeX Inc. All Rights Reserved. 23 S3

    Tablesの検証構成 Preview提供されているAWSサービスの内、利用されやすそうなサービスに絞って 検証しました。QuickSightはAthenaを利用するため、検証対象から除外してます。 Storage-JAWS #6 AWS Cloud Data Firehose Local S3 Tables Athena Redshift Lake Formation データ投入 アクセス データ投入
  22. Copyright © 2024 BeeX Inc. All Rights Reserved. 24 S3

    Tablesの使い方 Athenaの場合 Storage-JAWS #6 AWS Cloud Local S3 Tables Athena Lake Formation データ投入 アクセス ①指定のIAMリソースにDatabase(=Namespace)への データベースレベルの権限を付与 ②指定のIAMリソースにTableへのテーブルレベルの 権限を付与 ③クエリを実行
  23. Copyright © 2024 BeeX Inc. All Rights Reserved. 25 S3

    Tablesの使い方 Athenaの場合 Storage-JAWS #6 SQL: SELECT * FROM "s3tablescatalog/[テーブルバケット名]"."[名前空間]"."[テーブル名]"
  24. Copyright © 2024 BeeX Inc. All Rights Reserved. 26 S3

    Tablesの使い方 Redshiftの場合 Storage-JAWS #6 AWS Cloud Local S3 Tables Redshift Lake Formation データ投入 アクセス ①S3 Tables名前空間リソースへのリソースリンクを作成 ②指定のIAMリソースにDatabase/Tableへの データベースレベル、テーブルレベルの権限を付与 ③awsdatacatalogへのデータベース権限を付与 ④クエリ実行(IAM認証)
  25. Copyright © 2024 BeeX Inc. All Rights Reserved. 27 S3

    Tablesの使い方 Redshiftの場合 Storage-JAWS #6 SQL: SELECT * FROM awsdatacatalog .[名前空間].[テーブル名]
  26. Copyright © 2024 BeeX Inc. All Rights Reserved. 28 S3

    Tablesの使い方 Data Firehoseの場合 Storage-JAWS #6 AWS Cloud Data Firehose Local S3 Tables Redshift Lake Formation データ投入 アクセス データ投入 ①S3 Tables名前空間リソースへのリソースリンクを作成 ②指定のIAMリソースにDatabase/Tableへの データベースレベル、テーブルレベルの権限を付与 ③①のリソースリンクを指定して構築 ⑤クエリ実行(IAM認証) ④データ投入スクリプト実施
  27. Copyright © 2024 BeeX Inc. All Rights Reserved. 29 S3

    Tablesの使い方 Data Firehoseの場合 Storage-JAWS #6
  28. Copyright © 2024 BeeX Inc. All Rights Reserved. 30 S3

    Tablesの使い方 検証時のハマりどころ • データ投入のためのSpark環境の構築ドキュメントがなく、EMR向けのspark- shell起動オプションだと不足していた • S3テーブルバケットにハイフン(-)を利用すると、分析サービスからクエリす るときに何故かハイフン周りでエラーが発生した • ドキュメントではLake Formationでテーブルレベルの許可手順のみしか書か れていないが、実施はデータベースレベルも許可しないとクエリに失敗した Storage-JAWS #6
  29. Copyright © 2024 BeeX Inc. All Rights Reserved. 32 S3

    Tablesの使い方 まとめ ※2024/12/20時点 • S3 Tablesとは、S3とApache Icebergが統合された、分析に適したS3ス トレージを提供 • S3 Tables内のデータは表形式で管理される • S3 Tablesを構築する方法はマネジメントコンソール、AWSCLI、 AWSSDK、Terraformの4種類のみ • データの投入にはSpark SQLかData Firehoseを利用する • Lake Formationを利用して各種分析サービスから参照が可能(Preview) Storage-JAWS #6
  30. Copyright © 2024 BeeX Inc. All Rights Reserved. 34 おまけ

    2024/11/15のアップデートでData DirehoseがRDBからIcebergテーブルへの CDC配信をサポート(Preview) Storage-JAWS #6 参考:https://aws.amazon.com/jp/blogs/news/replicate-changes-from-databases-to-apache-iceberg-tables-using-amazon-data-firehose/