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

E-MapReduce:Spark SQL と Hudi の統合

最終更新日:Jan 11, 2025

Spark SQL を使用して、E-MapReduce(EMR)Hudi 0.8.0 からデータを読み書きできます。 これにより、Hudi の使用コストが大幅に削減されます。 このトピックでは、Spark SQL を使用して Hudi からデータを読み書きする方法について説明します。

制限事項

EMR V3.36.0 以降のマイナーバージョンのクラスターと EMR V5.2.0 以降のマイナーバージョンのクラスターのみで、Spark SQL を使用して Hudi からデータを読み書きできます。

Spark SQL を起動する方法

  • Spark 2 または Spark 3 と 0.11 より前のバージョンの Hudi
    spark-sql \
    --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
    --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'
  • Spark 3 と Hudi 0.11 以降
    spark-sql \
    --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
    --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' \
    --conf 'spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog'

  • テーブルの作成
    create table h0 (
      id bigint,
      name string,
      price double,
      ts long
    ) using hudi
    tblproperties (
      primaryKey="id",
      preCombineField="ts"
    );
  • テーブルのクエリ
    desc formatted h0;
    次の出力が返されます。
    _hoodie_commit_time     string
    _hoodie_commit_seqno    string
    _hoodie_record_key      string
    _hoodie_partition_path    string
    _hoodie_file_name       string
    id                      bigint
    name                    string
    price                   double
    ts                      bigint
    説明 デフォルトでは、_hoodie_commit_time_hoodie_commit_seqno_hoodie_record_key_hoodie_partition_path、および _hoodie_file_name は、Hudi によって追加される補助フィールドです。
  • テーブルに対する操作の実行
    - insert
    insert into h0 values (1, 'a1', 10, 1000), (2, 'a2', 11, 1000);
    
    -- update
    update h0 set name = 'a1_new' where id = 1;
    
    -- delete
    delete from h0 where id = 1;
  • テーブル内のデータのクエリ
    • 例 1
      select id, name, price, ts from h0;
      次の出力が返されます。
      2    a2    11.0    1000
    • 例 2
      select * from h0;
      次の出力が返されます。
      4.820221130150621338    20221130150621338_0_1    id:2        40d6507e-0579-42ce-a10f-c5e07a3981e5-0_0-29-2007_2022113015062****.parquet    2    a2    11.0    1000
      説明 テーブルはパーティション化されていないテーブルです。 したがって、_hoodie_partition_path フィールドは空のままです。 前の出力の最初の 4 つのフィールド値は、Hudi によって追加されるデフォルトフィールドの値です。