

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

# Hive での Iceberg クラスターの使用
<a name="emr-iceberg-use-hive-cluster"></a>

Amazon EMR リリース 6.9.0 以降では、オープンソースの Iceberg Hive 統合に必要なセットアップ手順を実行しなくても、Hive クラスターで Iceberg を使用できます。Amazon EMR バージョン 6.8.0 以前の場合は、ブートストラップアクションを使用して `iceberg-hive-runtime` jar をインストールし Hive での Iceberg サポートを設定できます。

Amazon EMR 6.9.0 には、[Hive 3.1.3 を Iceberg 0.14.1 と統合する](https://iceberg.apache.org/releases/#0140-release)ためのすべての機能が含まれています。また、サポートされている実行エンジンを実行時に自動選択するなどの Amazon EMR の追加機能も含まれています (Amazon EMR on EKS 6.9.0)。

## Iceberg クラスターの作成
<a name="create-iceberg-cluster"></a>

Iceberg がインストールされたクラスターは、、AWS マネジメントコンソール、AWS CLIまたは Amazon EMR API を使用して作成できます。このチュートリアルでは、 AWS CLIを使用して Amazon EMR クラスターで Iceberg を操作します。コンソールを使用して Iceberg がインストールされたクラスターを作成するには、「[Build an Iceberg data lake using Amazon Athena, Amazon EMR, and AWS Glue](https://aws.amazon.com/blogs/big-data/build-an-apache-iceberg-data-lake-using-amazon-athena-amazon-emr-and-aws-glue/)」の手順を実行します。

で Amazon EMR で Iceberg を使用するにはAWS CLI、まず以下のステップを使用してクラスターを作成します。AWS CLIまたは Java SDK を使用して Iceberg 分類を指定する方法については、[クラスターの作成 AWS CLI 時に を使用して設定を指定する](emr-configure-apps-create-cluster.md#emr-configure-apps-create-cluster-cli)「」または「」を参照してください[クラスター作成時に Java SDK を使用して設定を指定する](emr-configure-apps-create-cluster.md#emr-configure-apps-create-cluster-sdk)。以下の内容で `configurations.json` という名前のファイルを作成します。

```
[{
    "Classification":"iceberg-defaults",
    "Properties":{"iceberg.enabled":"true"}
}]
```

次に、以下の設定でクラスターを作成し、この例の Amazon S3 バケットパスとサブネット ID を自分のものに置き換えます。

```
aws emr create-cluster --release-label emr-6.9.0 \
--applications Name=Hive \
--configurations file://iceberg_configurations.json \
--region us-east-1 \
--name My_hive_Iceberg_Cluster \
--log-uri s3://{{amzn-s3-demo-bucket}}/ \
--instance-type m5.xlarge \
--instance-count 2 \
--service-role EMR_DefaultRole \ 
--ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetId={{subnet-1234567890abcdef}}
```

Hive Iceberg クラスターは以下のことを行います。
+ Iceberg Hive ランタイム jar を Hive に読み込み、Hive エンジンの Iceberg 関連の設定を有効にします。
+ Amazon EMR Hive の動的実行エンジン選択を有効にして、ユーザーが Iceberg と互換性のある実行エンジンを設定できないようにします。

**注記**  
Hive Iceberg クラスターは現在 AWSGlue データカタログをサポートしていません。デフォルトの Iceberg カタログは `HiveCatalog` で、これは Hive 環境用に設定されたメタストアに対応しています。カタログ管理の詳細については、[Apache Hive ドキュメント](https://cwiki.apache.org/confluence/display/HIVE)の「[Using HCatalog](https://cwiki.apache.org/confluence/display/Hive/HCatalog+UsingHCat#HCatalogUsingHCat-UsingHCatalog)」を参照してください。

## 機能のサポート
<a name="feature-support"></a>

Amazon EMR 6.9.0 は Hive 3.1.3 と Iceberg 0.14.1 をサポートしています。機能のサポートについては Hive 3.1.2 と 3.1.3 の Iceberg 互換機能に限定されています。以下の   コマンドがサポートされています。
+ Amazon EMR リリース 6.9.0～6.12.x では、`libfb303` jar を Hive の `auxlib` ディレクトリに配置する必要があります。これを行うには、次のコマンドを使用します。

  ```
  sudo /usr/bin/ln -sf /usr/lib/hive/lib/libfb303-*.jar /usr/lib/hive/auxlib/libfb303.jar
  ```

  Amazon EMR リリース 6.13 以降では、`libfb303` jar は自動的に Hive の `auxlib` ディレクトリにシンボリックリンクされます。
+ **テーブルの作成**
  + **非パーティションテーブル** - Hive の外部テーブルは、次のようにストレージハンドラーを指定することで作成できます。

    ```
    CREATE EXTERNAL TABLE x (i int) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
    ```
  + **パーティションテーブル** - Hive の外部パーティションテーブルは次のように作成できます。

    ```
    CREATE EXTERNAL TABLE x (i int) PARTITIONED BY (j int) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
    ```
**注記**  
ORC/AVRO/PARQUET の `STORED AS` ファイル形式は Hive 3 ではサポートされていません。デフォルトで、唯一のオプションは Parquet です。
+ **テーブルの削除** - `DROP TABLE` コマンドは、次の例のようにテーブルを削除するために使用されます。

  ```
  DROP TABLE [IF EXISTS] table_name [PURGE];
  ```
+ **テーブルの読み込み** - 次の例のように、`SELECT` ステートメントを使用して Hive の Iceberg テーブルを読み込むことができます。サポートされている実行エンジンは MR と Tez です。

  ```
  SELECT * FROM table_name
  ```

  Hive の select 構文の詳細については、「[LanguageManual Select](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select)」を参照してください。Hive で Iceberg テーブルを使用する select ステートメントの詳細については、「[Apache Iceberg Select](https://iceberg.apache.org/docs/latest/hive/#select)」を参照してください。
+ **テーブルへの挿入** - HiveQL の `INSERT INTO` ステートメントは Map Reduce 実行エンジンのみをサポートする Iceberg テーブルで動作します。Amazon EMR Hive は実行時に Iceberg テーブルのエンジンを選択するため、Amazon EMR ユーザーは実行エンジンを明示的に設定する必要はありません。
  + **単一テーブルの insert into** - 例:

    ```
    INSERT INTO table_name VALUES ('a', 1);
    INSERT INTO table_name SELECT...;
    ```
  + **複数テーブルの insert into** - 非アトミック複数テーブル insert into ステートメントがサポートされています。例:

    ```
    FROM source
     INSERT INTO table_1 SELECT a, b
     INSERT INTO table_2 SELECT c,d;
    ```

Amazon EMR 7.3.0 以降、Hive with Iceberg は AWSGlue データカタログをメタストアとしてサポートしています。AWSGlue データカタログをメタストアとして使用するには、次のプロパティを設定します。

```
SET iceberg.catalog.<catalog_name>.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog;
```

または、次のプロパティを設定することもできます。

```
SET iceberg.catalog.<catalog_name>.type=glue;
```

次に、以下の例を使用してテーブルを作成できます。

```
CREATE EXTERNAL TABLE table_name (col1 type1, col2 type2,..)
ROW FORMAT SERDE 'org.apache.iceberg.mr.hive.HiveIcebergSerDe'
STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
location '<location>'
TBLPROPERTIES ('table_type'='iceberg', 'iceberg.catalog'='<catalog_name>');
```

## Hive で Iceberg を使用するための考慮事項
<a name="hive-considerations"></a>
+ Iceberg は以下のクエリタイプをサポートしています。
  + テーブルの作成
  + Drop table
  + Insert into table
  + Read table
+ DML (データ操作言語) 操作では MR (MapReduce) 実行エンジンのみがサポートされており、MR は Hive 3.1.3 で廃止されました。
+ 7.3.0 より前の Amazon EMR では、Hive を使用した Iceberg では AWSGlue Data Catalog は現在サポートされていません。
+ エラー処理の堅牢性が不十分です。設定に誤りがあっても、insert into クエリが正常に完了する可能性があります。ただし、メタデータの更新に失敗によりデータが失われる可能性があります。
+ Iceberg Glue 統合は、Redshift Managed Storage カタログでは機能しません。