從數據倉庫到數據湖(下):熱門的數據湖開源框架

文章目錄

  • 一、前言
  • 二、Delta Lake
  • 三、Apache Hudi
  • 四、Apache Iceberg
  • 五、Apache Paimon
  • 六、對比
  • 七、筆者觀點
  • 八、總結
  • 八、參考資料

一、前言

在上一篇從數據倉庫到數據湖(上):數據湖導論文章中,我們簡單講述了數據湖的起源、使用原因及其本質。本篇文章將著重介紹市面上熱門的數據湖開源框架,并分享筆者對當前數據湖技術的理解和看法。

截至目前,在數據湖領域,Delta LakeApache IcebergApache Hudi 無疑是三大熱門開源框架。此外,Apache Paimon 最初是 Flink 的子項目,后來獨立發展成為一個獨立的框架,可以說是后起之秀。

二、Delta Lake

由于 Apache Spark 在商業化上取得巨大成功,由其背后的商業公司 Databricks 推出的 Delta Lake 也顯得格外亮眼。Delta Lake 是一個流批一體的數據湖存儲層,支持更新、刪除和合并操作。

img

主要特點

  • 由于出自 Databricks,Delta Lake 與 Spark 的所有數據寫入方式完全兼容,包括基于 DataFrame 的批處理、流處理,以及 SQL 的 Insert、Insert Overwrite 等操作(開源版本暫不支持 SQL 寫入,EMR 已做支持)。
  • 在數據寫入方面,Delta Lake 與 Spark 強綁定;在查詢方面,開源 Delta Lake 目前支持 Spark 和 Presto,但處理 delta log 需要使用 Spark。

核心能力
Delta Lake Capabilities

三、Apache Hudi

Apache Hudi 是 Uber 公司開源的數據湖架構,用于管理存儲在 HDFS 上的數據。其設計目標如其名所示,即 Hadoop Upserts Deletes and Incrementals。Hudi 提供了“COW vs MOR”兩種數據模型,以適應不同的業務需求。此外,Hudi 還提供了豐富的插件生態,可以方便地與其他大數據組件集成。

Hudi Data Lake

核心能力
Hudi Capabilities

四、Apache Iceberg

Apache Iceberg 是一種用于跟蹤超大規模表的新格式,專門為對象存儲(如 S3)而設計。盡管社區關注度暫時不如 Delta Lake,功能也不如 Hudi 豐富,但 Iceberg 是一個野心勃勃的項目,具有高度抽象和優雅的設計,為成為一個通用的數據湖方案奠定了良好基礎。

Iceberg 為大數據帶來了 SQL 表的可靠性和簡單性,同時讓 Spark、Trino、Flink、Presto 和 Hive 等引擎能夠同時安全地使用相同的表。

Apache Iceberg

五、Apache Paimon

Apache Paimon 是一種湖泊格式,可以使用 Flink 和 Spark 構建實時湖屋架構,用于流和批處理操作。Paimon 創新地結合了湖泊格式和 LSM(日志結構合并樹)結構,將實時流更新引入湖泊架構。

Apache Paimon

核心能力

  • 實時更新
    • 主鍵表支持大規模更新,具有高性能,通常通過 Flink 流實現。
    • 支持定義合并引擎,靈活更新記錄。可重復保存最后一行,部分更新,或聚合記錄。
    • 支持定義變更日志生成器,在合并引擎的更新中產生正確和完整的變更日志,簡化流分析。
  • 大規模數據處理
    • 附加表(無主鍵)提供大規模批處理和流處理能力,并自動進行小文件合并。
    • 支持通過 z 順序排序進行數據壓縮,以優化文件布局,并使用 minmax 等索引提供快速查詢。
  • 數據湖功能
    • 可伸縮元數據:支持存儲 Petabyte 級別的大數據集和大量分區。
    • 支持 ACID 事務、時間旅行和模式演化。

六、對比

img

Delta、Iceberg、Hudi 和 Hive 四者的差異可以用建房子的比喻來說明。由于開源的 Delta 是 Databricks 閉源 Delta 的簡化版本,主要提供 table format 的技術標準,而閉源版本的 Delta 基于這個標準實現了諸多優化,因此我們主要用閉源的 Delta 來做對比。

img

Delta 的房子基礎相對結實,功能樓層也建得比較高,但這個房子可以說是 Databricks 的,本質上是為了更好地壯大 Spark 生態。在 Delta 上,其他計算引擎難以替代 Spark 的位置,尤其是在寫入路徑方面。Iceberg 的建筑基礎非常扎實,擴展到新的計算引擎或文件系統都很方便,但目前功能樓層相對低一點,最缺的功能是 upsert 和 compaction。Iceberg 社區正在優先推動這兩個功能的實現。Hudi 的情況不同,它的建筑基礎設計不如 Iceberg 結實。例如,要接入 Flink 作為 Sink,需要從底向上重新設計房子,把接口抽象出來,并且考慮不影響其他功能。盡管如此,Hudi 的功能樓層還是比較完善的,提供的 upsert 和 compaction 功能直接命中用戶的痛點。Hive 看起來像是一棟豪宅,絕大部分功能都有,但作為數據湖有點像靠著豪宅的一堵墻建房子,顯得相對笨重。此外,正如 Netflix 的分析,細看這棟豪宅的墻面其實有一些問題。

七、筆者觀點

雖然上述四款熱門開源框架都宣稱自己是數據湖解決方案,但根據我的了解和使用體驗,這幾款產品均不能完全滿足數據湖所應具備的能力。

在前一篇文章中,筆者提到數據湖的本質是由數據存儲架構數據處理工具組成的解決方案。然而,這四款開源框架均沿用了傳統數據庫建表的思想,對數據有較強的 schema 約束,這與數據湖原始定義中的集成各類非結構化數據的要求相悖。

通過對這幾款產品的使用和體驗,我認為目前熱門的數據湖技術均依賴于分布式文件系統的存儲能力。它們的功能介于分布式文件系統與普通數據庫之間,繼承了文件系統中數據文件和目錄對用戶直觀可見,以及數據庫對數據使用表結構的管理、元數據管理和事務管理的優點,可以被稱為一種數據管理中間件的開源產品。

這些產品的使用并不需要安裝部署任何軟件,也不需要啟動額外的服務和端口,只需增加一個 jar 包,以插件的形式嵌入到計算引擎中,從而實現對分布式文件系統中數據的讀寫和各種數據管理功能。它們為計算引擎提供了一種數據組織和管理方式,但并非真正意義上的數據湖。

真正意義上的數據湖應該具備數據抽取 (ETL)、元數據管理、數據分析三大功能,如下圖所示:

在這里插入圖片描述

八、總結

數據湖就像其他新興技術一樣,在剛出現時往往受到廣泛關注,成為熱門話題。然而,很多新興技術詞匯大多是作為一個泛化的理論概念,但往往具有很大的吸引力,其實際應用還存在諸多挑戰和局限性。

根據對當前幾款熱門開源框架(如Delta Lake、Apache Iceberg、Apache Hudi、Hive-ACID)的使用體驗,這些產品均無法完全滿足數據湖應具備的能力。數據湖的本質是由數據存儲架構和數據處理工具組成的解決方案,但上述框架在設計上仍然沿用了傳統數據庫的schema約束,與數據湖集成各類非結構化數據的初衷相悖。

總體來說,數據湖等新興技術在理論上提供了一個理想的解決方案,但在實際應用中,仍需不斷發展和完善,以滿足企業對數據存儲、管理和分析的需求。這一過程需要時間和技術的積累,才能真正實現理論與實踐的統一。

八、參考資料

  • 從數據庫到數據倉庫:數據倉庫導論
  • 從數據倉庫到數據湖(上):數據湖導論
  • 深度對比 Delta、Iceberg 和 Hudi 三大開源數據湖方案
  • Hidi
  • Delta Lake
  • Iceberg
  • Paimon

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

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

相關文章

Rust入門實戰 編寫Minecraft啟動器#4下載資源

首發于Enaium的個人博客 首先我們需要添加幾個依賴。 model { path "../model" } parse { path "../parse" } reqwest { version "0.12", features ["blocking", "json"] } file-hashing { version "0.1&quo…

Xshell 和寶塔有啥區別

Xshell 和寶塔是兩種不同類型的工具,具有以下顯著區別: 1. 功能和用途 Xshell:主要是一款用于遠程連接服務器的終端模擬軟件。它允許用戶通過 SSH 協議安全地連接到遠程服務器,并在終端中執行命令,進行服務器的管理和…

AI論文作圖——如何表示模型參數凍結狀態

一、LOGO 🔥 win10win11 ?? win10win11 二、注意事項: 根據電腦系統,選擇對應的版本。 參考: 【AI論文作圖】如何表示模型參數凍結狀態?

對稱加密和非對稱加密解析

目錄 一、對稱加密二、非對稱加密三、總結 對稱加密和非對稱加密是兩種主要的加密技術,它們在數據安全領域扮演著重要角色。 一、對稱加密 基本原理:對稱加密使用同一個密鑰進行加密和解密。這意味著如果A用某個密鑰加密了信息發送給B,那么B…

Redis數據庫筆記

一、 認識NoSQL SQLNoSQL數據結構結構化非結構化(鍵值類型(Redis)文檔類型(MongoDB)列類型(HBase)Graph類型(Neo4j))數據關聯關聯的無關聯查詢方式SQL查詢非SQL事務特性ACIDBASE存儲方式磁盤內存擴展性垂直水平使用場景數據結構固定;相關業務對數據安全性、一致性要…

【C++中resize和reserve的區別】

1. resize的用法 改變當前容器內含有元素的數量&#xff08;size()&#xff09;比如&#xff1a; vector<int> vct;int num vct.size();//之前的元素個數為num vct.resize(len);//現在的元素個數為len如果num < len &#xff0c;那么容器vct新增len - num個元素&am…

8-選擇靜態或共享庫

在本節中&#xff0c;我們將展示如何使用BUILD_SHARED_LIBS變量來控制add_library()的默認行為&#xff0c;并允許控制如何構建沒有顯式類型的庫(STATIC、SHARED、MODULE或OBJECT)。 要做到這一點&#xff0c;我們需要將BUILD_SHARED_LIBS添加到頂級的CMakeLists.txt中。我…

神經網絡中的激活函數

目錄 一、什么是激活函數&#xff1a;二、如何選擇激活函數&#xff1a;1.Sigmoid激活函數&#xff1a;2.線性激活函數&#xff1a;3.ReLU激活函數&#xff1a; 一、什么是激活函數&#xff1a; 激活函數是神經網絡中的一種函數&#xff0c;它在神經元中起到了非線性映射的作用…

最新 Kubernetes 集群部署 + flannel 網絡插件(保姆級教程,最新 K8S 版本)

資源列表 操作系統配置主機名IP所需插件CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictlCentOS 7.92C4Gk8s-node01192.168.60.144f…

gitee上傳和下載idea項目的流程

環境&#xff1a;idea2022 一、上傳項目 1、在gitee中新建一個倉庫。 2、打開所要上傳的項目的文件夾&#xff0c;點擊Git Bash&#xff0c;生成.git文件夾。 3、在idea中打開所要上傳的項目&#xff0c;在控制臺的Terminal菜單中&#xff0c;輸入git add . (注意&#xf…

安防綜合管理/視頻匯聚平臺EasyCVR視頻監控存儲技術:高效穩定的視頻數據保障方案

隨著科技的飛速發展&#xff0c;視頻監控已成為現代社會不可或缺的一部分。無論是城市治安、交通管理&#xff0c;還是商業安保、家庭監控&#xff0c;視頻監控都發揮著至關重要的作用。而在這背后&#xff0c;視頻監控存儲技術則是確保監控數據得以長期保存、高效檢索和可靠利…

「C++系列」C++ 修飾符類型

文章目錄 一、C 修飾符類型1. 訪問修飾符&#xff08;Access Modifiers&#xff09;2. 存儲類修飾符&#xff08;Storage Class Specifiers&#xff09;3. 類型修飾符&#xff08;Type Modifiers&#xff09;4. 函數修飾符 二、C 修飾符類型-案例1. 訪問修飾符案例2. 存儲類修飾…

精講:java之多維數組的使用

一、多維數組簡介 1.為什么需要二維數組 我們看下面這個例子&#xff1f;“ 某公司2022年全年各個月份的銷售額進行登記。按月份存儲&#xff0c;可以使用一維數組。如果改寫為按季度為單位存儲怎么辦呢&#xff1f; 或許現在學習了一維數組的你只能申請四個一維數組去存儲每…

【福利】代碼公開!咸魚之王自動答題腳本

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你&#xff0c;歡迎[點贊、收藏、關注]哦~ 微信或QQ打開咸魚之王小程序&#xff0c;進入答題界面&#xff0c;運行main.py。期間不要動鼠標。 可自行更改代碼來適配自己的需求~ 可以按照示例圖片…

Kubernetes(k8s)和Docker Compose本質區別

Kubernetes&#xff08;k8s&#xff09;和Docker Compose是兩種不同的容器編排工具&#xff0c;它們有各自的特點和使用場景。 Kubernetes&#xff1a; Kubernetes是一個開源的容器編排平臺&#xff0c;用于自動化計算機軟件的部署、擴展和管理。它支持跨多個主機集群的容器化…

HarmonyOS Next 原生應用開發-從TS到ArkTS的適配規則(四)

一、不支持以#開頭的私有字段 規則&#xff1a;arkts-no-private-identifiers 級別&#xff1a;錯誤 ArkTS不支持使用#符號開頭聲明的私有字段。改用private關鍵字。 TypeScript class C {#foo: number 42 }ArkTS class C {private foo: number 42 }二、類型、命名空間的命…

深入了解線程鎖的使用及鎖的本質

文章目錄 線程鎖的本質局部鎖的使用 鎖的封裝及演示線程饑餓問題 線程加鎖本質可重入和線程安全死鎖問題 根據前面內容的概述, 上述我們已經知道了在linux下關于線程封裝和線程互斥,鎖的相關的概念, 下面就來介紹一下關于線程鎖的一些其他概念. 線程鎖的本質 當這個鎖是全局的…

Codeforces Round #956 (Div. 2) and ByteRace 2024

A. Array Divisibility 思路: 找出特例,發現輸出 1~&#x1d45b; 符合題意。直接輸出1~n即可. 代碼: #include<bits/stdc.h> using namespace std; typedef long long ll; #define N 1000005 ll dp[N], w[N], v[N], h[N]; ll dis[1005][1005]; ll a, b, c, n, m, t;…

iOS 開發技巧 - 使用本地 json 文件

前言 使用本地 json 文件的場景&#xff0c;在我們開發功能的階段&#xff0c;服務端接口字段定義好了后&#xff0c;有些接口響應很慢&#xff0c;請求到響應可能要 幾十秒甚至一分鐘&#xff0c;我們需要頻繁調用接口來調試功能&#xff1b;還有就是調用一些我們需要付費的三…

Ubuntu20.04下修改samba用戶密碼

Ubuntu20.04下修改samba用戶密碼 在Ubuntu系統中&#xff0c;修改samba密碼通常涉及到兩個方面&#xff1a;更改samba用戶的密碼和重置samba服務的密碼數據庫。以下是如何進行操作的步驟&#xff1a; 1、更改samba用戶密碼&#xff1a; 打開終端&#xff0c;使用以下命令更改…