数据湖与湖仓一体是如何演变而来的?详谈大数据存储架构的变迁

在大数据存储架构的发展历程中,可以划分为三个显著的演进阶段。首先,随着Hadoop和Hive等初期项目的出现,数据仓库(Data Warehouse)的概念得以确立;随着数据仓库的不断演化,同时有了云与对象存储的诞生;大数据与 AI 的时代到来之后,数据湖(Data Lake)这个概念就被凸显了出来。

近几年,出现了一个新的存储概念,或者是说到了一个新的阶段,叫做湖仓一体(Lakehouse)。传统数仓大家都比较了解,今天这篇文章,我们会着重看一下后面这两个阶段,也就是数据湖和湖仓一体。

bd7496a6015a42a223468ec5e02d68f5.jpeg大数据存储架构的变迁

一、为什么要有「数据湖」?

数据湖的出现主要是为了解决数据烟囱(Data Silos)的问题。数据烟囱的形成主要源于不同的业务或团队由于历史原因导致数据隔离,无法进行有效连接。随着企业内部业务的增加,数据格式日益多样化,除了传统的结构化数据,还涉及大量的半结构化和非结构化数据。这些数据也需要被纳入企业的数据管理和运维体系中。传统的数据仓库架构难以满足这种多样化的数据存储需求。

其次,分散的数据管理也是数据烟囱问题的一个关联因素。由于数据分布在不同的位置,数据管理和权限控制变得分散,对于不同业务和团队进行管理需要大量的工作量。

再者,存储与计算的耦合(存算耦合)是另一个问题。这主要与传统的Hadoop架构,如HDFS和YARN,的设计理念有关。然而,对于基于公有云的现代大数据架构来说,这种存算耦合的设计显得缺乏弹性,无论是在运维弹性还是成本控制方面。

最后,随着人工智能(AI)行业的迅速发展,特别是在机器学习和深度学习领域,数据湖需要为基于这些技术的业务提供更好的支持。除了数据存储外,还需要与深度学习框架进行对接,提供如POSIX等更适合算法工程师的接口,而不仅仅是传统的SQL或其他方式。

帆软数仓搭建解决方案>>>
https://s.fanruan.com/5iyug


二、什么是「数据湖」?

这里引用维基百科上的一句简介:

A data lake is a system or repository of data stored in its natural/raw format, usually objectblobs or files.

翻译一下:

数据湖是一个存储系统或数据仓库,其中的数据以其自然的或原始的格式存储,通常以对象、块或文件的形式存在。

38b81d972e82bea71d88dba7ce037007.jpeg

数据湖与传统数据仓库最大的区别在于数据存储的方式。数据湖更倾向于将数据以其原始格式存储,而不进行预处理或转换。要构建一个有效的数据湖,关键在于选择一种既经济实惠又能支持海量数据的底层存储解决方案。目前,云上的对象存储技术似乎是一个理想的选择,它不仅成本低廉和可靠,还能够处理大规模的数据存储需求。然而,对象存储也并非完美无缺,接下来将对其进行详细比较和分析。

简洁地说,数据湖的核心理念是「 Everything in one place」,即所有数据都首先存储在数据湖中。无论是进行数据仓库构建还是进行后续的ETL处理,都可以在后续阶段进行。这里的“后置ETL”指的是ETL过程仍然存在,但它被转变为一个后续处理步骤。由于采用了对象存储和存算分离的架构,数据湖的整体设计也更符合云原生的理念。

三、为什么要有「湖仓一体」?

在数据湖架构中,尽管数据仓库仍然存在,但由于其在数据处理流程中的后置位置,可能导致数据处理的滞后。特别是对于如 Hive 这类传统组件,要实现近实时或基于 Hive 的增量数据更新相对复杂,尤其是在缩短分区(partition)时间窗口的情况下。

此外,尽管数据湖已经存在,但与机器学习和深度学习的集成仍然面临挑战。在湖仓一体的阶段,需要解决如何更好地支持深度学习等先进技术的问题。

数据重复拷贝和重复ETL也是一个关键问题。由于ETL和数据仓库都被放置在数据处理流程的后端,可能导致数据从数据湖同步或复制到数据仓库,进而产生数据的重复拷贝或重复ETL,这可能会造成数据质量问题和不必要的资源浪费。

最后,基于对象存储这样的存储解决方案,需要提供更多的高级特性支持,例如ACID事务、多版本数据索引和零拷贝克隆等。这些特性对于确保数据一致性、提高数据查询效率和减少数据存储成本都是非常重要的。

四、什么是「湖仓一体」?

湖仓一体的设计理念包括几个关键因素。首先,它需要采用一个统一开放的底层文件格式,例如Parquet、ORC等,这些都是业界广泛认可的高效存储格式。这种统一的文件格式有助于确保数据的高效存储和查询。

其次,湖仓一体还需要一个开放的存储层,这包括如Delta Lake、Iceberg、Hudi等开源组件。这些组件提供了额外的数据管理功能,如事务支持、版本控制等,使数据湖更加健壮和可靠。

第三,湖仓一体需要与多种计算引擎进行集成。无论是Spark、Presto还是其他商业计算引擎,都应该能够无缝地与湖仓一体的存储层结合,为用户提供多样化的计算和查询选项。

最后,湖仓一体还需要与深度学习框架进行紧密集成。以Uber开源的Petastorm项目为例,Petastorm为TensorFlow、PyTorch等深度学习框架提供了Parquet格式的读写支持。这种集成能力使得深度学习任务可以直接从数据湖中读取数据,极大地提高了数据处理的效率和灵活性。

总体而言,湖仓一体的目标是构建一个集统一文件格式、开放存储层、多样化计算引擎和深度学习框架于一体的,用于数据处理和分析的大数据平台,以满足现代大数据应用的多样化需求。

3b9aeae315a894044c1ae50409007e93.jpeg

五、结语

在大数据领域的持续发展中,数据存储和处理架构也经历了从数据仓库到数据湖,再到湖仓一体的演进。湖仓一体旨在通过统一的开放文件格式、灵活的存储层、多样的计算引擎集成以及与深度学习框架的紧密结合,构建一个更加高效、灵活和功能丰富的数据处理和分析平台。对于上层的数据应用与分析工具FineBI而言,湖仓一体架构提供了一个更加完善和集成的数据管理解决方案,使FineBI能够更加高效地连接、查询和分析数据,为企业用户提供更加强大和灵活的数据分析能力。

湖仓一体的出现不仅弥补了数据湖架构中的不足,还为企业提供了一个更加完整和集成的数据管理解决方案。未来,随着大数据和机器学习技术的进一步发展,湖仓一体架构有望成为企业数据管理的主流模式,同时为FineBI这样的数据应用与分析工具提供了更广阔的应用场景和发展空间,为企业在数据驱动决策和创新应用方面提供强大的支持。

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

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

相关文章

Unity DOTS中的baking(四)blob assets

Unity DOTS中的baking(四)blob assets blob assets表示不可变的二进制数据,在运行时也不会发生更改。由于blob assets是只读的,这意味着可以安全地并行访问它们。此外,blob assets仅限于使用非托管类型,这意…

C++引用学习day2

思维导图 定义一个矩形类(Rectangle),包含私有成员:长(length)、宽(width), 定义成员函数: 设置长度:void set_l(int l) 设置宽度:void set_w(int w) 获取长度&#…

STL和泛型编程

STL和泛型编程 一.STL六大部件"前开后闭"区间 二.容器(1)顺序容器1.array源码剖析 2.vector源码剖析vector的迭代器 3.list源码剖析迭代器的设计规则关于重载操作符关于重载->和*操作符 4.forward_list源码剖析 5.deque源码剖析底层数据结构操作实现deque的设计de…

设置定时闹钟,语音播报

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTime>//时间类 #include<QtTextToSpeech>//文本转语音类 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:W…

【MATLAB源码-第13期】基于matlab的4ASK的误码率BER和误符号率SER理论和实际对比仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 "4ASK" 是一种数字调制技术&#xff0c;代表4级振幅移移键控&#xff08;4-Level Amplitude Shift Keying&#xff09;调制。它是一种数字通信中常用的调制方式之一&#xff0c;用于将数字信号转换为模拟信号以便传…

分享全栈开发医疗小程序 -带源码课件(课件无解压密码),自行速度保存

课程介绍 分享全栈开发医疗小程序 -带源码课件&#xff08;课件无解压密码&#xff09;&#xff0c;自行速度保存&#xff01;看到好多坛友都在求SpringBoot2.X Vue UniAPP&#xff0c;全栈开发医疗小程序 - 带源码课件&#xff0c;我看了一下&#xff0c;要么链接过期&…

GPT2从放弃到入门(四)

引言 体验地址&#xff1a;https://huggingface.co/spaces/greyfoss/gpt2-chatbot 上篇文章我们通过Gradio作为前端轻松地连接到训练好的Chatbot&#xff0c;本文介绍如何分享你创建好的模型给你的朋友。 当你训练好的模型推送到Huggingface Hub上后&#xff0c;其实还可以进一…

大数据Hadoop生态圈体系视频课程

课程介绍 熟悉大数据概念&#xff0c;明确大数据职位都有哪些&#xff1b;熟悉Hadoop生态系统都有哪些组件&#xff1b;学习Hadoop生态环境架构&#xff0c;了解分布式集群优势&#xff1b;动手操作Hbase的例子&#xff0c;成功部署伪分布式集群&#xff1b;动手Hadoop安装和配…

codeforces div4 Double Strings

#include<iostream> #include<algorithm> #include<cstring> #include<map> using namespace std; int T, n; string s[900005]; map<string, int>mm;//存放每一个字符串是否出现过 int main() {cin >> T;while (T--){mm.clear();//每次清…

服务端测试开发必备技能:Mock测试

什么是mock测试 Mock 测试就是在测试活动中&#xff0c;对于某些不容易构造或者不容易获取的数据/场景&#xff0c;用一个Mock对象来创建以便测试的测试方法。 Mock测试常见场景 无法控制第三方系统接口的返回&#xff0c;返回的数据不满足要求依赖的接口还未开发完成&#…

linux 离线安装 dotnet tool

1. 在官网下载对应的nuget包,比如: dotnet-dump NuGet Gallery | dotnet-dump 3.1.57502 注意文件名称: dotnet-dump.3.1.57502.nupkg 我犯了一个错误,下载比较慢,然后通过迅雷来下载,结果没有后缀名称. 2. 然后拷贝到linux上,比如: 拷贝到dp文件夹下, 在dp文件夹上级执行命…

mfc140.dll丢失的解决方法,快速修复win10系统dll问题

在Windows 10操作系统环境下&#xff0c;如果发现系统中关键的动态链接库文件mfc140.dll丢失&#xff0c;可能会引发一系列运行问题。mfc140.dll是Microsoft Foundation Class Library&#xff08;微软基础类库&#xff09;的重要组成部分&#xff0c;对于许多基于该库开发的应…

代码随想录算法训练营第三十五天|860. 柠檬水找零,406. 根据身高重建队列,452. 用最少数量的箭引爆气球

860. 柠檬水找零 题目 在柠檬水摊上&#xff0c;每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品&#xff0c;&#xff08;按账单 bills 支付的顺序&#xff09;一次购买一杯。 每位顾客只买一杯柠檬水&#xff0c;然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾…

【干货】无源滤波器设计讲解,工作原理+设计步骤

今天给大家分享的是&#xff1a;无源模拟滤波器针对很多入门小白不懂滤波器设计&#xff0c;一些老工程师上班很多年有的也不懂得总结知识点&#xff0c;以及想学习不知道怎么系统学习的这一类人群&#xff0c;前方知识点来袭&#xff0c;请君放心食用~ 在信号处理领域&#x…

java的一些内部小知识,类与对象的关系

目录 1. java2. 类与对象的关系 1. java test.java ---- javac --> Test.class ---- java-----> 内存 ----> cpu 源文件 二进制代码 所有正在运行的软件都在内存中有自己的内存空间 jvm —>运行java程序的&#xff0c;java虚拟机 main(); // 内部调用run()run(i…

苍穹外卖项目笔记

软件开发流程 需求分析&#xff1a;说明书和原型 设计&#xff1a;UI&#xff0c;数据库&#xff0c;接口设计 编码&#xff1a;项目代码&#xff0c;单元测试 测试&#xff1a;测试用例&#xff0c;测试报告 上线运维&#xff1a;软件环境安装&#xff0c;配置 软件环境…

Mybatis中条件传入多个参数时,如何处理

entity&#xff1a; Data AllArgsConstructor NoArgsConstructor public class User {private Integer id;private String username;private String password;private String phone;private String address; }dao接口&#xff1a; public interface UserDAO {List<User>…

基于vue+element+springboot+uniapp开发的智慧城管源码,java智慧城市管理综合执法系统源码

智慧城管源码&#xff0c;智慧执法&#xff0c;数字化城市管理综合执法系统源码 智慧城管系统充分利用物联网、云计算、信息融合、网络通讯、数据分析与挖掘等技术&#xff0c;对城市管理进行全方位覆盖。它通过建立城市综合管理平台&#xff0c;将城市的信息和管理资源有机结合…

错误 LNK1104 无法打开文件“mfc140.lib”

如图&#xff0c;编译一个别人已有的项目&#xff0c;我的编译报错为&#xff1a; 但是我所有文件夹全局搜索了一下&#xff0c;这个文件是存在的。但是当前项目访问不到。 更改方法&#xff1a;项目->属性->配置属性->VC目录->库目录 全局搜索找到mfc140.lib的…

【LeetCode 算法专题突破】定长滑动窗口

文章目录 前言[1456. 定长子串中元音的最大数目](https://leetcode.cn/problems/maximum-number-of-vowels-in-a-substring-of-given-length/)题目描述&#xff1a;难度分1263代码与解题思路代码复盘 [2269. 找到一个数字的 K 美丽值](https://leetcode.cn/problems/find-the-k…