湖倉一體作為一種新興的開放資料管理架構,可以充分發揮資料湖的靈活性、豐富的生態系統和資料倉儲的企業級資料分析能力,成為企業構建現代資料平台的熱門選擇。
在之前的直播中,我們分享了 HashData 湖倉一體解決方案的架構設計和 Hive 資料同步。 在本次直播中,我們介紹了 Iceberg 和 Hudi 的功能和支援方案,並詳細講解和演示了 HashData 連線元件的原理和實現流程。 以下內容根據直播文字進行組織。 Hudi和Iceberg技術應用場景
在構建企業資料平台的過程中,隨著資料量的不斷增加和場景的豐富,每個企業都會根據自己的技術路線和需求,開發不同的架構設計。
資料湖是一種不斷發展、可擴充套件的基礎設施,用於大資料儲存、處理和分析,使企業能夠儲存任何規模的結構化和非結構化資料。 隨著雲儲存(尤其是物件儲存)技術的逐漸成熟,資料湖解決方案逐漸向雲原生靠攏,資料處理方式從批處理向流式處理演進。 在此背景下,現代資料湖需要強大的流批處理能力、高效的資料更新機制、嚴格的事務支援以及靈活的儲存和計算引擎。 面對上述需求,傳統的HIVE+HDFS架構資料倉儲資料修改成本高,不支援事務(ACID),無法實現流式批處理。
1、資料分析時間等“痛點”不能直接用於構建資料湖。 近年來,Hudi、Iceberg等先進管理技術因其開放的檔案儲存格式、豐富的事務支援、高效的讀寫能力,成為企業資料湖建設的主流選擇。 胡迪基地該術語與以下方面有關:編寫操作流程
Hudi的誕生是為了解決Hadoop系統中的資料更新和增量查詢問題,在資料儲存和查詢方面具有鮮明的特點。
Hudi 的檔案布局是其增量查詢、資料更新等功能的基礎,每個 Hudi 表都有乙個固定的目錄來儲存元資料 (.)。Hoodie) 和資料檔案,其中資料檔案以分割槽方式分割槽,每個分割槽都有多個資料檔案(基本檔案和日誌檔案),這些檔案在邏輯上組織為檔案和檔案組。
base file:以列式格式儲存的資料檔案,預設為 parquet 格式。 log file:行儲存的資料檔案採用 **ro 格式,用於儲存資料的重做日誌,並定期與基礎檔案合併。 file group:同一分割槽中具有相同 fileid 的所有基本檔案 + 日誌檔案的集合,乙個分割槽可以有多個檔案組。 file slice:基本檔案 + 日誌檔案的集合,在同一分割槽中具有相同的 fileid 和相同的時刻。
可以理解為Hudi表的時間軸,它記錄了Hudi表在不同時間的執行情況,保證了操作的原子性。 時間線由三個字段組成:操作、時間和狀態。 Hudi 提供了兩種型別的表:copy-on-write(cow 表)和 merge-on-read(mor 表)。
奶牛表:僅使用列式檔案格式(如 parquet)來儲存資料。 只需通過在寫入過程中執行同步合併來更新版本並重寫檔案適用於更新資料量大、時效性不高的場景
莫爾表:使用基於列的 + 基於行的(例如,**ro)檔案格式的組合儲存資料,將更新記錄到增量檔案(基於行),然後壓縮以同步或非同步生成新版本的列式檔案適用於更新資料量少、時效性要求高的場景Hudi 支援三種查詢型別:快照查詢、讀取優化查詢和增量查詢:
snapshot query:查詢最近一次快照的資料,即最新資料。 read optimized query:MOR表獨有的查詢方式,只讀取基檔案,不合併日誌,因為使用列式檔案格式,所以效率更高。
incremental query:需要指定提交時間,然後 Hudi 會掃瞄檔案中的記錄,過濾掉提交時間大於 begintime 的時間線記錄和基檔案,可以有效提高增量資料處理能力。
在 Hudi 資料湖框架中,您可以通過三種方式寫入資料:upsert、insert 和 bulk-insert。 其中,UPSERT是預設行為,也是Hudi的核心功能。
圖 1:將 Spark 寫入 Hudi 的過程如圖 1 所示
開始提交:確定上乙個任務是否失敗,如果失敗,則觸發回滾操作。 然後,根據當前時間生成事務開始的請求標識元資料。 構造 HoodieRecord RDD 物件:Hudi 根據元資料資訊構建 HoodieRecord RDD 物件,方便後續的重複資料刪除和資料合併。 重複資料刪除:如果一批增量資料中可能存在重複資料,Hudi會根據主鍵對資料進行重複資料刪除,防止重複資料寫入Hudi表。 獲取資料 fileid 位置資訊:在修改記錄中,可以根據索引獲取當前記錄所屬檔案的 fileld,因為更新操作在資料合併時需要知道要將新的快照檔案寫入哪個 fileid 檔案。 資料合併:在 COW 表模式下,會重寫索引命中的 fileid 快照檔案。 在 Mor 表模式下,日誌檔案會根據 fileid 附加到分割槽中。 完整提交:在元資料中生成 xxxx提交檔案:只有生成提交元資料檔案,查詢引擎才能根據元資料查詢更新插入資料。 資料清理:用於刪除舊分片和限制表空間的增長,每次寫入操作後自動執行清理,時間線伺服器上快取的時間線元資料用於防止掃瞄整個表。 CompAction 壓縮:主要用於 mor 模式,在 mor 模式下會是 xxx日誌資料將合併到 xxx 中parquet 快照檔案。 LCEBERG基本術語及編寫操作流程
Iceberg官網定位為“海量資料分析場景的高效儲存格式”,因此沒有模擬像Hudi這樣的業務資料庫(主鍵+索引)的設計模式來實現資料更新,而是設計了更強大的檔案組織形式來實現資料更新操作。 資料檔案是Apache冰山表實際儲存資料的檔案,一般在表的資料儲存目錄的資料目錄下,如果我們的檔案格式是parquet,那麼檔案就設定為“.”。parquet“,iceberg 每次更新都會生成多個資料檔案。
快照表示表在特定時間的狀態,每個快照列出該錶在特定時間的所有資料檔案。 資料檔案儲存在不同的清單檔案中,清單檔案儲存在清單列表檔案中,清單列表檔案表示快照。
清單檔案是乙個元資料檔案,其中列出了構成快照的資料檔案列表。 每一行都包含每個資料檔案的詳細描述,包括資料檔案的狀態、檔案路徑、分割槽資訊、列級統計資訊(如每列的最大值和最小值、null 值的數量等)、檔案的大小以及檔案中資料的行數。 其中,列級統計可以在掃瞄表資料時過濾掉不需要的檔案。 清單檔案以 **ro 格式儲存,以“.*ro“字尾。 清單列表也是乙個元資料檔案,其中列出了構建表的快照。 此元資料檔案儲存清單檔案列表,每個清單檔案占用一行。 每一行都儲存了清單檔案的路徑、儲存的資料檔案的分割槽範圍、新增的檔案數量、刪除的資料檔案數量,可用於提供過濾和加快查詢速度。
圖 2:Iceberg 寫入過程示意圖 將資料寫入 Iceberg 時,內部工作流程可以總結如下:
生成檔案appender:根據配置的檔案格式,iceberg會生成相應的fileappender,即實際執行檔案寫入操作的元件。 寫入資料檔案:fileappender 負責將資料寫入目標檔案。 收集統計資訊:寫入所有資料後,Iceberg 會收集寫入的統計資料,如記錄計數、下限、上限、值計數等,為後續生成清單檔案提供重要的輸入檔案。 生成清單檔案:Iceberg根據統計資訊生成對應的清單檔案,即資料檔案的索引,儲存每個資料檔案的路徑,並根據這些清單檔案實現檔案的組織和管理。 訊息返回:執行程式將生成的清單檔案和其他相關資訊傳送回驅動程式以完成寫入過程。
雜湊資料聯結器的工作原理及其工作原理
資料湖中的資料通常是無組織的或未經處理的,這限制了直接分析的效率。 Hashdata通過自主研發的Hudi和Iceberg聯結器,實現了與這兩種架構的平滑融合。 HashData 目前支援 Hudi 和 Iceberg 的唯讀表,但不支援寫入。
圖 3:如上圖所示,hashdata 聯結器通過建立外部表來讀取 Hudi 和 Iceberg 資料,以進一步分析和使用湖中的資料。
建立外表
首先,你需要有乙個需要被 hudi 和 iceberg 閱讀的表格。 我們使用 Spark 和 Flink 等元件在 Hudi 和 Iceberg 上建立表並寫入資料,並指定 Hudi 和 Iceberg 格式。
在hashdata資料庫上提交並建立乙個可讀的外部表,其中包括路徑和目錄型別等資訊,也就是我們前面提到的與位置相關的資訊。
接下來,呼叫 Hudi 和 Iceberg 客戶端,客戶端會建立連線並呼叫 Get Table,並傳入外部表的資訊,獲取 Hudi 和 Iceberg 表的元資料資訊,包括表中的字段數、欄位名稱和資料型別。
根據獲取到的元資料,通過對映資料庫生成雜湊資料表。
至此,建立對應 Hudi 和 Iceberg 的外表的過程就完成了。
以上步驟是通過連線元件完成的,這相當於打包並將表的路徑和目錄型別等資訊傳遞給聯結器。 聯結器獲取相關表的資訊,然後將其傳回,雜湊資料將資訊對映回可讀的外部表。
發起SELECT查詢語句時,hashdata在內部發起select查詢,並通過聯結器打包查詢的相關引數。 然後,它通過外部掃瞄過濾器(例如SQL中的WHERE條件)傳遞到聯結器。
然後聯結器呼叫 Hudi 和 Iceberg 的掃瞄 API,掃瞄方法會獲取傳入的引數,並根據這些引數對錶相關的所有檔案列表進行篩選查詢,並返回相關列表檔案。
獲取檔案列表後,外部生成查詢計畫,完成查詢操作,並與Hudi和Iceberg的元資料進行互動。
獲取資料後,hashdata 會將檔案列表打包並分發到每個 segment 節點,該節點會在檔案列表中獲取乙個分片,並根據這些資訊讀取資料。 資料返回後,讀取資料的整個過程結束。
結論
Hudi和Iceberg是目前主流的資料湖解決方案,廣受青睞。 HashData的“湖倉一體”技術方案打通了資料倉儲和資料湖,底層支援多種資料型別共存,真正實現資料的相互共享,上層可以通過統一的封裝介面進行訪問,同時可以支援實時查詢和分析,為資料湖架構下企業的資料治理和使用帶來更多便利。