すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:Hudi コネクタ

最終更新日:Aug 22, 2026

Hudi は、Hadoop 互換のファイルシステムでデータを更新および削除し、変更されたデータを使用できるデータレイクフレームワークです。E-MapReduce (EMR) Presto は、関連する JAR パッケージをスタンドアロンの Hudi プラグインに統合します。EMR Hudi コネクタを使用して、Copy on Write (COW) テーブルと Merge on Read (MOR) テーブルをクエリできます。

背景情報

EMR Hudi の詳細については、「Hudi の概要」をご参照ください。

前提条件

Presto サービスを含む Hadoop クラスター、またはスタンドアロンの Presto クラスターが作成されている必要があります。詳細については、「クラスターの作成」をご参照ください。

制限事項

  • Hudi コネクタは、EMR V3.38.0 以降の Hadoop または Presto クラスターでのみサポートされます。
  • COW テーブルでは、スナップショットクエリのみがサポートされます。
  • MOR テーブルでは、スナップショットクエリと読み取り最適化クエリのみがサポートされます。
  • 増分クエリはサポートされていません。

Hudi コネクタの設定

Hudi コネクタの設定を変更します。詳細については、「組み込みコネクタの変更」をご参照ください。

デフォルトの Hudi コネクタ設定を表示するには、EMR コンソールの Presto サービスページに移動します。[設定] タブで、[サービス設定] セクションを見つけ、[hudi.properties] タブをクリックします。次の表にパラメーターを示します。ビジネス要件に基づいてパラメーター値を変更してください。
パラメーター 説明
hive.recursive-directories テーブルまたはパーティションの場所のサブディレクトリからのデータ読み取りを有効にします。これは、Hive の hive.mapred.supports.subdirectories プロパティに似ています。
hive.metastore.uri Thrift プロトコルを使用して Hive メタストアに接続するための URI です。

デフォルト値は thrift://<master-node-name>.cluster-24****:9083 の形式です。

hive.config.resources HDFS 設定ファイルのカンマ区切りリストです。これらのファイルは、すべての Presto ホストに存在する必要があります。
重要 このパラメーターは、HDFS へのアクセスが必須の場合にのみ設定してください。
hive.delta-table-enabled Presto が Delta Lake テーブルを読み取れるかどうかを指定します。有効な値は次のとおりです。
  • true (デフォルト): Presto は Delta Lake テーブルを読み取ることができます。
  • false: Presto は Delta Lake テーブルを読み取ることができません。
hive.delta-compatible-mode-enabled Delta Lake テーブルの互換モードを有効にするかどうかを指定します。有効な値は次のとおりです。
  • true (デフォルト): Delta Lake テーブルの互換モードが有効になります。
  • false: Delta Lake テーブルの互換モードは有効になりません。
hive.hdfs.impersonation.enabled ユーザー偽装を有効にするかどうかを指定します。有効な値は次のとおりです。
  • true: ユーザー偽装が有効になります。
  • false (デフォルト): ユーザー偽装は有効になりません。

例

Hudi テーブルは、外部 Hive テーブルとして保存できます。Hive コネクタを使用して、Hudi テーブル内のデータをクエリできます。Hudi テーブルを作成して Hive テーブルに同期する方法については、「Spark SQL との Hudi の統合」および「Spark を使用した Hudi へのデータ書き込み」をご参照ください。

次の例では、データを生成してクエリする方法を示します。
  1. SSH モードで EMR クラスターにログインします。詳細については、「クラスターへのログイン」をご参照ください。
  2. 次のコマンドを実行して、Spark SQL CLI を開きます。
    spark-sql --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
    --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'
    出力に次の情報が含まれている場合、Spark SQL CLI が開かれています。
    spark-sql>
  3. 次のコマンドを実行して、emr_test という名前のテストテーブルを作成します。
    create table if not exists emr_test(
      id bigint,
      name string,
      price double
    ) using hudi
    options (
      type = 'mor',
      primaryKey = 'id,name'
    );
  4. 次のコマンドを実行して、テストデータを挿入します。
    insert into emr_test select 1, 'a2', 10;
    insert into emr_test select 1, 'a1', 10;
    insert into emr_test select 2, 'a1', 20;
    説明 EMR Spark SQL は、Hudi データを DLF または Hive メタストアに自動的に同期します。
  5. Presto クライアントでデータをクエリします。
    1. 次のコマンドを実行して、Presto クライアントを開きます。
      presto --server emr-header-1:9090 --catalog hudi --schema default --user hadoop
    2. 次のコマンドを実行して、テーブルをクエリします。
      select * from emr_test;
      次の出力が返されます。
       _hoodie_commit_time | _hoodie_commit_seqno | _hoodie_record_key | _hoodie_partition_path |                            _hoodie_file_name                            | id | name | price
      ---------------------+----------------------+--------------------+------------------------+-------------------------------------------------------------------------+----+------+-------
       20211025145616      | 20211025145616_0_1   | id:1,name:a2       |                        | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-20-1604_20211025145616.parquet |  1 | a2   |  10.0
       20211025145629      | 20211025145629_0_1   | id:1,name:a1       |                        | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-48-3211_20211025145629.parquet |  1 | a1   |  10.0
       20211025145640      | 20211025145640_0_2   | id:2,name:a1       |                        | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-76-4818_20211025145640.parquet |  2 | a1   |  20.0
      (3 rows)
  6. Spark SQL CLI でデータを更新します。
    1. 次のコマンドを実行して、Spark SQL CLI を開きます。
      spark-sql --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
      --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'
      出力に次の情報が含まれている場合、Spark SQL CLI が開かれています。
      spark-sql>
    2. `id` が 2 の行の `price` を更新するには、次のコマンドを実行します。
      update emr_test set price = price + 20 where id = 2;
  7. 更新後、Presto クライアントでデータをクエリします。
    1. 次のコマンドを実行して、Presto クライアントを開きます。
      presto --server emr-header-1:9090 --catalog hudi --schema default --user hadoop
    2. 次のコマンドを実行して、テーブルをクエリします。
      select * from emr_test;
      次の出力が返されます。
       _hoodie_commit_time | _hoodie_commit_seqno | _hoodie_record_key | _hoodie_partition_path |                            _hoodie_file_name                            | id | name | price
      ---------------------+----------------------+--------------------+------------------------+-------------------------------------------------------------------------+----+------+-------
       20211025145616      | 20211025145616_0_1   | id:1,name:a2       |                        | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-20-1604_20211025145616.parquet |  1 | a2   |  10.0
       20211025145629      | 20211025145629_0_1   | id:1,name:a1       |                        | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-48-3211_20211025145629.parquet |  1 | a1   |  10.0
       20211025145640      | 20211025145640_0_2   | id:2,name:a1       |                        | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-76-4818_20211025145640.parquet |  2 | a1   |  40.0
      (3 rows)