Hive での Iceberg クラスターの使用 - Amazon EMR

Hive での Iceberg クラスターの使用

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 と統合するためのすべての機能が含まれています。また、サポートされている実行エンジンを実行時に自動選択するなどの Amazon EMR の追加機能も含まれています (Amazon EMR on EKS 6.9.0)。

Iceberg クラスターの作成

Iceberg がインストールされたクラスターは、AWS Management Console、AWS CLI または Amazon EMR API を使用して作成できます。このチュートリアルでは、AWS CLI を使用して Amazon EMR クラスターで Iceberg を操作します。コンソールを使用して Iceberg がインストールされたクラスターを作成するには、「Build an Iceberg data lake using Amazon Athena, Amazon EMR, and AWS Glue」の手順を実行します。

AWS CLI を使用して Amazon EMR で Iceberg を使用するには、まず以下の手順を使用してクラスターを作成します。AWS CLI または Java SDK を使用して Iceberg 分類を指定する方法については、「クラスター作成時に AWS CLI を使用して設定を指定する」または「クラスター作成時に Java 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://DOC-EXAMPLE-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 クラスターでは、現在 AWS Glue Data Catalog はサポートされていません。デフォルトの Iceberg カタログは HiveCatalog で、これは Hive 環境用に設定されたメタストアに対応しています。カタログ管理の詳細については、Apache Hive ドキュメントの「Catalog Management」を参照してください。

機能のサポート

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」を参照してください。Hive で Iceberg テーブルを使用する select ステートメントの詳細については、「Apache Iceberg 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;