本文由百度智能雲高級產品經理——魯志敬 在百度開發者沙龍線上分享的演講內容整理而成。內容深度解讀Polo產品的技術架構與產品特性。希望本次分享能夠讓聽衆對Palo有一個基本認識,並掌握一定的數據倉庫設計方法。
-
產品介紹與發展歷程 -
應用場景介紹 -
Palo技術特性解讀
01
產品發展歷程
百度數據倉庫Palo 是基於業內領先的OLAP數據庫 Apache Doris(Powered By Apache Doris) 構建的MPP架構雲數據倉庫,致力於幫助企業快速且低成本地構建極速易用的雲上數據分析平臺,加速企業數智化進程。
-
支持標準SQL並完全兼容MySQL協議
-
僅需秒級甚至毫秒即可返回海量數據下的查詢結果
-
有效支持多維分析、實時分析、交互式分析等多種數據分析場景
發展歷程
02
應用場景
數據分析需求的演進趨勢
-
查詢結果可以快速響應 提升查詢效率一直是分析型數據庫發展的第一動力。從過去查詢一個報表、跑SQL需要半個小時、幾十分鐘到現在的秒級甚至毫秒級,這給帶來效率的提升是巨大的。
-
實時業務洞察 數據價值會隨時間推移而降低,T+1已經不能滿足業務對高時效性的要求。
-
靈活需求應對 業務趨勢預知與系統建設滯後的矛盾,需求交付週期較長。
-
全民化的數據探索 更低的分析門檻和學習成本,更高的併發支持。
Palo在企業大數據體系中的多種應用場景
-
數倉查詢加速
解決傳統數倉和數據平臺查詢效率低下的困境,達到海量數據低至毫秒/秒級查詢耗時,海量數據無縫應用,極大幅度加速數據決策效率。
-
實時數倉構建
支持流式數據高效導入、業務指標實時聚合,保證業務數據得以實時洞察,並可以減少數據處理鏈路、統一數據流向,簡化大數據平臺架構。
-
多源聯邦查詢
構建跨多個數據源的統一查詢入口,實現實時數據和離線數據的聯邦分析,滿足數據分析人員更多元化的查詢需求。
-
交互式數據分析
以藉助一些BI可視化工具的能力去構建交互式數據分析應用,對海量數據進行自助探查和多維度分析,實現對業務的深層探索和快速決策。
03
技術特性解讀
系統架構
-
Frontend(FE)
可以理解爲Palo 的管控節點,主要負責用戶請求的接入、查詢計劃的解析、元數據的存儲和集羣管理相關工作。
-
Backend(BE)
主要負責數據存儲、查詢計劃的執行。
極致性能背後的核心技術
-
存儲格式:列式存儲
在分析場景,列存往往只會讀取需要的列,跳過無用數據,會比行存掃描更少的數據量,減少IO開銷以提高性能。 同時數據按照列進行連續存儲,因爲類型相同,因此可以獲得極高的壓縮率,節省磁盤空間。
-
自適應編碼 對不同的列類型還提供了不同的編碼方式,如 INT 類型會使用 BitShuffle 的編碼方式,而字符串類型會使用字典編碼。更進一步的,Palo還會自動根據列的值來切換編碼類型。 在編碼基礎上還進一步通過LZ4算法進行壓縮,最高提供1:8的數據壓縮比。也就是說,10G數據進入Palo可能只佔用1G多,這樣可以極大節省磁盤空間。
這種列式的存儲組織形式還爲上層計算的性能優化提供了很大的便利,特別是在向量化查詢和延遲物化等方面。
-
文件組織 文件組織形式上,Palo的文件格式和 Parquet 比較類似。一個數據版本會被分割成最大 256MB 一個的 Segment,每個 Segment 對應一個物理文件。 Segment 通常分爲 Header、DataRegion、IndexRegion、Footer 這幾個區域。 Data Region 用於按列存儲數據,每一列又被分爲多個 Page。
Index Region 則負責存儲數據的索引,Palo提供了豐富的索引結構來幫助加速數據的讀取和過濾。
-
索引類型
索引的類型大體可以分爲 智能索引 和 二級索引 兩種,其中智能索引是在 Palo 數據寫入時自動生成的,無需用戶干預,包括前綴稀疏索引、Min Max索引等。而二級索引是用戶可以選擇性的在某些列上添加的輔助索引,需要用戶自主選擇是否創建,比如像Bloom Filter、BitMap倒排索引等。
-
Exchange節點 相對於一些分佈式 Gette-Setter 框架,最顯著的區別在於其實現了 Exchange 節點。 在Palo中,一個SQL語句會先生成一個邏輯執行計劃,然後根據數據的分佈,形成一個物理執行計劃。
物理執行計劃會有多個 Fragment,而 Fragment 直接的數據傳輸則是由 Exchange 節點完成的。 有了 Exchange 節點,最大的收益是整個查詢框架擁有了數據 Reshuffle 的能力,通過這個能力,查詢的計算節點不在侷限於數據的存儲節點,從而能夠更好的利用多節點資源進行並行數據處理。
在Palo中,物理執行計劃中的 Fragment 會被髮往多個 BE 節點並行執行。不同 Fragment 之間的數據通過 Exchange 節點,根據規則 Shuffle 到對應的上層 Fragment 中。
除了節點間並行,Palo還支持在一個節點內部繼續拆分 Fragment,從而進行節點內的並行執行,以充分利用一個節點上的多 CPU 資源。
-
算子優化 除了整體的執行框架通過並行設計來提高查詢效率外,Palo還對很多具體的查詢算子進行了優化。
最典型的就是聚合算子和Join算子。
聚合算子是一種阻塞型的算子,他需要等到全部數據處理完成後,纔會將數據發送給上層節點。
在Palo,聚合算子會被拆分成兩級聚合。第一級聚合會在數據所在節點先進行一次本地聚合,來減少發送到第二層聚合時需要傳輸的數據量,而第二層聚合會將相同的 Key 匯聚到同一個節點,進行最終的聚合計算。
在第一級聚合算子中,如果發現數據的聚合效果很低,即使聚合後也無法有效降低需要傳輸的數據量時,則會自動的停止第一級聚合,而將算子轉換爲一個非阻塞的流式算子,直接將讀取到的數據發送到上層節點,從而避免了不必要的阻塞等待時間。
2. 讀取左表的每一行數據,並在 HashTable 中進行連接匹配,來返回符合連接條件的數據。
04
簡單易用
-
Aggregate 模型 可以通過預聚合,極大地降低聚合查詢時所需掃描的數據量和查詢的計算量,非常適合有固定模式的報表類查詢場景。 -
Unique Key模型 針對需要唯一主鍵約束的場景,可以保證主鍵唯一性約束主鍵唯一模型,實現精準去重和行級別數據更新; -
Duplicate 模型 可以保留全量明細數據,適合任意維度的 Ad-hoc 查詢。雖然同樣無法利用預聚合的特性,但是不受聚合模型的約束,可以發揮列存模型的優勢。
第一層是 Partition,支持 Range 和 List 的劃分方式。
第二層是 Bucket分桶,將數據通過Hash進行水平劃分,數據分片Tablet均勻在集羣中打散。
Label already used
。通過這個機制,可以在 測做到
At-Most-Once
語義。如果結合上游系統的
At-Least-Once
語義,則可以實現導入數據的
Exactly-Once
語義。
本文分享自微信公衆號 - 百度開發者中心(baidudev)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。