Hudi 的工作原理

https://docs.amazonaws.cn/emr/latest/ReleaseGuide/emr-hudi-how-it-works.html

當 Hudi 與 Amazon EMR 結合使用時,您可以使用 Spark 數據源 API 或 Hudi DeltaStreamer 實用程序將數據寫入數據集中。Hudi 將數據集組織到 basepath 下類似於傳統 Hive 表的分區目錄結構中。如何將數據佈局爲這些目錄中的文件的具體細節取決於您選擇的數據集類型。您可以選擇“寫入時複製 (CoW)”或“讀取時合併 (MOM)”。

無論數據集類型如何,數據集中的每個分區都由其相對於 basepath 的 partitionpath 唯一標識。在每個分區中,記錄分佈到多個數據文件中。有關更多信息,請參閱 Apache Hudi 文檔中的文件管理

Hudi 中的每個操作都有一個相應的提交,由一個稱爲 Instant 的單調遞增的時間戳標識。Hudi 將對數據集執行的一系列所有操作保留爲時間軸。Hudi 依靠此時間軸在讀取器和寫入器之間提供快照隔離,並支持回滾到前一個時間點。有關 Hudi 記錄的操作和操作狀態的更多信息,請參閱 Apache Hudi 文檔中的時間軸

瞭解數據集存儲類型:寫入時複製與讀取時合併

創建 Hudi 數據集時,可以指定數據集在寫入時複製或讀取時合併。

  • 寫入時複製 (CoW) – 數據以列狀格式存儲 (Parquet),並且每次更新都會在寫入過程中創建一個新版本的文件。CoW 是默認存儲類型。

  • 讀取時合併 (MOR) – 數據使用列式 (Parquet) 和基於行 (Avro) 的格式的組合進行存儲。更新記錄到基於行的增量文件中,並根據需要進行壓縮以創建新版本的列式文件。

對於 CoW 數據集,每次更新記錄時,包含該記錄的文件都會使用更新後的值進行重寫。對於 MoR 數據集,每次進行更新時,Hudi 僅寫入已更改記錄對應的行。MoR 更適合寫入或更改繁重而讀取量較少的工作負載。CoW 更適合更改頻率較低但讀取量繁重的工作負載。

Hudi 爲訪問數據提供三個邏輯視圖:

  • 讀取優化視圖 – 提供來自 CoW 表的最新提交數據集和來自 MOR 表的最新壓縮數據集。

  • 增量視圖 – 提供 CoW 數據集中兩個操作之間的更改流,以饋送給下游作業和提取、轉換、加載 (ETL) 工作流。

  • 實時視圖 – 通過內聯合並列式和基於行的文件,從 MOR 表中提供最新提交的數據。

當您查詢讀取優化的視圖時,查詢將返回所有壓縮數據,但不包括最新的增量提交。查詢此數據可提供良好的讀取性能,但忽略最新的數據。當您查詢實時視圖時,Hudi 會在讀取時將壓縮的數據與增量提交合並。最新的數據可用於查詢,但合併的計算開銷使查詢性能降低。通過查詢壓縮數據或實時數據的功能,您可以在查詢時在性能和靈活性之間進行選擇。

有關在存儲類型之間權衡的更多信息,請參閱 Apache Hudi 文檔中的存儲類型和視圖 。

Hudi 在 MoR 的 Hive 元數據倉中創建兩個表:一個具有您指定的名稱的表(即讀取優化視圖)和一個附加了 _rt 的同名表(即實時視圖)。您可以查詢這兩個表。

將 Hudi 數據集註冊到您的元數據倉

當您向 Hive 元數據倉註冊 Hudi 表時,您可以像對待任何其他表一樣,使用 Hive、Spark SQL 或 Presto 查詢 Hudi 表。此外,您可以通過將 Hive 和 Spark 配置爲使用 AWS Glue Data Catalog 作爲元數據倉來將 Hudi 與 AWS Glue 進行集成。對於 MoR 表,Hudi 將數據集註冊爲元數據倉中的兩個表:一個具有您指定的名稱的表(即讀取優化視圖)和一個附加了 _rt 的同名表(即實時視圖)。

當您使用 Spark 創建 Hudi 數據集時,您可以通過將 HIVE_SYNC_ENABLED_OPT_KEY 選項設置爲 "true" 並提供其他必需的屬性來向 Hive 元數據倉註冊 Hudi 表。有關更多信息,請參閱 使用 Hudi 數據集。此外,您可以使用 hive_sync_tool 命令行實用程序將 Hudi 數據集單獨註冊爲元數據倉中的表。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章