天天看點

柏睿一體化流湖倉基于Iceberg的查詢優化實踐

作者:柏睿資料官方
柏睿一體化流湖倉基于Iceberg的查詢優化實踐

導語

本文将介紹柏睿資料基于Iceberg實作一體化流湖倉平台的查詢優化實踐。主要包括以下内容:

  • 背景
  • 柏睿一體化流湖倉架構及優勢特性
  • 柏睿一體化流湖倉湖内查詢的優化
  • 未來展望

近年來,随着各行業數字化轉型的深入,企業海量資料的實時性分析處理、多模資料智能化處理需求快速增長,以期通過資料驅動實作業務增長、業務創新。

柏睿資料在現有全記憶體分布式計算引擎RapidsDB的基礎上,通過Iceberg打造柏睿一體化流湖倉産品Rapids Lakehouse,将資料倉庫、資料湖和實時流資料處理內建起來,并基于Iceberg進行湖内查詢優化,實作每秒百萬級的湖内資料查詢性能,助力企業解決海量多模資料實時分析能力不足的問題。

柏睿一體化流湖倉架構及優勢特性

Apache Iceberg是一種開放的資料湖表格式,可簡單了解為基于計算層和存儲層的一個中間層。它将存儲和計算解耦,建構了存儲格式之上的資料組織方式。在此基礎上,Iceberg提供基于快照的讀寫分離和回溯能力,支援流批統一的寫入和讀取,支援表schema的拓展和分區演進,并支援ACID,使用者彼此之間讀寫沒有影響。

柏睿一體化流湖倉基于Iceberg的查詢優化實踐

Apache Iceberg架構圖

基于Iceberg的重要特性,柏睿資料建構了一站式多模資料管理與服務平台——柏睿一體化流湖倉。它內建了資料倉庫、資料湖和實時流資料處理,支援20+多源異構的大資料流批采集、實時資料處理、統一存儲與分析,結合AI/ML技術,提供即時資料洞察,助力企業全面發掘資料價值,提升業務能力和行業上司力。

柏睿一體化流湖倉架構如下。

柏睿一體化流湖倉基于Iceberg的查詢優化實踐

在資料入湖方面,柏睿一體化流湖倉Transformer 提供實時(Stream)和批量離線(Batch)兩種方式入湖,并給使用者提供對資料進行加載、轉換、整合的能力。

在資料湖内,基于Iceberg 做到存儲管理上統一,包括兩個方面:

1) 提供格式、位置明确的多模資料支援, 包括HDFS、S3,對象存儲在内的多種存儲位置和Parque、Avro、Orc等多種存儲格式。

2)提供統一的湖内資料管理,包含過期快照删除、小檔案合并、資料組織的優化等。

在湖内互動式分析方面,以RapidsDB作為統一的分析處理引擎,RapidsDB Iceberg 連接配接器融合了RapidsDB特有的自下而上(Bottom-up)、資料驅動的推送執行模型(push-based model),并利用即時編譯技術進行特殊代碼生成(code specializtion) , 使Rapids Lakehouse實作每秒百萬級的湖内資料查詢速度。

柏睿一體化流湖倉湖内查詢的優化

基于Iceberg,Rapids Lakehouse 提供了多種湖内資料查詢優化政策,以實作極緻的湖内資料查詢性能。具體可分為RapidsDB Iceberg連接配接器查詢的優化和Iceberg資料治理群組織的優化兩大類,使用者可以根據不同的資料場景和查詢需求進行選擇,進而實作更高效的資料管理和查詢。

1、RapidsDB Iceberg連接配接器查詢的優化

  • RapidsDB MPP架構與Iceberg TableScan 的結合

RapidsDB使用MPP架構(大規模并行處理架構),在計算時可以将一個查詢任務拆分成多個并行執行的小任務,并分發給MPP叢集中的多個節點來執行,進而有效提升任務、算子執行的并行度,提高RapidsDB的查詢性能。

而在RapidsDB Iceberg連接配接器中,我們将MPP架構與Iceberg API中的TableScan結合起來。Iceberg TableScan 即為Iceberg讀取一個表之前所生成的執行計劃,它通過讀取snapshots和其相關聯的清單檔案形成一個最終的CombinedScanTask集合。每個CombinedScanTask包含所需讀取的檔案位址,檔案讀取的開始和結束位置等資訊,每個CombinedScanTask都是相對獨立的。

RapidsDB Iceberg連接配接器從Iceberg拿到List<CombinedScanTask>後,将每個CombinedScanTask 對應成RapidsDB内部的小任務,并分發給叢集中的多個節點并行執行。這樣極大提升了Scan的并行度,提升查詢性能。

  • RapidsDB Lambda Flow與Iceberg查詢結合

RapidsDB的Lambda Flow利用即時編譯技術(JIT Compiler),在查詢時将頻繁執行的方法進行特殊代碼生成,再編譯為機器代碼,提升執行效率。例如,針對WHERE條件判斷、聚合運算等場景,RapidsDB計算引擎實時地将表達式的路徑編譯為具體代碼執行,在原過程中産生的大量不必要的調用和分支跳轉則都會被優化掉。

在查詢Iceberg表時,針對Iceberg的表結構,RapidsDB Iceberg連接配接器定制了讀取和解析元組的代碼。在解析元組的流程中,根據表結構動态生成的代碼,無需做資料類型的重複判斷,隻需按照順序解析資料。另外,在擷取部分列時,實作直接根據對應偏移量提取資料,跳過不需要提取的列,進而降低計算及I/O開銷。随着處理的資料量增加,節省的計算及I/O量是驚人的。

  • RapidsDB查詢Iceberg表時查詢計劃的動态優化

針對Iceberg API提供的Metadata-level filtering,RapidsDB 在優化查詢計劃時将predicate下推至Iceberg層,在最靠近資料源的地方進行資料過濾,減少資料移動帶來的開銷。另一方面,RapidsDB在Projection時做了Column Condensing的優化,避免不必要列的Projection。這個優化也下推到Iceberg層,使Iceberg也隻讀取必要列的資料,縮短資料讀取時間。

2、Iceberg資料治理群組織的優化

對于資料本身,我們可以從治理群組織的角度進行優化。Rapids Lakehouse通過湖内治理的方案,以提升查詢效率。主要有兩個場景。

第一種場景:小檔案合并和過期資料清理

Iceberg等任何一種資料湖表格式,都存在小檔案問題。随着資料sink到資料湖,資料流分鐘級别的寫入會導緻小檔案比較多,RapidsDB在讀取資料時會花大量時間在許多小檔案的打開和關閉上。同時小檔案比較多時,同一個表檔案随機分布在不同的存儲節點上,還導緻讀取效率比較低。另外,對于過期的snapshots, 如果snapshots一直不清理,那麼中繼資料的檔案就會越來越多,這會導緻膨脹問題。是以需要服務定期做一些清理。

針對這一場景,Rapids Lakehouse提供資料治理服務專門來處理小檔案合并,包括自動小檔案合并、做過期snapshots的清理以及孤兒檔案的清理。這三個服務都是以spark的作業形式來運作。

第二種場景:資料組織的優化

當資料量比較大但是資料沒有按照一定規律分布時, Iceberg不能做到較好的Metdata-level data skipping,緻使RapidsDB讀取湖内資料時加載資料量比較大,查詢效率比較低。

針對這一場景,Rapids Lakehouse提供了資料組織優化的服務,在預設Bin-Packing和Sort基礎上擴充Z-ordering的實作,來做資料重分布,以提高Rapids Lakehouse在實時分析時的查詢效率。

資料組織優化主要通過資料重寫實作。Iceberg提供了多種資料優化政策,其中包括:

  • Bin-Packing:Iceberg預設使用小檔案合并政策,按照固定大小進行合并,适用于小檔案合并場景。
  • Sort:Iceberg支援按照固定列進行排序重寫,适用于散列度較高的列進行排序,進而使得檔案和Page級别的min-max範圍更小,有助于高效的資料過濾。
  • Z-Ordering:利用Z-Order的空間曲線填充算法進行重寫。該算法能将相關聯的資料并置在同一組檔案中,使多字段過濾查詢達到最好的data-skipping效果,适用于多字段條件查詢。

使用者可以通過Rapids Lakehouse根據不同的資料場景和查詢需求進行資料組織優化算法的選擇,達到最佳查詢效果。

未來展望

經過基于Iceberg的創新實踐,柏睿一體化流湖倉可深度服務于企業的資料流處理、批處理、實時數倉、資料湖、互動式分析、即席查詢等業務場景,助力金融、政府、智能制造、營運商、能源等行業企業打造統一的資料管理平台,大幅提升大資料管理與分析能力與效率,全面發掘資料價值,快速響應業務需求,優化資料資産,實作降本增效和業務創新。

未來,柏睿一體化流湖倉将朝着以下開發方向優化:

1)持續完善湖内資料治理服務和資料組織優化服務,優化檔案合并規則。

2)借助Alluxio對Iceberg中繼資料緩存做加速支援,提高查詢的性能。

3)智能化、自動化采集使用者查詢曆史,分析查詢語句,自适應的調整湖内資料的排序組織。

繼續閱讀