Stories

Detail Return Return

數據無界、湖倉無界, Apache Doris 湖倉一體解決方案全面解讀(上篇) - Stories Detail

導讀:湖倉一體架構融合了數據湖的低成本、高擴展性,以及數據倉庫的高性能、強數據治理能力,高效應對大數據時代的挑戰。為助力企業實現湖倉一體的建設,Apache Doris 提出了數據無界湖倉無界核心理念,並結合自身特性,助力企業加速從 0 到 1 構建湖倉體系,降低轉型過程中的風險和成本。本文將對湖倉一體演進及 Apache Doris 湖倉一體方案進行介紹。

在過去的數年間,數據分析技術棧經歷了許多重要變革,從最初數據倉庫概念的誕生,到數據湖的興起,進而演進到湖倉一體解決方案。這一技術路線的演進,反映出現代企業在數據分析領域對性能、實時性、一致性、開放性、統一管理方面的需求不斷增強。

湖倉一體的演進

01 傳統數據倉庫的出現

在企業信息化發展初期、業務流程數字化的不斷推進下,積累的數據愈發繁雜。管理層亟需快速整理這些數據,清晰洞察業務狀況以精準決策,在此背景下催生了數據倉庫。

數據倉庫的核心目標是助力商業智能(BI)決策,將分散於各業務系統的結構化數據抽取、轉換、加載(ETL)至集中存儲庫。數據倉庫的顯著優勢包括:

  • 高效的結構化數據分析:嚴格的 Schema 設計確保數據高質量,為後續處理和分析奠定堅實基礎;列式存儲可以提高特定查詢的效率;精心設計的專用數據格式,能夠更好適應結構化數據的特點和分析需求;存算一體架構減少了數據傳輸的開銷,提升了分析性能。
  • 成熟的 SQL 查詢支持:基於關係模型的數據倉庫完美適配 SQL 語言,相關人員可運用熟悉的查詢語句,快速檢索、統計、分析數據及生成各類報表,滿足企業經營分析、銷售趨勢預測等方面的需求。
  • 數據一致性保障:通過集中式存儲與管理,數據倉庫在嚴格的事務處理機制下能夠確保數據的準確性與一致性,避免冗餘和不一致帶來的分析誤差,為企業提供可靠的數據依據。

伴隨互聯網普及、物聯網興起,非結構化數據(如時序數據、圖片、視頻、文檔)大量涌現,傳統數據倉庫無論從擴展性、成本,還是對非結構化數據的支持方面都難以承載新的需求,企業迫切尋求更高性價比的存儲分析方案。同時,數據科學與機器學習的蓬勃發展推動了探索式分析需求,催生了數據湖技術的出現。

02 數據湖的興起

Google 在大數據領域的開創性研究成果 —— Google 文件系統(GFS)、MapReduce 和 BigTable,猶如燈塔般引領了全球大數據技術的蓬勃發展之路,基於 Hadoop 的技術架構和生態系統自此誕生,催生了數據湖這一概念。Hadoop 使得在低成本的商用服務器上進行大數據處理成為可能,它能夠很好支持以下應用場景:

  • 超大規模數據處理:通過分佈式存儲和並行計算技術,可以在通用計算節點上進行高效地大規模數據處理,避免了依賴特殊硬件帶來的高昂成本。
  • 多模態數據支持與低成本存儲:不同於傳統數倉需要嚴格的表模式定義,數據湖能夠以原始格式存儲任意數量和類型的數據。通過 Schema-on-Read 機制,可在讀取時再進行模式定義,最大限度地保留數據價值。這種靈活性尤其適用於圖像、音視頻和日誌等信息,提供了更為敏捷的探索性分析能力。此外,依託於對象存儲,不僅降低了存儲成本,還實現了極高的可擴展性。
  • 多模態計算:利用不同的計算引擎,在同一份數據集上執行包括 SQL 查詢、機器學習、AI 訓練等不同計算任務,滿足多樣化的數據處理需求。

“數據湖”這個名稱生動詮釋了企業數據狀態:大量原始數據匯聚在一個統一的存儲底座中形成“湖”,然後在湖上構建各類系統進行數據分析和處理。隨着技術的發展,數據湖也逐漸形成了以存儲、計算、元數據為主的三層架構,為後續的湖倉一體發展奠定了基礎。

  • 存儲層: 數據湖通常使用分佈式文件系統或者對象存儲進行數據存儲,比如 HDFS、AWS S3、Azure Blob Storage、阿里雲 OSS、華為雲 OBS、騰訊雲 COS 等。它們提供幾乎無限的存儲容量,具備高可用性、低成本等優勢,企業可按需使用。數據以原始格式存儲,避免了傳統數據倉庫複雜的數據建模與結構化過程,為後續多樣化的數據處理需求提供了靈活的基礎。
  • 計算層: 存儲的數據允許被不同計算引擎訪問,多引擎相互合作可滿足不同場景下的數據處理速度與靈活性要求,如 Hive 引入 HiveQL,通過 SQL 進行批量數據加工處理;Spark 支持批處理、流處理、機器學習等多種計算場景;Presto 則專注交互式查詢,快速響應複雜的即席查詢請求。
  • 元數據層: 以 Hive Metastore 為代表的元數據服務,記錄了數據湖中的表結構、分區信息、數據存儲位置等關鍵元數據,使得不同的計算引擎與工具能夠基於統一的元數據理解數據,實現數據共享與協同處理,是維持數據湖有序運行的重要組件。

03 數據處理的新挑戰

數據倉庫和數據湖技術經過多年的發展,在各自領域都發揮的重要作用。這裏簡要總結了兩類系統在不同技術方面的對比:

數據處理的挑戰.png

隨着企業對數據實時性、準確性、開放性等需求的日益增加,傳統數據倉庫和數據湖都各自面臨來自不同方面的挑戰:

傳統數據倉庫:

  • 數據實時性匱乏:在電商大促和實時監控場景下,企業要求達到秒級甚至亞秒級的數據洞察能力。數據倉庫基於靜態的 ETL(Extract, Transform, Load)過程,難以處理持續變更的數據,無法滿足實時決策的需求。例如,物流企業追蹤貨物的實時軌跡變更很難依靠傳統的數據倉庫來實現。
  • 半結構化與非結構化挑戰:社交媒體、醫療影像等領域充斥半結構化、非結構化數據,數據倉庫固定 Schema 管理無法靈活適配,存儲、索引、訪問效率低下,像醫療科研分析海量病歷文本與影像時,傳統倉庫束手無策。

數據湖:

  • 性能瓶頸:面對分析師即時查詢、業務人員自助探索需求,Spark/Hive 批處理在交互式、低延遲分析上乏力。如金融風控人員需實時核驗交易風險,數據湖分析引擎延遲阻礙及時決策,亟需高性能計算引擎(如基於內存優化、向量化執行)加速數據處理。
  • 事務性保證缺失:數據湖系統通常都會拋棄操作的事務性,以此來換取更為靈活的數據處理方式以及更好的擴展性。但由於缺乏事務性保證,數據的一致性和完整性可能會受到影響,在進行復雜的數據操作和處理時,可能會出現數據不一致或者數據丟失的情況。這對於一些對數據準確性要求較高的應用場景來説,可能會帶來一定的風險和挑戰。
  • 數據治理危機:數據湖開放寫入的特性,易引入低質量、不一致數據,若缺乏有效治理,“數據湖” 將淪為 “數據沼澤”,企業難以基於可信數據洞察,如多源數據匯聚的數據湖,因格式、定義差異常出現數據衝突。

由於數據倉庫和數據湖各自擅長的領域不同,因此大多數企業會同時維護數據倉庫和數據湖兩套系統,以滿足不同的業務需求。但隨之而來的是數據在兩套系統中冗餘存儲、在不同系統間重複傳輸、使用體驗不一、數據孤島等諸多問題。在上述背景下,如何融合數據倉庫和數據湖的優勢,成為了現代數據棧的發展趨勢。

04 湖倉一體架構:融合與創新

湖倉一體是將數據湖和數據倉庫的優勢相結合的數據管理系統。為現代企業提供可擴展的存儲和處理能力,避免處理不同工作負載的孤立系統,幫助企業建立單一數據源,消除冗餘成本並確保數據新鮮度。隨着近些年對湖倉融合的探索,湖倉一體架構也逐漸形成了以下結構範式,每一個層級都具有其獨特的作用和價值,在融合數據倉庫和數據湖的優勢的同時,也解決了湖倉割裂的問題。

  • 存儲層:堅實基座 湖倉一體架構繼承了數據湖時代分佈式存儲的優勢,以 HDFS 或雲對象存儲為基礎,確保數據的低成本、高可用存儲。數據以原始格式或開放文件格式(如 Parquet、ORC)存入存儲層,這些格式具備高效的壓縮比與列存儲特性,在數據讀取時能夠快速定位所需列數據,減少不必要的 I/O 開銷,為後續數據處理提供高性能訪問基礎。
  • 開放數據格式:靈活互通 在湖倉一體架構下,Parquet、ORC 等開放文件格式廣泛應用於數據存儲,保障了數據在不同計算引擎間的通用性。同時,Iceberg、Hudi、Delta Lake 等開放表格式發揮關鍵作用,它們不僅支持數據的近實時更新、高效的快照管理,還兼容 SQL 標準,使得數據既可以像傳統數據庫表一樣進行事務性操作,又能充分利用數據湖的分佈式存儲與彈性計算優勢,實現數據在數據湖與數據倉庫場景間的無縫切換,為實時數據處理與歷史數據分析提供統一的數據基礎。
  • 計算引擎:多元協同 計算層面整合了 Spark、Flink、Presto、Doris 等多樣的計算引擎,各引擎各司其職。Spark 憑藉其豐富的 API 與強大的批處理、機器學習,處理大規模數據複雜任務能力;Flink 聚焦實時流計算,保障數據實時性處理需求;Presto、Doris 針對交互式查詢優化,快速響應用户即時的數據探索請求。通過統一的調度與資源管理,不同引擎可以共享存儲資源,協同處理複雜的數據工作流,滿足企業從實時監控到深度分析的全方位計算需求。
  • 元數據管理:統一中樞 從早期的 Hive Metastore 演進到如 Unity Catalog、Apache Gravitino 這樣的新一代元數據管理系統,湖倉一體架構實現了元數據的大一統。統一元數據管理支持跨多雲、多集羣環境下的元數據集中管理,提供統一的命名空間、全局的數據目錄,無論數據存儲在何處,使用何種計算引擎,用户都能通過統一的 API 進行快速檢索、理解與訪問數據。同時,元數據服務也在權限管理、審計、數據血緣追蹤方面不斷加強,幫助企業完成高質量的數據資產管理。

湖倉一體架構的出現,融合了數據湖的低成本、高擴展性與數據倉庫的高性能、強數據治理能力,從而實現對大數據時代各類數據的高效、安全、質量可控的存儲和處理分析。同時,通過標準化的數據格式和元數據管理,統一了實時、歷史數據,批處理和流處理,正在逐步成為企業大數據解決方案新的標準。

Apache Doris:湖倉一體轉型方案

Apache Doris 自 2.1 版本以來,Apache Doris 在湖倉一體場景的能力得到了顯著提升與完善。

企業在推進湖倉一體化建設時,面臨新系統選型、原有系統整合與升級等多重挑戰。這一過程不僅涉及不同系統之間的選型困境,還包括數據格式轉換、新接口適配、系統間的平滑切換,以及部門間的人力協調、權限移交與合規等問題。因此,企業亟需一個可操作的步驟,以逐步實現湖倉一體化。

為了更好的幫助企業完成湖倉一體的建設,Apache Doris 結合自身特性,提出了【數據無界】和【湖倉無界】核心理念,旨在幫助企業快速完成湖倉一體轉型,降低轉型過程中的風險和成本。

01 數據無界:打破數據邊界

在構建湖倉一體化架構時,企業首先面臨數據分析的統一接入難題。Apache Doris 作為高性能湖倉計算引擎,不僅提供統一的查詢加速服務,還能有效簡化系統架構,讓數據價值觸手可及。

靈活的數據接入

Apache Doris 通過可擴展的連接器框架,支持主流數據系統和數據格式接入,並提供基於 SQL 的統一數據分析能力,用户能夠在不改變現有數據架構的情況下,輕鬆實現跨平台的數據查詢與分析。

Apache Doris:湖倉一體轉型方案.png

  1. 數據源連接器:無論是 Hive、Iceberg、Hudi 、Paimon,還是支持 JDBC 協議的數據庫系統,Doris 均能輕鬆連接並高效提取數據。對於湖倉系統,Apache Doris 可從元數據服務中獲取數據表的結構和分佈信息,進行合理的查詢規劃,並利用 MPP 架構掃描和計算分佈式數據。Doris 支持的數據源及其對應的元數據管理和存儲系統如下: Apache Doris:湖倉一體轉型方案-2.jpeg
  2. 可擴展的連接器框架:Doris 提供良好的擴展性框架,幫助開發人員快速對接企業內部特有的數據源,實現數據快速互通。

    • Doris 定義了標準的數據目錄(Catalog)、數據庫(Database)、數據表(Table)三個層級,開發人員可以方便的映射到所需對接的數據源層級。Doris 同時提供標準的元數據服務和數據讀取服務的接口,開發人員只需按照接口定義實現對應的訪問邏輯,即可完成數據源的對接。
    • Doris 兼容 Trino Connector 插件,可直接將 Trino 插件包部署到 Doris 集羣,經過少量配置即可訪問對應的數據源。Doris 目前已經完成了 Kudu、Bigquery、Delta Lake、Kafka、Redis 等數據源的對接。
  3. 便捷的跨源數據處理:

    • Doris 支持在運行時直接創建多個數據源連接器,可使用 SQL 對這些數據源進行聯邦查詢。比如用户可以將 Hive 中的事實表數據與 MySQL 中的維度表數據進行關聯查詢:

       SELECT h.id, m.name
       FROM hive.db.hive_table h JOIN mysql.db.mysql_table m
       ON h.id = m.id;
      
      
      
      
    • 結合 Doris 內置的作業調度能力,還可以創建定時任務,進一步簡化系統複雜度。比如用户可以將上述查詢的結果,設定為每小時執行一次的例行任務,並將每次的結果,寫入一張 Iceberg 表:

      CREATE JOB schedule_load
      ON SCHEDULE EVERY 1 HOUR DO
      INSERT INTO iceberg.db.ice_table
      SELECT h.id, m.name
      FROM hive.db.hive_table h JOIN mysql.db.mysql_table m
      ON h.id = m.id;
      
      
      
      

高性能的數據處理

企業在湖倉一體化轉型過程中,對數據分析的性能需求是最根本且迫切的。Doris 作為分析型數據倉庫,在數據處理和計算方面做了大量優化,並提供了豐富的查詢加速功能:

  • 執行引擎: Apache Doris 執行引擎基於 MPP 執行框架和 Pipeline 數據處理模型,能夠很好的在多機多核的分佈式環境下快速處理海量數據。同時,得益於完全的向量化執行算子,在計算性能方面 Apache Doris 在 TPC-DS 等標準評測數據集中處於領先地位。
  • 查詢優化器: Apache Doris 能通過查詢優化器自動優化和處理複雜的 SQL 請求。查詢優化器針對多表關聯、聚合、排序、分頁等多種複雜 SQL 算子進行了深度優化,充分利用代價模型和關係代數變化,自動獲取較優或最優的邏輯執行計劃和物理執行計劃,極大降低用户編寫 SQL 的難度,提升易用性和性能。
  • 緩存加速與 IO 優化: 對外部數據源的訪問,通常是網絡訪問,因此存在延遲高、穩定性差等問題。Apache Doris 提供了豐富的緩存機制,並在緩存的類型、時效性、策略方面都做了大量的優化,充分利用內存和本地高速磁盤,提升熱點數據的分析性能。同時,針對網絡 IO 高吞吐、低 IOPS、高延遲的特性,Doris 也進行了針對性的優化,可以提供媲美本地數據的外部數據源訪問性能。
  • 物化視圖與透明加速: Apache Doris 提供豐富的物化視圖更新策略,支持全量和分區級別的增量刷新,以降低構建成本並提升時效性。除手動刷新外,Doris 還支持定時刷新和數據驅動刷新,進一步降低維護成本並提高數據一致性。物化視圖還具備透明加速功能,查詢優化器能夠自動路由到合適的物化視圖,實現無縫查詢加速。此外,Doris 的物化視圖採用高性能存儲格式,通過列存、壓縮和智能索引技術,提供高效的數據訪問能力,能夠作為數據緩存的替代方案,提升查詢效率。

如下所示,在基於 Iceberg 表格式的 1TB 的 TPCDS 標準測試集上,Doris 執行 99 個查詢的總體運行耗時僅為 Trino 的 1/3。

高性能的數據處理.jpeg

實際用户場景中,Doris 在使用一半資源的情況下,相比 Presto 平均查詢延遲降低了 20%,95 分位延遲更是降低 50%。 在提升用户體驗的同時,極大降低了資源成本。

高性能的數據處理-2.jpeg

便捷的業務遷移

在企業整合多個數據源並實現湖倉一體轉型的過程中,遷移業務的 SQL 查詢到 Doris 是一項挑戰,因為不同系統的 SQL 方言在語法和函數支持上存在差異。若沒有合適的遷移方案,業務側可能需要進行大量改造以適應新系統的 SQL 語法。

為了解決這個問題,Doris 提供了 SQL 轉換服務,允許用户直接使用其他系統的 SQL 方言進行數據查詢。轉換服務會將這些 SQL 方言轉換為 Doris SQL,極大降低了用户的遷移成本。目前,Doris 支持 Presto/Trino、Hive、PostgreSQL 和 Clickhouse 等常見查詢引擎的 SQL 方言轉換,在某些實際用户場景中,兼容率可達到 99%以上。

02 湖倉無界:打破系統邊界

面對多系統並存帶來的挑戰,湖倉一體化轉型的第二步便是架構整合、以減少需維護的系統數量。 這不僅有利於降低架構複雜性,同時可解決數據一致性和管理一致性的問題。接下來我們從系統架構、功能等多維度介紹基於 Doris 的湖倉一體架構整合方案。

現代化的部署架構

自 3.0 版本以來,Apache Doris 支持面向雲原生的存算分離架構。這一架構憑藉低成本和高彈性的特點,能夠有效提高資源利用率,實現計算和存儲的獨立擴展。這對於湖倉一體化至關重要,為企業提供了靈活的資源管理方式,使其能夠更高效地應對大規模數據分析需求。

現代化的部署架構.jpeg

上圖是 Doris 存算分離的系統架構,對計算與存儲進行了解耦,計算節點不再存儲主數據,底層共享存儲層(HDFS 與對象存儲)作為統一的數據主存儲空間,並支持計算資源和存儲資源獨立擴縮容。存算分離架構為湖倉一體解決方案帶來了顯著的優勢:

  • 低成本存儲: 存儲和計算資源可獨立擴展,企業可以根據需要增加存儲容量而不必增加計算資源。同時,通過使用雲上的對象存儲,企業可以享受更低的存儲成本和更高的可用性,對於比例相對較低的熱點數據,依然可以使用本地高速磁盤進行緩存。
  • 唯一可信來源: 所有數據都存儲在統一的存儲層中,同一份數據供不同的計算集羣訪問和處理,確保數據的一致性和完整性,也減少數據同步和重複存儲的複雜性。
  • 負載多樣性: 可以根據不同的工作負載需求動態調配計算資源,支持批處理、實時分析和機器學習等多種應用場景。通過分離存儲和計算,企業可以更靈活地優化資源使用,確保在不同負載下的高效運行。

豐富的數據存儲和管理功能

主流的數據湖格式,如 Iceberg 和 Hudi,通過標準化的數據表格式規範,為數據湖提供了靈活高效的存儲和管理方式。Apache Doris 不僅支持這些主流湖格式,還具備自身的存儲格式,能夠滿足相應的需求,並提供更豐富的功能和更高的性能。

  • 半結構化數據支持: Doris 原生支持 JSON、Variant 等半結構化數據類型,提供 Schemaless 的數據管理體驗,節省了用户轉換、清洗數據的開銷。用户可以直接導入任意 JSON 格式的數據,Doris 會自動解析並以高效的列格式存儲,適應複雜的數據分析需求。
  • 數據更新的支持: Doris 提供近實時的數據更新能力,也支持對變更數據的高效分析。此外,基於部分列更新能力,用户也可以在 Doris 內完成多流合併寬表的操作,進一步簡化數據鏈路。
  • 豐富的數據索引: Doris 可以通過前綴索引、倒排索引來快速命中數據,也可通過跳數索引、BloomFilter 索引進行快速數據跳過。在存算分離/湖倉場景下,能顯著減少本地或網絡 IO,是數據分析場景的查詢加速利器。
  • 實時數據和批數據寫入: Doris 支持通過微批方式進行高頻數據寫入,同時也可批量加載預先生成的數據。同時,通過 MVCC 的數據管理方式,可在同一份數據上存儲和處理實時數據和歷史數據。

開放性

數據湖的開放性對湖倉一體架構的重要性不言而喻。它是高效整合和管理數據的關鍵因素,也是影響湖倉一體架構性能和成本的主要因素之一。在【01 數據無界:打破數據便捷】章節中,已經介紹了 Doris 對開放表格式、文件格式等系統的支持。

此外, Apache Doris 自身存儲的數據同樣擁有良好的開放性。Doris 提供了開放存儲 API,並基於 Arrow Flight SQL 協議實現了高速數據鏈路,具備 Arrow Flight 的速度優勢以及 JDBC/ODBC 的易用性。 基於該接口,用户可以使用 Python/Java/Spark/Flink 的 ABDC 客户端訪問 Doris 中存儲的數據。

與開放文件格式相比,開放存儲 API 屏蔽了底層的文件格式的具體實現,Doris 可以通過自身存儲格式中的高級特性,如豐富的索引機制來加速數據訪問。同時,上層的計算引擎無需對底層存儲格式的變更或新特性進行適配,所有支持的該協議的計算引擎都可以同步享受到新特性帶來的收益。

結束語

以上是對湖倉一體演進及 Apache Doris 湖倉一體方案的完整介紹。在下一篇文章中,我們將以“湖倉分析加速”、“多源聯邦分析”、“湖倉數據處理”這三個典型場景為例,分享 Apache Doris 湖倉一體方案的最佳實踐。 結合實際問題,詳細分享使用指南及帶來的效果。即將上線,敬請期待。

深度好文推薦:

  • 快手:從 Clickhouse 到 Apache Doris,實現湖倉分離向湖倉一體架構升級
  • 網易遊戲如何基於 Apache Doris 構建全新湖倉一體架構
  • Cisco WebEx 數據平台基於 Apache Doris 統一 Trino、Pinot、Iceberg、Kyuubi 技術棧
  • 點擊閲讀更多相關文章
user avatar whaosoft143 Avatar Dream-new Avatar u_15714439 Avatar u_15316473 Avatar zyx178 Avatar benpaodekaixinguo Avatar python-learn Avatar huanledeyanjing Avatar meirenlideshuizhurou Avatar shiwangdehongshu Avatar fannaodeshafa Avatar dalidezhuantou_bpc01t Avatar
Favorites 17 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.