Apache Hudi 和 Lake Formation - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Apache Hudi 和 Lake Formation

當您使用 Spark 讀取和寫入資料時,Amazon EMR6.15.0 版和更新版本包含對以 AWS Lake Formation Apache Hudi 為基礎的精細存取控制的支援SQL。Amazon EMR支援 Apache Hudi 的資料表、資料列、資料欄和儲存格層級存取控制。透過此功能,您可以在資料表上執行 copy-on-write快照查詢,以在指定的遞交或壓縮時立即查詢資料表的最新快照。

目前,啟用 Lake Formation 的 Amazon EMR叢集必須擷取 Hudi 的遞交時間欄,才能執行增量查詢和時間差旅查詢。它不支援 Spark timestamp as of 的語法和Spark.read()函數。正確的語法為 select * from table where _hoodie_commit_time <= point_in_time。如需詳細資訊,請參閱 Hudi 資料表 上的時間點時間行程查詢

下列支援矩陣列出了 Apache Hudi 和 Lake Formation 的部分核心功能:

寫入時複製 讀取時合併的比較

快照查詢 - Spark SQL

讀取最佳化查詢 - Spark SQL

增量查詢

時間歷程查詢

中繼資料表

DML INSERT 命令

DDL 命令

Spark 資料來源查詢

Spark 資料來源寫入

查詢 Hudi 資料表

本章節描述了如何在啟用 Lake Formation 的叢集上執行上述支援的查詢。此資料表應是已註冊的型錄資料表。

  1. 若要啟動 Spark Shell,請使用下列命令。

    spark-sql --jars /usr/lib/hudi/hudi-spark-bundle.jar \ --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog \ --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \ --conf spark.sql.catalog.spark_catalog.lf.managed=true

    如果您想要 Lake Formation 使用記錄伺服器來管理 Spark 目錄,請將 spark.sql.catalog.<managed_catalog_name>.lf.managed 設為 true。

  2. 若要查詢資料表的最新快照 copy-on-write,請使用下列命令。

    SELECT * FROM my_hudi_cow_table
    spark.read.table("my_hudi_cow_table")
  3. 若要查詢 MOR 資料表的最新壓縮資料,您可以查詢字尾為 _ro 的讀取優化資料表:

    SELECT * FROM my_hudi_mor_table_ro
    spark.read.table("my_hudi_mor_table_ro")
注意

由於不支援優化,Lake Formation 叢集上的讀取效能可能會變慢。這些功能包括基於 Hudi 中繼資料的檔案清單和資料略過。建議您測試應用程式效能,以確保符合您的要求。