

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon EMR で Spark を使用して AWS Glue Data Catalog でマルチカタログ階層を操作する
<a name="emr-multi-catalog"></a>

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

## カタログリソースの整理方法
<a name="emr-lakehouse-org"></a>

 AWS Glue データカタログでリソースを作成すると、Apache Iceberg REST API または Hive メタストアをサポートする任意の SQL エンジンからリソースにアクセスできます。 AWS Lake Formation はアクセス許可を管理します。

 AWS Glue Data Catalog では、データはカタログ、データベース、テーブルの論理階層に整理されます。
+ **カタログ** – スキーマやテーブルなどデータストアのオブジェクトを保持する論理コンテナ。
+ **Redshift マネージドストレージ (RMS) テーブルを保存するカタログ** – RMS テーブルを保存するカタログを管理する場合、Iceberg を使用してこれらのテーブルにアクセスできます。
+ **データベース** – テーブルやビューなどのデータオブジェクトをカタログ内で整理します。
+ **テーブルとビュー** – 抽象化レイヤーと理解可能なスキーマを提供するデータベース内のデータオブジェクト。基盤となるデータにアクセスするためのレイヤーを提供します。これは、さまざまな形式や場所にある可能性があります。



## Amazon EMR で使用するデータカタログの設定
<a name="emr-lakehouse-configuration"></a>

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

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

 これを設定する方法については、「 [AWS Glue ユーザーガイド」の「Spark ジョブの Glue データカタログのサポート](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-data-catalog-hive.html)」を参照してください。 AWS このトピックでは、 Glue Data Catalog AWS を Hive メタストアとして設定し、エンドポイントとして利用できるようにする方法について説明します。さらに、Spark AWS の [Apache Hive メタストアとして Glue データカタログを使用するで、Spark メタストアとして AWS Glue データカタログを指定する方法を示す Amazon EMR ドキュメントも用意されています](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-glue.html)。

## Glue Data Catalog AWS のリソースにアクセスするためのアクセス許可
<a name="emr-lakehouse-using-irc-prereqs"></a>

このセクションでは、カタログデータで Amazon EMR ツールを使用するための IAM ポリシー要件について説明します。クラスターを AWS Glue データカタログに登録した後、後で作成されたデータカタログの作成と変更を検出するには、次のアクセス許可が必要です。
+ **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](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html)」を参照してください。

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

## Glue Data Catalog でマルチカタログ階層にアクセスするように Spark AWS を設定する
<a name="emr-lakehouse-using-spark-access"></a>

EMR 7.5 では、 Glue のマルチカタログ階層を使用するように Spark AWS を設定できます。マルチカタログ階層を使用することにより、以下のことが可能になります:
+ テーブル、ビュー、マテリアライズドビューなどの Redshift マネージドストレージ (RMS) データを既存の Amazon Redshift データウェアハウスから AWS Glue データカタログに取り込みます。EC2 および EMR Serverless の EMR を使用して、これらのオブジェクトをクエリできます。
+ RMS カタログを作成し、データカタログを AWS グルー化し、ZeroETL を使用して RMS にデータを保存し、Iceberg 互換クエリエンジンでデータをクエリします。
+ 圧縮、スナップショット、保持を含むフル機能のストレージ管理を使用して、 Glue Data Catalog AWS にマネージド Iceberg テーブルを作成します。

### Spark セッションを初期化する時にマルチカタログに接続する
<a name="emr-iceberg-initialize-spark-session-spark"></a>

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

------
#### [ spark-shell ]

1. SSH を使用してマスターノードに接続します。詳細については、「*Amazon EMR 管理ガイド*」の「[SSH を使用してマスターノードに接続する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html)」を参照してください。

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

   ```
   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 を使用してマスターノードに接続する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html)」を参照してください。

1. 以下のコマンドを入力して、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](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-magics.html#emr-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 を使用して設定分類を指定する方法の詳細については、[「アプリケーションの設定](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)」を参照してください。

```
[
  {
    "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"
    }
  }
]
```

------

#### Glue データカタログを使用して Redshift マネージドストレージへの Spark AWS セッションを初期化する
<a name="considerations-multi-catalog-glue-connect"></a>

以下のサンプルコマンドは、 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
```

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

```
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 マルチカタログ階層を使用する方法の詳細については、[「Spark で Iceberg クラスターを使用する](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-spark-cluster.html)」を参照してください。

## マルチカタログ設定に関する考慮事項と制限事項
<a name="considerations-multi-catalog"></a>
+ Apache Hive メタストアでのマルチカタログ階層の使用はサポートされていません。
+ Apache Iceberg でマルチカタログ階層を使用することにより、`SparkSessionCatalog` を使用する場合、Apache Hive メタストアへのフォールバックをサポートできません。
+ ランタイムロールを持つ EC2 クラスターの EMR は、マルチカタログ階層をサポートしていません。
+ が有効になっている EC2 クラスターの EMR は、マルチカタログ階層をサポート AWS Lake Formation していません。