全部產品
Search
文件中心

E-MapReduce:Hudi連接器

更新時間:Aug 21, 2026

Hudi是一種資料湖的儲存格式,在Hadoop檔案系統之上提供了更新資料和刪除資料的能力,以及消費變化資料的能力。EMR Presto已經將相關JAR包整合至獨立的Hudi Plugin裡面,EMR Hudi連接器目前支援查詢COW和MOR表。

背景資訊

EMR Hudi的詳細資料,請參見Hudi概述

前提條件

已建立Hadoop叢集,並選擇了Presto服務,或者建立單獨的Presto叢集,詳情請參見建立叢集

使用限制

  • EMR-3.38.0及後續版本的Hadoop叢集或Presto叢集,支援配置Hudi連接器。
  • 只支援Hudi COW表的快照查詢。
  • 只支援Hudi MOR表的快照查詢和讀取最佳化查詢。
  • 不支援增量查詢。

配置連接器

修改Hudi連接器配置,詳情請參見修改內建連接器

Hudi連接器預設配置,您可以進入EMR控制台的Presto服務的配置頁面,在服务配置地區,單擊hudi.properties頁簽。您可以看到以下參數,參數值請根據您實際情況修改。
參數 描述
hive.recursive-directories 允許從表或分區所在位置的子目錄讀取資料,類似Hive的hive.mapred.supports.subdirectories屬性。

預設值為false。

hive.metastore.uri Hive Metastore使用Thrift協議串連的URI。

預設值格式thrift://emr-header-1.cluster-24****:9083

hive.config.resources HDFS設定檔的列表,多個設定檔時以逗號(,)分隔。這些設定檔必須存在於Presto啟動並執行所有主機上。
重要 僅在必須訪問HDFS的情況下配置此項。

預設值為/etc/ecm/hadoop-conf/core-site.xml, /etc/ecm/hadoop-conf/hdfs-site.xml

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:不啟用使用者代理程式。
hive.metastore.use-dlf-catalog 是否將Datalake Formation Catalog用作Hive Metastore。

預設值為default。

樣本

Hudi表作為Hive的外表格儲存體,可以通過串連Hive連接器來訪問Hudi表進行資料查詢。Hudi表的產生以及同步到Hive表中的步驟,請參見Hudi與Spark SQL整合Spark寫Hudi

產生資料和查詢資料樣本如下所示:
  1. 使用SSH方式登入EMR叢集,詳情請參見登入叢集
  2. 執行以下命令,進入spark-sql命令列。
    spark-sql --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
    --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'
    當返回資訊中包含如下資訊時,表示已進入spark-sql命令列。
    spark-sql>
  3. 執行以下命令,建立測試表。
    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 MetaStore。
  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中更新資料。
    1. 執行以下命令,進入spark-sql命令列。
      spark-sql --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
      --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'
      當返回資訊中包含如下資訊時,表示已進入spark-sql命令列。
      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)