Amazon EMR で Spark を使用して AWS Glue Data Catalog でマルチカタログ階層を操作する - Amazon EMR

Amazon EMR で Spark を使用して AWS Glue Data Catalog でマルチカタログ階層を操作する

Amazon EMR クラスターを登録して AWS Glue Data Catalog にアクセスできます。これにより、テーブルやその他のカタログリソースをさまざまなコンシューマーが利用できるようになります。 AWSGlue Data Catalog は、Amazon S3 データレイク全体のデータを統合するマルチカタログ階層をサポートしています。また、データにアクセスするための Hive メタストア API とオープンソースの Apache Iceberg REST API の両方が用意されています。これらの機能は、Amazon Athena とその他のデータ指向サービス (Amazon EMR、Amazon Athena、Amazon Redshift など) で使用できます。

カタログリソースの整理方法

AWS Data Catalog でリソースを作成することにより、Apache Iceberg REST API または Hive メタストアをサポートしている SQL エンジンからそれらのリソースにアクセスできます。アクセス許可は AWS によって管理されます。Lake Formation はアクセス許可を管理します。

AWS Glue Data Catalog では、データはカタログ、データベース、テーブルの論理階層に整理されます:

  • カタログ – スキーマやテーブルなどデータストアのオブジェクトを保持する論理コンテナ。

  • Redshift マネージドストレージ (RMS) テーブルを保存するカタログ – RMS テーブルを保存するカタログを管理する場合、Iceberg を使用してこれらのテーブルにアクセスできます。

  • データベース – テーブルやビューなどのデータオブジェクトをカタログ内で整理します。

  • テーブルとビュー – 抽象化レイヤーと理解可能なスキーマを提供するデータベース内のデータオブジェクト。基盤となるデータにアクセスするためのレイヤーを提供します。これは、さまざまな形式や場所にある可能性があります。

Amazon EMR で使用するデータカタログの設定

開始するには、Amazon EMR ツールをサポートするようにカタログを設定します。AWS Glue Data Catalog は、Hive メタストア互換性と Iceberg REST 互換 API。

Hive メタストアを使用した Amazon EMR の設定

これを設定する方法については、「AWS Glue ユーザーガイド」の「Spark SQL ジョブ用の AWS Glue Data Catalog のサポート」を参照してください。このトピックでは、AWS Glue Data Catalog を Hive メタストアとして設定し、エンドポイントとして利用できるようにする方法について説明します。さらに、Spark の Apache Hive メタストアとしての AWS Glue Data Catalog の使用において、Spark メタストアとして AWS Glue Data Catalog を指定する方法を示す Amazon EMR ドキュメントも用意されています。

Glue Data Catalog AWS のリソースにアクセスするためのアクセス許可

このセクションでは、カタログデータで Amazon EMR ツールを使用するための IAM ポリシー要件について説明します。プロビジョニング済みクラスターまたはサーバーレス名前空間を AWS Glue Data Catalog に登録した後、その後作成されるデータカタログの作成や変更を検知するには、以下のアクセス許可が必要です:

  • glue:GetCatalog

  • glue:GetCatalog

  • sts:AssumeRole

  • sts:TagSession

  • sts:SetContext

  • sts:SetSourceIdentity

ほとんどの場合、アクセス許可を割り当てるときは、IAM ロールを作成してアクセス許可を割り当てることをお勧めします。

加えて、カタログデータをクエリするには、まず AWS Lake Formation を使用して、データカタログに対するアクセス許可を設定する必要があります。AWS Lake Formation でデータカタログのアクセス許可を設定する方法の詳細については、「Granting and revoking permissions on Data Catalog resources」を参照してください。

クラスターを作成して設定し、カタログオブジェクトに対するアクセス許可を設定したら、データをクエリおよび処理するためのジョブを送信できます。

AWS Glue Data Catalog でマルチカタログ階層にアクセスするように Spark を設定する

EMR 7.5 では、AWS Glue のマルチカタログ階層を使用するように Spark を設定できます。マルチカタログ階層を使用することにより、以下のことが可能になります:

  • テーブル、ビュー、マテリアライズドビューなどの Redshift マネージドストレージ (RMS) データを既存の Amazon Redshift データウェアハウスから AWS Glue Data Catalog に取り込みます。EC2 および EMR Serverless の EMR を使用して、これらのオブジェクトをクエリできます。

  • RMS カタログ、AWS Glue Data Catalog を作成し、ZeroETL を使用して RMS にデータを保存し、Iceberg 互換クエリエンジンでデータをクエリします。

  • 圧縮、スナップショット、保持を含むフル機能のストレージ管理を使用して、AWS Glue Data Catalog にマネージド Iceberg テーブルを作成します。

Spark セッションを初期化する時にマルチカタログに接続する

次の例は、インタラクティブな Spark シェル、Spark 送信、または Amazon EMR Notebooks を使用して AWS Glue のマルチカタログ階層を操作する方法を示しています。

spark-shell
  1. SSH を使用してマスターノードに接続します。詳細については、「Amazon EMR 管理ガイド」の「SSH を使用してマスターノードに接続する」を参照してください。

  2. 以下のコマンドを入力して、Spark シェルを起動します。PySpark シェルを使用するには、spark-shellpyspark に置き換えます。

    spark-shell \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.warehouse=s3://amzn-s3-demo-bucket/prefix/ --conf spark.sql.catalog.my_catalog.type=glue \ --conf spark.sql.catalog.my_catalog.glue.id=Glue RMS catalog ID \ --conf spark.sql.defaultCatalog=my_catalog \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
spark-submit
  1. SSH を使用してマスターノードに接続します。詳細については、「Amazon EMR 管理ガイド」の「SSH を使用してマスターノードに接続する」を参照してください。

  2. 以下のコマンドを入力して、Spark の Spark セッションを起動します。

    spark-submit \ --conf spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.my_catalog.warehouse=s3://amzn-s3-demo-bucket1/prefix \ --conf spark.sql.catalog.my_catalog.type=glue \ --conf spark.sql.catalog.my_catalog.glue.id=Glue RMS catalog ID \ --conf spark.sql.defaultCatalog=my_catalog \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
EMR Studio notebooks

EMR Studio ノートブックを使用して Spark セッションを初期化するには、次の例のように、Amazon EMR Notebooks で %%configure マジックコマンドを使用して Spark セッションを設定します。詳細については、「Amazon EMR 管理ガイド」の「Use EMR Notebooks magics」を参照してください。

%%configure -f{ "conf":{ "spark.sql.catalog.my_catalog":"org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.my_catalog.type":"glue", "spark.sql.catalog.my_catalog.glue.id":"Glue RMS catalog ID", "spark.sql.catalog.my_catalog.warehouse":"s3://amzn-s3-demo-bucket1/prefix/", "spark.sql.defaultCatalog", "my_catalog", "spark.sql.extensions":"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" } }
CLI

CLI を使用して Spark セッションを初期化するには、次のサンプルを実行します。AWS CLI と Amazon EMR API を使用した設定分類の指定方法の詳細については、「Configure applications」を参照してください。

[ { "Classification": "spark-defaults", "Properties": { "spark.sql.catalog.my_catalog":"org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.my_catalog.type":"glue", "spark.sql.catalog.my_catalog.glue.id":"Glue RMS catalog ID", "spark.sql.catalog.my_catalog.warehouse":"s3://amzn-s3-demo-bucket1/prefix/", "spark.sql.defaultCatalog", "my_catalog", "spark.sql.extensions":"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" } } ]

AWS Glue Data Catalog を使用して Redshift マネージドストレージへの Spark セッションを初期化する

以下のサンプルコマンドは、AWS Glue Data Catalog を使用して Spark セッションを初期化します。

spark-sql \ --conf spark.sql.catalog.rms=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.rms.type=glue \ --conf spark.sql.catalog.rms.glue.id=Glue RMS catalog ID \ --conf spark.sql.defaultCatalog=rms --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

以下のサンプルでは、AWS Glue Data Catalog での Iceberg REST API と Redshift Managed Storage を使用して Spark セッションを初期化します。

spark-sql \ --conf spark.sql.catalog.rms=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.rms.type=rest \ --conf spark.sql.catalog.rms.warehouse=glue RMS catalog ID \ --conf spark.sql.catalog.rms.uri=Glue endpoint URI/iceberg \ --conf spark.sql.catalog.rms.rest.sigv4-enabled=true \ --conf spark.sql.catalog.rms.rest.signing-name=glue \ --conf spark.sql.defaultCatalog=rms \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

Spark Iceberg で AWS Glue マルチカタログ階層を使用する方法の詳細については、「Use an Iceberg cluster with Spark」を参照してください。

マルチカタログ設定に関する考慮事項と制限事項

  • Apache Hive メタストアでのマルチカタログ階層の使用はサポートされていません。

  • Apache Iceberg でマルチカタログ階層を使用することにより、SparkSessionCatalog を使用する場合、Apache Hive メタストアへのフォールバックをサポートできません。

  • ランタイムロールを持つ EC2 クラスターの EMR は、マルチカタログ階層をサポートしていません。

  • AWS Lake Formation が有効になっている EC2 クラスターの EMR は、マルチカタログ階層をサポートしていません。