从数据湖到湖仓一体:统一数据架构演进之路

文章目录

  • 一、前言
  • 二、什么是湖仓一体?
    • 起源
    • 概述
  • 三、为什么要构建湖仓一体?
    • 1. 成本角度
    • 2. 技术角度
  • 四、湖仓一体实践过程
    • 阶段一:摸索阶段(仓、湖并行建设)
    • 阶段二:发展阶段
      • 方式一、湖上建仓(湖在下、仓在上)
      • 方式二:仓外挂湖(金融领域常见)
    • 阶段三:深化阶段(整合以上两种方式)
  • 五、总结
  • 六、参考资料

一、前言

在阅读本文之前,建议读者先对数据仓库和数据湖有一些基本的了解。这将有助于更好地理解本文内容。您可以参考笔者以下文章:

从数据库到数据仓库:数据仓库导论

从数据仓库到数据湖(上):数据湖导论

从数据仓库到数据湖(下):数据湖领域热门的开源框架

二、什么是湖仓一体?

起源

湖仓一体概念最早是由数据智能独角兽企业Databricks于2020年提出Data Lakehouse概念,其联合创始人兼首席执行官 Ali Ghodsi 说:“从长远来看,所有数据仓库都将被纳入数据湖仓,这不会在一夜之间发生——这些东西会共存一段时间——但这个官方的世界纪录清楚地证明,在价格和性能上,数据湖仓完胜数据仓库。”

img

概述

湖仓一体是一种新的数据管理模式。湖仓一体将数据仓库和数据湖两者之间的差异进行融合,并将数据仓库构建在数据湖,从而有效简化了企业数据的基础架构,提升数据存储弹性和质量的同时还能降低成本,减小数据冗余。

在湖仓一体之前,数据分析经历了数据库、数据仓库和数据湖分析三个时代。

  • 首先是数据库,它是一个最基础的概念,主要负责联机事务处理,也提供基本的数据分析能力。
  • 随着数据量的增长,出现了数据仓库,它存储的是经过清洗、加工以及建模后的高价值的数据,供业务人员进行数据分析。
  • 数据湖的出现,主要是为了去满足企业对原始数据的存储、管理的需求。这里的需求主要包括两部分,首先要有一个低成本的存储,用于存储结构化、半结构化,甚至非结构化的数据;另外,就是希望有一套包括数据处理、数据管理以及数据治理在内的一体化解决方案。

数据仓库解决了数据快速分析的需求,数据湖解决了数据的存储和管理的需求,而湖仓一体要解决的就是如何让数据能够在数据湖和数据仓库之间进行无缝的集成和自由的流转,从而帮助用户直接利用数据仓库的能力来解决数据湖中的数据分析问题,同时又能充分利用数据湖的数据管理能力来提升数据的价值。

注意:严格来说湖仓一体没有跟具体哪个技术绑定

三、为什么要构建湖仓一体?

湖仓一体的出现离不开数据湖和技术的发展,本文将从成本和技术两个方向探讨为何要构建湖仓一体。

1. 成本角度

在企业构建数据湖初期,企业已经拥有了数据仓库,而数据湖作为新兴组件独立部署。在这一阶段,数据仓库和数据湖是并行建设的,但随着时间的推移,它们之间的数据协同性差,形成了数据孤岛。

由于数据仓库和数据湖各自独立建设,企业需要重新购买机器,增加成本。因此,从成本角度看,湖仓一体是必要的。

此外,数据湖适合存储各种类型的数据,其起步成本较低,但随着数据量增加,总拥有成本(TCO)会迅速上升。相反,数据仓库在前期需要进行大量数据处理(如清洗、加工和结构约束),建设成本较高,但后期维护成本相对稳定。

因此,对于既想建立数据湖又想搭建数据仓库的企业来说,这无异于在玩一个成本游戏。

图1:数据湖和数据仓库成本对比

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

在这里插入图片描述

这些需求推动了数据湖和数据仓库的融合,催生了如今炙手可热的概念:Lake House。Lake House,坊间称之为“湖仓一体”,其架构的核心是实现“湖里”和“仓里”的数据/元数据无缝打通,并且“自由”流动。

湖里的“新鲜”数据可以流到仓里,甚至可以直接被数据仓库使用,而仓里的“不新鲜”数据也可以流到湖里,低成本长久保存,供未来的数据挖掘使用。

图3: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)等主流数据湖的连接访问。具体架构如下:

基于 Doris 的湖仓一体架构

总的来看,“仓外挂湖”路径本质是在仓的基础上增加湖的多类型存储等能力

阶段三:深化阶段(整合以上两种方式)

下图展示了火山引擎的湖仓一体架构,涵盖从数据存储到计算处理的各个层级:

架构图

开发应用层

  • 包含第三方生态产品和内部应用(如 DataLeap、DataWind)。
  • 通过 SDK 和 JDBC 与计算层交互。

湖仓计算层

  • 计算引擎:支持 Spark SQL、Presto、PySpark 等多种计算方式。
  • 执行加速层:使用(C++ 向量化执行引擎)(例如Doris、ClickHouse等MPP库) 提高计算性能。
  • 资源调度:提供海量资源池和弹性伸缩能力。

湖仓存储层[湖仓一体]

  • 存储格式:支持 Hudi、Parquet、ORC 和 Avro 等格式。
  • 数据存储:结合内置文件系统和外置存储(如 TOS、RDS、Kafka)。

数据管理

  • 统一元数据管理:确保一致的数据视图。
  • 多租户支持:实现数据隔离和管理。
  • 安全体系:保障数据安全。

五、总结

本文详细探讨了从数据湖到湖仓一体的演进过程及其在现代数据管理中的重要性。湖仓一体由Databricks于2020年提出,旨在融合数据湖和数据仓库的优势,通过无缝集成,实现数据存储和管理的统一架构。

湖仓一体的出现主要是为了降低成本和解决数据孤岛问题。传统的数据湖和数据仓库各自独立建设,导致重复投资和数据管理上的困难,而湖仓一体通过简化基础架构、提升数据存储弹性和质量,有效减少了这些问题。

技术上,湖仓一体依赖于分布式文件系统和通用数据格式,增强了数据湖与外部系统的对接能力。实践中,湖仓一体在国内的发展经历了摸索、发展和深化三个阶段,形成了“湖上建仓”和“仓外挂湖”两种实现方式,各自通过不同的路径实现了数据的流动和共享。

总之,湖仓一体在提升数据管理效率和降低成本方面具有显著优势,虽然尚未完全成熟,但其发展潜力巨大,将为企业的数据管理和决策提供新的解决方案。

六、参考资料

  • Doris湖仓一体概述
  • 从数据库到数据仓库:数据仓库导论
  • 从数据仓库到数据湖(上):数据湖导论
  • 从数据仓库到数据湖(下):数据湖领域热门的开源框架
  • 数据库、数据湖、数据仓库、湖仓一体、智能湖仓,分别都是什么鬼?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/382079.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC高频产品面试题(二)

什么叫大模型,人工智能大模型是什么? 之前,人工智能大多针对特定的场景应用进行训练,生成的模型难以迁移到其他场景,属于“小模型”的范畴。整个训练过程中,不仅手工调参工作量大,还需要给机器“…

SQL实战宝典:快速上手数据库查询与优化

文章目录 SQL 速成手册SQL 的主要功能1、基本查询语句2、表操作语句3、数据操作语句4、函数与聚合操作5、子查询与联接6、高级操作7、性能优化与安全性 基本查询语句表操作语句数据操作语句函数与聚合操作子查询与联接高级操作性能优化与安全性 SQL 速成手册 SQL(S…

基于 Three.js 的 3D 模型加载优化

作者:来自 vivo 互联网前端团队- Su Ning 作为一个3D的项目,从用户打开页面到最终模型的渲染需要经过多个流程,加载的时间也会比普通的H5项目要更长一些,从而造成大量的用户流失。为了提升首屏加载的转化率,需要尽可能…

kotlin compose 实现应用内多语言切换(不重新打开App)

1. 示例图 2.具体实现 如何实现上述示例,且不需要重新打开App ①自定义 MainApplication 实现 Application ,定义两个变量: class MainApplication : Application() { object GlobalDpData { var language: String = "" var defaultLanguage: Strin…

ARM架构(一)—— ARMV8V9基础概念

目录 1.ARMCore的时间线2.ARM术语小结2.1 A64和arrch642.2ARM架构现在的5个系列2.3 微架构2.4 PE2.5 Banked2.6 ARM文档术语2.7 IMPLEMENTATION DEFINFD 和 DEPRECATED2.8 EL1t和EL1h 3 ARMv7的软件架构4 安全状态切换模型4.1 Secure state和Non-secure state介绍 5 Interproce…

Linux常用特殊符号

1、 > 和 >> 用法 这两个符号> 和 >> 主要区别如下: 符号>:覆盖现有文件,如果目录中不存在上述名称的文件,则创建一个文件。 符号>>:追加现有文件,如果目录中不存在上述名称的文…

Unity中UI系统3——UGUI

概述 基础知识 UGUI基础 六大基础组件 Canvas——渲染模式控制组件 Canvas Scaler —— 分辨率自适应组件 CanvasScaler——恒定像素模式 CanvasScaler——缩放模式 可以适当的自己去了解对数 CanvasScaler——恒定物理模式 CanvasScaler —— 3D模式 Graphic Raycaster——射线…

将mars3D导入自己的项目中

文章目录 Mars3D官方文档 一、打开自己的vite项目二、创建场景配置文件1.json文件路径 public\config\config.json2.创建组件定义文件路径 src\components\mars-work\mars-map.vue三、demo中引入四、必要样式 依赖文件 总结 Mars3D官方文档 一、打开自己的vite项目 我创建了一…

请你谈谈:spring bean的生命周期 - 阶段4:检查Aware相关接口

在Spring框架中,Aware 接口系列提供了一种机制,允许bean在初始化过程中感知到容器中的特定对象,如应用上下文(ApplicationContext)、Bean工厂(BeanFactory)等。如果你有一个用户自定义的对象&am…

2、如何发行自己的数字代币(truffle智能合约项目实战)

2、如何发行自己的数字代币(truffle智能合约项目实战) 1-Atom IDE插件安装2-truffle tutorialtoken3-tutorialtoken源码框架分析4-安装openzeppelin代币框架(代币发布成功) 1-Atom IDE插件安装 正式介绍基于web的智能合约开发 推…

分类损失函数 (一) torch.nn.CrossEntropyLoss()

1、交叉熵 是一种用于衡量两个概率分布之间的距离或相似性的度量方法。机器学习中,交叉熵常用于损失函数,用于评估模型的预测结果和实际标签的差异。公式: y:真是标签的概率分布,y:模型预测的概率分布 …

Kotlin泛型实化

内联函数 reified实现 1. 内联函数 内联函数中的代码会在编译的时候自动被替换到调用它的地方,这样的话也就不存在什么泛型擦除的问题了,因为代码在编译之后会直接使用实际的类型来替代内联函数中的泛型声明。 2. reified关键字 在Kotlin中&#xff0…

购物车案例(源码分享)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

谷粒商城实战笔记-37-前端基础-Vue-基本语法插件安装

文章目录 一,v-model1,双向绑定2,vue的双向绑定2.1 html元素上使用指令v-model2.2 model中声明对应属性2.3,验证view绑定modelmodel绑定view 完整代码 二,v-on1,指令简介2,在button按钮中添加v-…

llama 2 改进之 RMSNorm

RMSNorm 论文:https://openreview.net/pdf?idSygkZ3MTJE Github:https://github.com/bzhangGo/rmsnorm?tabreadme-ov-file 论文假设LayerNorm中的重新居中不变性是可有可无的,并提出了均方根层归一化(RMSNorm)。RMSNorm根据均方根(RMS)将…

前端JS特效第50集:zyupload图片上传

zyupload图片上传,先来看看效果: 部分核心的代码如下(全部代码在文章末尾): var operimg_id; var zoom_rate100; var zoom_timeout; function rotateimg(){var smallImg$("#"operimg_id);var numsmallImg.attr(curr_rotate);if(nu…

2024 HNCTF PWN(hide_flag Rand_file_dockerfile Appetizers TTOCrv_)

文章目录 参考hide_flag思路exp Rand_file_dockerfile libc 2.31思路exp Appetizers glibc 2.35绕过关闭标准输出实例客户端 关闭标准输出服务端结果exp TTOCrv_🎲 glibc 2.35逆向DT_DEBUG获得各个库地址随机数思路exp 参考 https://docs.qq.com/doc/p/641e8742c39…

语音识别 语音识别项目相关笔记内容

语音识别 语音识别项目相关笔记内容 语音识别应用范畴语音识别框架语音基本操作使用scipy.io.wavfile读取wav音频文件获取采样率、长度、通道数使用numpy读取pcm格式音频文件读取wav音频文件,并绘制图像读取双声道的wav音频文件,分别绘制不同声道的波形图读取一个采样率为16k…

【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法

【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法 一、环境介绍1.1 本次环境规划1.2 kubernetes简介1.3 kubernetes特点二、本次实践介绍2.1 本次实践介绍2.2 报错场景三、查看报错日志3.1 查看pod描述信息3.2 查看pod日志四、报错分析五、故障处理…

【Vue】深入了解 v-for 指令:从基础到高级应用的全面指南

文章目录 一、v-for 指令概述二、v-for 指令的基本用法1. 遍历数组2. 遍历对象3. 使用索引 三、v-for 指令的高级用法1. 组件列表渲染2. 使用 key 提升性能3. 嵌套循环 四、结合其他功能的高级用法1. 处理过滤和排序后的结果2. 迭代数值范围3. 结合其他命令使用模板部分 (<t…