从数据湖到湖仓一体:统一数据架构演进之路
文章目录
- 一、前言
- 二、什么是湖仓一体?
- 起源
- 概述
- 三、为什么要构建湖仓一体?
- 1. 成本角度
- 2. 技术角度
- 四、湖仓一体实践过程
- 阶段一:摸索阶段(仓、湖并行建设)
- 阶段二:发展阶段
- 方式一、湖上建仓(湖在下、仓在上)
- 方式二:仓外挂湖(金融领域常见)
- 阶段三:深化阶段(整合以上两种方式)
- 五、总结
- 六、参考资料
一、前言
在阅读本文之前,建议读者先对数据仓库和数据湖有一些基本的了解。这将有助于更好地理解本文内容。您可以参考笔者以下文章:
从数据库到数据仓库:数据仓库导论
从数据仓库到数据湖(上):数据湖导论
从数据仓库到数据湖(下):数据湖领域热门的开源框架
二、什么是湖仓一体?
起源
湖仓一体概念最早是由数据智能独角兽企业Databricks于2020年提出Data Lakehouse概念,其联合创始人兼首席执行官 Ali Ghodsi 说:“从长远来看,所有数据仓库都将被纳入数据湖仓,这不会在一夜之间发生——这些东西会共存一段时间——但这个官方的世界纪录清楚地证明,在价格和性能上,数据湖仓完胜数据仓库。”

概述
湖仓一体是一种新的数据管理模式。湖仓一体将数据仓库和数据湖两者之间的差异进行融合,并将数据仓库构建在数据湖,从而有效简化了企业数据的基础架构,提升数据存储弹性和质量的同时还能降低成本,减小数据冗余。
在湖仓一体之前,数据分析经历了数据库、数据仓库和数据湖分析三个时代。
- 首先是数据库,它是一个最基础的概念,主要负责联机事务处理,也提供基本的数据分析能力。
- 随着数据量的增长,出现了数据仓库,它存储的是经过清洗、加工以及建模后的高价值的数据,供业务人员进行数据分析。
- 数据湖的出现,主要是为了去满足企业对原始数据的存储、管理的需求。这里的需求主要包括两部分,首先要有一个低成本的存储,用于存储结构化、半结构化,甚至非结构化的数据;另外,就是希望有一套包括数据处理、数据管理以及数据治理在内的一体化解决方案。
数据仓库解决了数据快速分析的需求,数据湖解决了数据的存储和管理的需求,而湖仓一体要解决的就是如何让数据能够在数据湖和数据仓库之间进行无缝的集成和自由的流转,从而帮助用户直接利用数据仓库的能力来解决数据湖中的数据分析问题,同时又能充分利用数据湖的数据管理能力来提升数据的价值。
注意:严格来说湖仓一体没有跟具体哪个技术绑定
三、为什么要构建湖仓一体?
湖仓一体的出现离不开数据湖和技术的发展,本文将从成本和技术两个方向探讨为何要构建湖仓一体。
1. 成本角度
在企业构建数据湖初期,企业已经拥有了数据仓库,而数据湖作为新兴组件独立部署。在这一阶段,数据仓库和数据湖是并行建设的,但随着时间的推移,它们之间的数据协同性差,形成了数据孤岛。
由于数据仓库和数据湖各自独立建设,企业需要重新购买机器,增加成本。因此,从成本角度看,湖仓一体是必要的。
此外,数据湖适合存储各种类型的数据,其起步成本较低,但随着数据量增加,总拥有成本(TCO)会迅速上升。相反,数据仓库在前期需要进行大量数据处理(如清洗、加工和结构约束),建设成本较高,但后期维护成本相对稳定。
因此,对于既想建立数据湖又想搭建数据仓库的企业来说,这无异于在玩一个成本游戏。

为了更有效地利用数据资源,人们开始思考,能否将数据湖和数据仓库整合起来,减少重复建设,实现数据的流动和共享?

这些需求推动了数据湖和数据仓库的融合,催生了如今炙手可热的概念:Lake House。Lake House,坊间称之为“湖仓一体”,其架构的核心是实现“湖里”和“仓里”的数据/元数据无缝打通,并且“自由”流动。
湖里的“新鲜”数据可以流到仓里,甚至可以直接被数据仓库使用,而仓里的“不新鲜”数据也可以流到湖里,低成本长久保存,供未来的数据挖掘使用。

2. 技术角度
在笔者之前关于数据湖的文章中提到,当下的数据湖开源框架均依赖分布式文件系统的存储能力。它们普遍支持一些通用的文件格式来组织和管理数据。正是这种通用的数据格式,为许多计算引擎和数据库提供了接口的便利。
例如,传统的数据仓库 Hive 将数据存储在 HDFS 上,而数据湖 Hudi 也使用 HDFS 存储数据。考虑到它们共享相同的底层存储,为何不将它们整合在一起呢?这就催生了“湖仓一体”的技术概念,当然,这只是原因之一。
随着技术的发展,数据湖和数据仓库的边界正在逐渐模糊,数据湖与外部系统的对接能力也在增强。得益于数据湖技术对底层数据格式的通用性以及对外提供的良好接口,许多 MPP 库(如 ClickHouse、Doris、StarRocks 等)能够方便地对接数据湖。
以 Doris 为例,在其 2.x 版本的官方文档中,专门开设了一章“湖仓一体”来详细介绍这一概念,如下图所示:

通过这些技术整合,企业能够更有效地管理和利用数据资源,实现数据的流动和共享,进而提升数据驱动决策的能力和效率。
四、湖仓一体实践过程
国内大数据时代湖仓一体实践的发展经历了三个阶段:摸索阶段、发展阶段、深化阶段。
深化阶段尚未达到完全成熟,因为湖仓一体的概念较为新颖,仍在不断演变中,未来可能会有更先进的技术架构出现并取而代之。
阶段一:摸索阶段(仓、湖并行建设)
仓、湖各自独立建设,形成数据孤岛,数据协同性差,如下图:

阶段二:发展阶段
在湖仓一体的发展践阶段,逐渐形成了“湖上建仓”与“仓外挂湖”两种湖仓一体实现方式。
湖上建仓和仓外挂湖虽然出发点不同,但最终湖仓一体的目标一致。
方式一、湖上建仓(湖在下、仓在上)
湖仓一体架构主要是实现“湖里”和“仓里”的数据能够无缝打通,在这个背景下催生出:湖在下,仓在上的立体建设模式,在该架构中,湖仓一体架构主要将数据湖作为中央存储库,将机器学习、数据仓库、日志分析、大数据等技术进行整合,形成一套数据服务环,更好地分析、整合数据,让数据仓库和数据湖中的数据可以自由流动,用户可以更便捷地调取其中的数据,让数据“入湖”、“出湖”更为便捷,如下图:

1、数据湖来承载仓的贴源层和基础层;
2、仓聚焦在共性加工层及集市层;
细节如下图:

总的来看“湖上建仓”路径本质是在湖的基础上增加仓的能力
方式二:仓外挂湖(金融领域常见)
仓外挂湖是指以 MPP 数据库为数仓基础,使用可插拔架构,通过开放接口对接外部数据湖实现统一存储,在存储底层共享一份数据,计算、存储完全分离(即:数据存储在数据湖中,表的元数据管理和计算则使用MPP库能力),实现从强管理到兼容开放存储和多引擎。代表产品: Doris、AWS Redshift、阿里云 MaxCompute/Hologres 湖仓一体。
这里以Doris2.x版本为例,Doris 通过多源数据目录(Multi-Catalog)功能,支持了包括 Apache Hive、Apache Iceberg、Apache Hudi、Apache Paimon(Incubating)等主流数据湖的连接访问。具体架构如下:

总的来看,“仓外挂湖”路径本质是在仓的基础上增加湖的多类型存储等能力
阶段三:深化阶段(整合以上两种方式)
下图展示了火山引擎的湖仓一体架构,涵盖从数据存储到计算处理的各个层级:

开发应用层
- 包含第三方生态产品和内部应用(如 DataLeap、DataWind)。
- 通过 SDK 和 JDBC 与计算层交互。
湖仓计算层
- 计算引擎:支持 Spark SQL、Presto、PySpark 等多种计算方式。
- 执行加速层:使用(C++ 向量化执行引擎)(例如Doris、ClickHouse等MPP库) 提高计算性能。
- 资源调度:提供海量资源池和弹性伸缩能力。
湖仓存储层[湖仓一体]
- 存储格式:支持 Hudi、Parquet、ORC 和 Avro 等格式。
- 数据存储:结合内置文件系统和外置存储(如 TOS、RDS、Kafka)。
数据管理
- 统一元数据管理:确保一致的数据视图。
- 多租户支持:实现数据隔离和管理。
- 安全体系:保障数据安全。
五、总结
本文详细探讨了从数据湖到湖仓一体的演进过程及其在现代数据管理中的重要性。湖仓一体由Databricks于2020年提出,旨在融合数据湖和数据仓库的优势,通过无缝集成,实现数据存储和管理的统一架构。
湖仓一体的出现主要是为了降低成本和解决数据孤岛问题。传统的数据湖和数据仓库各自独立建设,导致重复投资和数据管理上的困难,而湖仓一体通过简化基础架构、提升数据存储弹性和质量,有效减少了这些问题。
技术上,湖仓一体依赖于分布式文件系统和通用数据格式,增强了数据湖与外部系统的对接能力。实践中,湖仓一体在国内的发展经历了摸索、发展和深化三个阶段,形成了“湖上建仓”和“仓外挂湖”两种实现方式,各自通过不同的路径实现了数据的流动和共享。
总之,湖仓一体在提升数据管理效率和降低成本方面具有显著优势,虽然尚未完全成熟,但其发展潜力巨大,将为企业的数据管理和决策提供新的解决方案。
六、参考资料
- Doris湖仓一体概述
- 从数据库到数据仓库:数据仓库导论
- 从数据仓库到数据湖(上):数据湖导论
- 从数据仓库到数据湖(下):数据湖领域热门的开源框架
- 数据库、数据湖、数据仓库、湖仓一体、智能湖仓,分别都是什么鬼?
相关文章:
从数据湖到湖仓一体:统一数据架构演进之路
文章目录 一、前言二、什么是湖仓一体?起源概述 三、为什么要构建湖仓一体?1. 成本角度2. 技术角度 四、湖仓一体实践过程阶段一:摸索阶段(仓、湖并行建设)阶段二:发展阶段方式一、湖上建仓(湖在下、仓在上)方式二:仓外…...
Electron 渲染进程直接调用主进程的API库@electron/remote引用讲解
背景 remote是个老库,早期Electron版本中有个remote对象,这个对象可以横跨所有进程,随意通信,后来官方认为不安全,被干掉了,之后有人利用Electron的IPC通信,底层通过Promise的await能力&#x…...
在python中使用正则表达式
正则表达式是什么?就是要寻找的数据的规律,使用正则表达式的步骤有三 第一,寻找规律,第二使用正则符号表示规律,第三,提取信息 看下面的代码 import re wenzhang (小草偷偷地从土里钻出来,嫩…...
华清数据结构day4 24-7-19
链表的相关操作 linklist.h #ifndef LINKLIST_H #define LINKLIST_H #include <myhead.h> typedef int datatype; typedef struct Node {union{int len;datatype data;};struct Node *next; } Node, *NodePtr;NodePtr list_create(); NodePtr apply_node(datatype e); …...
【深度学习图像】拼接图的切分
用户常常将多张图拼成一张图。 如果将这张图拆为多个子图,下面是一种opencv的办法,后面要训练一个模型来识别边缘更为准确。 import osimport cv2 import numpy as npdef detect_lines(image_path):# 读取图片image cv2.imread(image_path)if image i…...
Covalent(CXT)运营商网络规模扩大 42%,以满足激增的需求
Covalent Network(CXT)是领先的人工智能模块化数据基础设施,网络集成了超过 230 条链并积累了数千名客户,目前 Covalent Network(CXT)网络迎来了五位新运营商的加入,包括 Graphyte Labs、PierTw…...
Java 集合框架:HashMap 的介绍、使用、原理与源码解析
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 020 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…...
单周期CPU(三)译码模块(minisys)(verilog)(vivado)
timescale 1ns / 1ps //module Idecode32 (input reset,input clock,output [31:0] read_data_1, // 输出的第一操作数output [31:0] read_data_2, // 输出的第二操作数input [31:0] Instruction, // 取指单元来的指令input [31:0] …...
理想化相机模型的相机内参
文章目录 理想化相机模型的相机内参计算1. 相机内参定义2. 根据视角和图像分辨率计算相机内参2.1 计算焦距 fx 和 fy2.2 计算主点 cx 和 cy3. 示例计算3.1 计算 fx3.2 假设 fy = fx(因为没有垂直视场角的信息)3.3 计算主点4. 相机内参矩阵理想化相机模型的相机内参计算 在理…...
【数据脱敏】⭐️SpringBoot 整合 Jackson 实现隐私数据加密
目录 🍸前言 🍻一、Jackson 序列化库 🍺二、方案实践 2.1 环境准备 2.2 依赖引入 2.3 代码编写 💞️三、接口测试 🍹四、章末 🍸前言 小伙伴们大家好,最近也是很忙啊,上次的文章…...
骑砍2霸主MOD开发(18)-多人联机模式开发环境搭建
一.多人联机模式网络拓扑图 二.专用服务器搭建(DedicatedServer) <1.Token生成(用于LobbyServer的校验): 进入多人联机大厅,ALT~打开RGL控制台,输入customserver.gettoken Token文件路径:C:\Users\taohu\Documents\Mount and Blade II Bannerlord\Tokens <2.启动专用服务…...
【HZHY-AI300G智能盒试用连载体验】在华为IoTDA平台上建立设备
目录 华为IoTDA平台 注册IoTDA实例 创建产品 添加设备 本文首发于:【HZHY-AI300G智能盒试用连载体验】 智能工业互联网网关 - 北京合众恒跃科技有限公司 - 电子技术论坛 - 广受欢迎的专业电子论坛! 在上一篇博文中介绍了如何在HZHY-AI300G智能盒创建南向设备&a…...
【LLM】-05-提示工程-部署Langchain-Chat
目录 1、软硬件要求 1.1、软件要求 1.2、硬件要求 1.3、个人配置参考 2、创建cuda环境 3、下载源码及模型 4、配置文件修改 5、初始化知识库 5.1、训练自己的知识库 6、启动 7、API接口调用 7.1、使用openai 参考官方wiki,本文以Ubuntu20.04_x64…...
【漏洞复现】Next.js框架存在SSRF漏洞(CVE-2024-34351)
0x01 产品简介 ZEIT Next.js是ZEIT公司的一款基于Vue.js、Node.js、Webpack和Babel.js的开源Web应用框架。 0x02 漏洞概述 ZEIT Next.js 13.4版本至14.1.1之前版本存在代码问题漏洞,该漏洞源于存在服务器端请求伪造 (SSRF) 漏洞 0x03 搜索引擎 body"/_nex…...
【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 小区小朋友统计(100分) - 三语言AC题解(Python/Java/Cpp)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…...
Vuex看这一篇就够了
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
Kafka集群创建
这样就创建好了docker4个镜像,三个node,一个manager。 其中,浏览器访问的是manager对应的那个url,直接在里面加Cluster...
2024.7.22 作业
1.将双向链表和循环链表自己实现一遍,至少要实现创建、增、删、改、查、销毁工作 循环链表 looplinklist.h #ifndef LOOPLINKLIST_H #define LOOPLINKLIST_H#include <myhead.h>typedef int datatype;typedef struct Node {union {int len;datatype data;}…...
如何使用aiohttp或requests-async等库并发地执行多个HTTP请求
在Python中,要并发地执行多个HTTP请求,可以使用aiohttp这样的异步HTTP客户端库,因为它支持异步编程,能够显著提高IO密集型任务的性能,比如网络请求。requests-async并不是一个广泛认知的库(虽然可能存在类似…...
Golang | Leetcode Golang题解之第257题二叉树的所有路径
题目: 题解: func binaryTreePaths(root *TreeNode) []string {paths : []string{}if root nil {return paths}nodeQueue : []*TreeNode{}pathQueue : []string{}nodeQueue append(nodeQueue, root)pathQueue append(pathQueue, strconv.Itoa(root.V…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
