Iceberg在圖靈落地應用

導讀

百度MEG上一代大數據產品存在平臺分散、易用性差等問題,導致開發效率低下、學習成本高,業務需求響應遲緩。為了解決這些問題,百度MEG內部開發了圖靈3.0生態系統,包括Turing Data Engine(TDE)計算&存儲引擎、Turing Data Studio(TDS)數據開發治理平臺和Turing Data Analysis(TDA)可視化BI產品。依托圖靈3.0生態,我們引入了數據湖表格式:Apache Iceberg,利用其特性并在多種業務場景下進行優化實踐,解決圖靈數倉業務實時數據入湖,數據表歷史記錄更新效率低等多個痛點問題。

01 背景

1.1 圖靈3.0生態概述

由于百度MEG上一代大數據產品存在平臺多、易用性差及數據流轉繁瑣等問題。這些問題導致開發人員研發效率低及多平臺間高昂的學習成本;業務部門的感知則是需求交付遲緩、數據產出延遲及數據質量低等問題。為了解決上述問題,我們構建了新一代大數據解決方案——“圖靈3.0”,旨在覆蓋數據全生命周期,支持全鏈路數據操作,提供高效敏捷且統一的強大數據生態系統,其中包括數據計算引擎、數據開發和數據分析三個核心部分:

1. TDE(Turing Data Engine):圖靈生態的計算引擎,包含基于Hive、Iceberg進行數據處理的Spark和ClickHouse高性能計算引擎。

2. TDS(Turing Data Studio):一站式數據開發治理平臺。

3. TDA(Turing Data Analysis):新一代可視化BI產品。

本文主要介紹數據湖表格式Iceberg在圖靈3.0生態下的應用與實踐。

△圖靈3.0生態產品

1.2 問題

MEG數據中臺基于Hive構建了離線數據倉庫,已支持手百,搜索,商業,貼吧,小說,用增架構,銷售等多個業務需求,但隨著業務的發展,業務對數據的實時性以及查詢性能等有更高要求,當前主要存在以下幾個問題:

1. 商業、電商、銷售等業務,周期性地更新行業等信息,單次更新數據量占比小、字段少,但是基于Hive的數據更新(以下簡稱:數據回溯)只能通過全量覆蓋寫的方式實現,數據回溯周期長、效率低、成本高。

2. 由于Hive在實時數據更新以及事務支持上存在一定局限性,無法有效滿足業務構建實時數倉的需求。

3. 在處理大規模數據集上,Hive的查詢性能受到如元數據的加載解析以及每次訪問數據都需通過分布式文件系統listFile遍歷文件列表等問題的影響,導致性能降低。

基于上述問題,我們通過技術調研,最終引入了開源的數據湖表格式Iceberg,構建數據湖存儲服務,并借助大數據生態的Spark、Flink等計算引擎來實現數據湖的分析,將其無縫集成到圖靈生態中,幫助業務提效降本,構建更快速、更高效、更低成本的數據中臺產品。

1.3 Hive和Iceberg對比

Hive作為一個基于Hadoop生態系統的開源數據倉庫工具,主要用于對大規模結構化數據進行存儲、查詢和分析。而Iceberg作為新一代數據湖表格式,提供了類似傳統數據庫的事務性,保證和數據一致性,并支持復雜的數據操作,如行級更新和刪除等,更加適合實時更新,流批一體數據場景,下表列出Hive和Iceberg一些主要特性對比:

在這里插入圖片描述

1.4 Iceberg的組織結構

Iceberg文件組織分為元數據層和數據層,主要包含version-hint,metadata file、snapshot file、manifest file和data file文件類型,具體如下:

  • metadata元數據層

    a. version-hint:該文件作為元數據索引初始文件,記錄了Iceberg表的版本號,通過版本號找到對應的metadata file。

    b. metadata file:記錄了Iceberg表的schemas、properties以及快照等信息。

    c. snapshot file(manifest-list):每次數據 commit 會生成一個新的快照,保存了該快照下每個manifest file路徑及對應的分區范圍。

    d. manifest file:記錄數據文件元信息,包含每個數據文件的路徑、文件的大小等一系列統計信息(如文件每列的最大最小值、空值數等),實現元數據和數據文件的關聯。

  • data數據層

    data file:實際的數據文件,以 parquet 等列存格式存儲數據。

△Iceberg表結構

△Iceberg文件組織結構

通過上述Iceberg元數據文件組織結構,Iceberg實現了文件級的元信息統計及版本化管理。

02 Iceberg能力建設與應用

2.1 圖靈生態能力適配

2.1.1 統一元數據服務

由于原生iceberg缺少元數據的可視化管理能力,我們通過構建統一的元數據微服務,將Iceberg表和Hive表元數據進行管理,對應用層提供相關表和分區的增刪改查等接口,統一數據存儲的元數據操作入口。

該微服務主要包含常駐SparkSession模塊,EngineMetaService模塊和元數據模塊,通過將SparkSession常駐,為用戶提供Iceberg表和Hive表元數據和分區數據的增刪改查功能,以及可視化的元數據管理界面。

△統一元數據服務架構

2.1.2 打通Iceberg和Hive聯邦查詢

為了兼容歷史業務存量Hive表,同時降低用戶使用Iceberg的成本。我們在計算引擎層面打通Iceberg和Hive聯邦查詢能力,并保證了Iceberg表與原有方式語法一致。

通常在一條SQL執行過程中,主要可簡化以下Parse、Analyzer、Optimizer、CBO四個流程。通過在Analyzer和Plan階段進行改進優化,來打通Iceberg和Hive表聯邦查詢。

  • Analyzer階段:該階段主要是將spark未解析的邏輯計劃進行解析,我們通過對SparkSessionCatalog加載方式改造,優先加載iceberg表使用的catalog類型,如果用戶SQL使用的是Iceberg表,則對應會使用IcebergCatalog和iceberg數據源訪問,否則使用SessionCatalog與Hive數據源訪問。

  • Optimizer階段:為加強數據安全管理,我們進一步打通Iceberg表鑒權能力,在基于邏輯計劃生成物理計劃階段,解析注入表、字段信息以及表操作類型規則,并與公司內數管平臺交互,實現對Iceberg表和字段的鑒權

△Iceberg和Hive聯邦查詢適配流程

2.2 存量Hive低成本遷移Iceberg

現有數倉業務數據主要存儲于Hive表,為支持業務快速切換Iceberg應用新技術,我們建設了存量Hive表低成本遷移至Iceberg表的能力。

以下是在實踐過程中的兩種遷移方案對比:

方式1:使用Iceberg功能migrate進行原地遷移,通過社區提供的CALL migrate語法,直接執行如下示例的SQL語句,即可將Hive表升級為Iceberg表。

CALL catalog_name.system.migrate('db.sample', map('foo', 'bar'));

該方案操作簡單且可回滾,但這種方式在圖靈生態落地過程中也存在一些問題:

該方式會基于原Hive表的數據信息構建Iceberg元數據信息,并將原Hive表名重命名為sample_backup_,同時數據路徑也進行重命名。

  • 下游無法讀:在執行遷移過程中,原Hive表對應的路徑已經被重命名,進而導致下游業務無法正常讀取正在遷移中的表。

  • 多表掛載沖突:在業務的使用場景中,存在同一份物理數據被多個Hive表掛載可能,直接修改路徑會導致其他表失效。

方式2:基于上述問題,我們進一步對現有方案進行優化,不改變Hive表原有的數據路徑,來實現Hive低成本遷移Iceberg,具體流程如下:

  • 構建Iceberg元數據:直接復用Hive的分區數據,新建同名的Iceberg表,并重建Iceberg元數據,最終新Iceberg表的元數據信息實際指向是Hive分區數據存儲位置。

  • 數據校驗:當Iceberg元數據構建完成后,查詢Iceberg表中字段數據,和遷移之前Hive表字段數據,進行一致性校驗,驗證遷移是否符合預期。

  • 讀寫切換:數據校驗完成后,我們只需要將對應表的屬性更新為Iceberg。因為我們已經打通了Iceberg和Hive的查詢,且遷移后表名未變,業務可正常使用原有表名及語法進行查詢和寫入,降低遷移成本。

△Hive遷移Iceberg整體實現流程

2.3 Iceberg在圖靈的應用和性能優化

2.3.1 圖靈實時數倉應用

在圖靈數倉大部分場景中,用戶主要依托天級或小時級運行的離線Spark任務來完成數據入倉。在這種模式下,難以滿足部分對數據實時性要求較高的需求。

為解決該問題,我們基于Iceberg+Flink構建的圖靈實時湖倉架構,整體重構流程如下圖所示。該架構模式實現了數據分鐘級別實時入倉,顯著提升了數據入倉的時效性。進一步擴展了整個圖靈的應用場景。

  • 針對數據分析和case排查等場景,業務可基于圖靈常駐計算引擎進行實時查詢,快速獲取所需要的數據支持業務分析決策;

  • 針對策略迭代、特征生產以及機器學習等復雜計算場景,可基于spark例行任務進行加工生產;

  • 針對策略數據調研分析、科學計算等復雜場景通過數據交互計算引擎Jupyter進行數據計算。通過構建圖靈實時湖倉架構,既保證了數據分析的時效性又兼顧了復雜計算任務的處理能力,有效提升了業務的數據處理效率和分析決策能力。

△圖靈實時湖倉架構演變

2.3.2 行級更新策略

在圖靈數倉業務場景下,商業、搜索、電商、銷售等業務,周期性地更新行業等信息。而Hive在該場景下支持相對較弱,需通過全量覆蓋寫方式刷新數據,這種方式在大數據量場景下,回溯數據周期長,消耗資源大,所需要的人力時間成本也高。我們通過利用Iceberg行級更新的特性,基于update、merge into等方式回溯進行字段變更,能夠很大程度的提高回溯效率,降低資源和人力成本。

針對數據行級更新,Iceberg提供了兩種策略,分別為COW(Copy on Write: 寫時復制) 或 MOR (Merge on Read:讀時合并),其中MOR根據其標記刪除文件的區別又細分了兩種方式(Equality Delete File和Position Delete File)。

在這里插入圖片描述

關于COW和MOR更新策略的文件表現形式如下圖所示,我們針對不同場景采用不同更新策略:

  • 對于日常數據查詢分析場景,小時級&天級離線例行生成加工場景,由于查詢次數會遠多于數據更新次數,可默認采用COW策略;

  • 針對一些業務更新少量字段進行長周期回溯場景,以及實時場景,寫入頻繁,通過使用MOR策略,來支持用戶進行數據回溯變更字段信息,以提升數據更新效率并節省資源。

△COW和MOR兩種更新策略對比

△MOR兩種刪除文件類型&更新字段示例

在業務進行數據回溯應用過程中,我們采用MOR(Position Delete File)進行行級數據更新,通過原Hive回溯和新Iceberg回溯兩種方式對比,在一天24小時不同分區上,驗證了Hive和Iceberg新舊的回溯效率,如下圖所示,業務回溯效率整體可平均提升50%+;進一步地對比單次回溯一年數據消耗的計算資源量對比,平均整體降低70%+的計算資源消耗,整體上極大提升回溯效率,并降低資源成本。

△ Hive 和 Iceberg 回溯效率對比

2.3.3 Iceberg表生命周期管理和性能優化

在Iceberg應用實踐的過程中,針對不同業務場景遇到的問題,我們匯總如下:

  • 小文件過多:在實時湖倉業務場景,為了要保證數據的時效性,通常是分鐘級別的commit操作,在這種場景下,單個作業執行一天,則需要1440 個 commit,如果執行時間更長,則會產生更多的commit,隨著時間的累積,元數據以及數據文件等都會產生大量的小文件,對于整體查詢的性能會產生一定的影響。

  • 存儲資源增加:如果iceberg表的快照不及時進行清理,可能會造成數據存儲增加,導致存儲賬號資源緊張。

  • 缺乏分區數據統一管理:在一些業務場景,只需要保存一定天數的分區數據,針對無用數據需要進行刪除處理。

  • 數據文件組織不均衡且無序:由于表數據寫入是隨機無序,且針對表數據文件大小會存在不均衡的情況。

針對上述問題,我們通過對Iceberg表進行全生命周期管理,并結合Iceberg特性優化表查詢性能,保障整個數據鏈路的穩定性,整體框架如下圖所示:

△Iceberg表生命周期管理和性能優化流程

以上流程主要包含表數據生命周期管理和表性能優化兩部分。

一方面,對于表數據生命周期管理,我們通過在線服務執行定時任務,來實現對表數據和元數據進行全生命周期監控,具體如下:

  • 數據分區過期:基于用戶配置的表生命周期,進行分區數據刪除,保證數據文件按期清理。

  • 元數據快照清理:為用戶提供按照時間維度天級別和按照個數維度小時級別兩種快照過期策略,精細化元數據快照過期處理,實現存儲資源的高效利用。

  • 元數據孤兒文件清理:通過天級例行任務來觸發清理由于計算引擎執行任務失敗等情況產生的一些沒有被引用的孤兒文件,避免元數據累積影響性能。

另一方面,在表性能優化方面,我們結合圖靈數倉表使用情況,并基于Iceberg原生特性,為用戶在平臺側提供Iceberg表優化算子(如下圖示例),主要包含以下兩種能力:

  • 小文件合并:通過制定合并文件大小,對表數據文件進行重寫合并,避免產生大量小文件。

  • z-order排序優化:實現對表相關字段進行重排序,提升查詢性能。

△Iceberg表優化算子任務創建示例

我們通過對Iceberg表整體的生命周期管理,實現了數據和元數據的統一治理,表元數據小文件數萬個降低到數百級別,合理控制了元數據產生的數量,并解決了數據頻繁回溯場景下存儲快速增加的問題。而在表查詢優化方面,通過在一些表的數據重分布和字段重排序應用,在部分業務表查詢性能提速50%。

03 未來規劃

Iceberg作為圖靈3.0生態中的重要組成部分,基于其高時效性、行級更新能力、小文件合并以及Z-order等成體系的數據優化的技術解決方案,為MEG數據中臺業務提供構建湖倉一體,解決數據回溯等痛點問題的能力。目前Iceberg的應用已覆蓋搜索,商業,銷售,用增架構等多個業務線,通過低成本助力業務將存量Hive遷移Iceberg表,為業務提供高性能數據查詢,同時實現對業務的降本增效。此外,我們也在不斷完善Iceberg數據存儲引擎的各項能力,包含表數據智能治理、查詢優化、智能索引以及特定場景的性能問題等,并不斷擴大Iceberg的業務覆蓋范圍。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912812.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912812.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912812.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FPGA設計的用戶約束

FPGA設計的用戶約束 文章目錄 FPGA設計的用戶約束FPGA設計的用戶約束綜合約束管腳約束位置約束時序約束小總結 FPGA設計的用戶約束 至此,HDL到門級網表的轉化已經完成,對于編譯器來說,下一步的任務就是要將門級網表轉換并映射到具體的FPGA硬…

Spring 生態創新應用:微服務架構設計與前沿技術融合實踐

在數字化轉型的深水區,企業級應用正面臨從 “單體架構” 向 “分布式智能架構” 的根本性躍遷。Spring 生態以其二十年技術沉淀形成的生態壁壘,已成為支撐這場變革的核心基礎設施。從 2002 年 Rod Johnson 發布《Expert One-on-One J2EE Design and Deve…

車牌識別與標注:基于百度OCR與OpenCV的實現(一)

車牌識別與標注:基于百度OCR與OpenCV的實現 在計算機視覺領域,車牌識別是一項極具實用價值的技術,廣泛應用于交通監控、智能停車場管理等領域。本文將介紹如何在macOS系統下,利用百度OCR API進行車牌識別,并結合OpenC…

【系統分析師】2021年真題:論文及解題思路

文章目錄 試題一:論面向對象的信息系統分析方法試題二:論靜態測試方法及其應用試題三:論富互聯網應用的客戶端開發技術試題四:論DevSecOps技術及其應用 試題一:論面向對象的信息系統分析方法 信息系統分析是信息系統生…

OFA-PT:統一多模態預訓練模型的Prompt微調

摘要 Prompt微調已成為模型微調的新范式,并在自然語言預訓練甚至視覺預訓練中取得了成功。參數高效的Prompt微調方法通過優化soft embedding并保持預訓練模型凍結,在計算成本低和幾乎無性能損失方面展現出優勢。在本研究中,我們探索了Prompt…

【硬核數學】2.5 “價值標尺”-損失函數:信息論如何設計深度學習的損失函數《從零構建機器學習、深度學習到LLM的數學認知》

歡迎來到本系列硬核數學之旅的第十篇,也是我們對經典數學領域進行深度學習“升級”的最后一站。我們已經擁有了強大的模型架構(基于張量)、高效的學習引擎(反向傳播)和智能的優化策略(Adam等)。…

雷卯針對靈眸科技EASY EAI nano RV1126 開發板防雷防靜電方案

一、應用場景 1. 人臉檢測 2. 人臉識別 3. 安全帽檢測 4. 人員檢測 5. OCR文字識別 6. 人頭檢測 7. 表情神態識別 8. 人體骨骼點識別 9. 火焰檢測 10. 人臉姿態估計 11. 人手檢測 12. 車輛檢測 13. 二維碼識別 二、 功能概述 1 CPU 四核ARM Cortex-A71.5GHz 2 …

【記錄】Ubuntu|Ubuntu服務器掛載新的硬盤的流程(開機自動掛載)

簡而言之,看這張圖片就好(可以存一下,注意掛載點/data可以自定義,掛載硬盤的位置/dev/sdb要改成步驟1中檢查的時候查到的那個位置,不過這個圖的自動掛載漏了UUID,可以通過blkid指令查找)&#x…

六、軟件操作手冊

建議在飛書平臺閱讀此文。 我將沿著初來乍到的用戶的瀏覽路徑介紹“諍略參謀”應用。 目錄 一、用戶信息1.1 注冊、登錄、自動登錄、忘記密碼、修改用戶名、修改密碼、退出登錄與個性化設置1.2 認識主界面與任務系統1.3 語義審查、Knowledge Cutoff 審查1.4 重要內容未保存提醒…

電腦鍵盤不能打字了怎么解決 查看恢復方法

電腦鍵盤打不了字,這是我們電腦使用過程中,偶爾會遇到的電腦故障問題。一般來說,電腦鍵盤打不出字,可能是硬件故障、驅動問題或系統設置錯誤等多種原因引起。本文將詳細介紹一些常見的原因和解決方法,幫助用戶恢復正常…

基于STM32的土豆種植自動化灌溉系統設計與實現

?? 項目簡介 隨著農業現代化發展及水資源短缺問題日益突出,傳統土豆種植方式在澆灌效率與用水科學性方面暴露出諸多問題。本文基于STM32F103C8T6微控制器,設計并實現了一種智能化的土豆種植自動灌溉系統,集成多種環境傳感器(溫濕度、土壤濕度、光照)、控制設備(水泵、…

第8篇:Gin錯誤處理——讓你的應用更健壯

作者:GO兔 博客:https://luckxgo.cn 分享大家都看得懂的博客 引言 在Web應用開發中,錯誤處理是保證系統穩定性和用戶體驗的關鍵環節。Gin作為高性能的Go Web框架,提供了靈活的錯誤處理機制,但許多開發者在實際項目中仍會遇到錯誤處理混亂、異…

【PyCharm】Python安裝路徑查找

PyCharm應用筆記 第一章 Python安裝路徑查找 文章目錄 PyCharm應用筆記前言一、電腦設置查找二、資源管理器查找 前言 本文主要介紹幾種Python安裝路徑查找的方法。 一、電腦設置查找 簡述過程:設置》應用》安裝的應用》搜索框輸入Python。 注:電腦使用…

數據結構:遞歸:漢諾塔問題(Tower of Hanoi)

目錄 問題描述 第一性原理分析 代碼實現 第一步:明確函數要干什么 第二步:寫好遞歸的“結束條件” 第三步:寫遞歸步驟 🌳 遞歸調用樹 🔍復雜度分析 時間復雜度:T(n) 2^n - 1 空間復雜度分析 問題描…

synetworkflowopenrestydpdk

一.skynet 1. Skynet 的核心架構是什么?簡述其進程與服務模型。 Skynet 采用多進程多服務架構。主進程負責管理和監控,多個工作進程(worker)負責實際服務運行。每個服務(service)是一個獨立的 Lua 虛擬機&…

【甲方安全視角】安全防御體系建設

文章目錄 前言一、云安全防護能力第一階段:搭建安全防護設施第二階段:安全防護設施的精細化運營第三階段:安全運營周報輸出二、IT安全防護能力(一)辦公網安全設施建設(二)辦公網安全運營三、基礎安全防護能力(一)物理安全(二)運維安全(三)安全應急響應四、總結前言…

計算機組成原理與體系結構-實驗一 進位加法器(Proteus 8.15)

目錄 一、實驗目的 二、實驗內容 三、實驗器件 四、實驗原理 4.1 行波進位加法器 4.2 先行進位加法器 4.3 選擇進位加法器(嘗試猜測原理) 五、實驗步驟與思考題 一、實驗目的 1、了解半加器和全加器的電路結構。 2、掌握串行進位加法器和并行進…

react+antd Table實現列拖拽,列拉寬,自定義拉寬列

主要插件Resizable,dnd-kit/core,dnd-kit/sortable,dnd-kit/modifiers 其中官網有列拖拽,主要結合Resizable 實現列拉寬,isResizingRef 很重要防止拖拽相互影響 1.修改TableHeaderCell const isResizingRef useRef(…

光照解耦和重照明

項目地址: GitHub - NJU-3DV/Relightable3DGaussian: [ECCV2024] 可重新照明的 3D 高斯:使用 BRDF 分解和光線追蹤的實時點云重新照明 可優化參數 gaussians.training_setup(opt) if is_pbr:: direct_env_light.training_setup…

Kafka 運維與調優篇:構建高可用生產環境的實戰指南

🛠? Kafka 運維與調優篇:構建高可用生產環境的實戰指南 導語:在生產環境中,Kafka集群的穩定運行和高性能表現是業務成功的關鍵。本篇將深入探討Kafka運維與調優的核心技術,從監控管理到性能優化,再到故障排…