现在的湖仓一体像是个伪命题

news2025/1/18 10:07:23

文章目录

    • 开放的计算引擎SPL助力湖仓一体
      • 开放且完善的计算能力
        • 多数据源混合计算
        • 文件计算支持
        • 完善的计算能力
        • 直接访问源数据
      • 数据整理后的高性能计算
    • SPL资料

从一体机、超融合到云计算、HTAP,我们不断尝试将多种应用场景融合在一起并试图通过一种技术来解决一类问题,借以达到使用简单高效的目标。现在很热的湖仓一体(Lakehouse)也一样,如果能将数据湖和数据仓库融合在一起就可以同时发挥二者的价值。

数据湖和数据仓库一直以来都有十分密切的联系但同时存在显著的差异。数据湖更注重原始信息的保留,将原始数据“原汁原味”地保存下来是数据湖的首要目标。但原始数据中有很多垃圾数据,原样保留就意味着垃圾数据都要存进数据湖?没错,数据湖就是这样一个数据垃圾场,不管什么样的数据一股脑存进去再说。所以,数据湖面临的第一个问题是海量(垃圾)数据存储问题。

得益于现代存储技术的长足进步,现在海量数据存储的成本很低(如分布式文件系统)完全可以满足数据湖存储的需要。但数据光存起来还不行,还要使用也就是计算才能发挥价值。数据湖数据五花八门,各种类型的数据处理方式也不一样。其中最核心也最重要的是结构化数据处理,无论是历史沉淀还是业务新增,结构化数据处理仍然是重中之重,很多半结构化和非结构化数据计算最后也会转到结构化数据计算上。不过很遗憾,由于数据湖的存储(文件系统)本身没有计算能力,没法在数据湖上直接处理数据,想要处理这些数据还需要借助其他技术(如数据仓库),“能存不能算”是目前数据湖面临的主要问题。

数据仓库就刚好相反了,数据仓库基于SQL体系往往具备很强的结构化数据计算能力,但原始数据需要经过一系列清洗转换、深度组织满足数据库约束才能入仓,这个过程会伴随大量原始信息丢失甚至数据粒度变粗无法获得更低粒度的数据价值,而且数据仓库是高度面向主题的,为一个或某几个主题服务,主题外的数据并非数据仓库关注的目标,这会导致数据利用范围相对狭小,无法像数据湖一样探索全量、未知的数据价值,更无法像数据湖一样存储海量原始数据,相对数据湖来说数据仓库“能算不能存”。

就数据流向来看,数据仓库的数据可以基于数据湖整理,那么一个很自然的想法就是将数据湖和数据仓库的融合在一起,实现“既能存又能算”,也就是所谓的“湖仓一体”。

那么现在实现的咋样呢?

简单粗暴的办法是在数据湖上开放数据访问权限供数据仓库实时调用(所谓的实时是相对以前需要定时将数据湖中数据批量ETL到数据仓库来说的,实际操作中仍然有一定延时),二者物理上仍分存两处,通过高速网络进行数据交互,由于具备了一定的“实时”数据湖数据处理能力,因此现在把这种实现(更多是架构上的)称为湖仓一体。

就这样?这也能叫湖仓一体?

那你看看,只要你(喊的)不尴尬,尴尬的就是别人(听的)。

那数据仓库咋读数据湖的数据呢?常见的做法是在数据仓库中创建外部表/schema映射RDB的表或schema,或者hive的metastore,这个过程与传统的关系数据库通过外部表方式访问外部数据的方式是一样的,虽然保留了元数据信息,但缺点却十分明显。这要求数据湖有相应关系模型下的表和schema映射,数据仍需要整理才能使用,而且可利用的数据源种类减少(如无法直接基于NoSQL、文本、Webservice做映射)。同时即使数据湖中有其他可供计算的数据源(如RDB)数据仓库在计算(如分组汇总)时通常还会将数据拉到本地才能计算,产生了大量的数据传输成本导致性能下降,问题多多。

现在的湖仓一体除了能“实时”数据交互以外,原来批量定时整理数据的通道仍然保留,这样可以将数据湖数据整理好存入数仓实施本地计算,当然这已经跟湖仓一体没太大关系了,没有“一体”之前也是这么做的。

不管怎样,无论通过传统的ETL将数据由湖到仓,还是通过外部映射“实时”数据由湖到仓,数据湖和数据仓库几乎没有任何变化(只是提升了由湖到仓的数据传输频率,还要符合很多条件),物理仍然上分存两处,湖是湖,仓是仓, 二者根本没有一体! 不仅数据多样性和效率问题没得到根本解决(灵活性不足),数据湖的“脏乱差”数据也还需要整理入仓才能使用(时效性很差)。通过这种方式实现的“湖仓一体”想要在数据湖上构建实时高效地数据处理能力恐怕是个笑话。

为什么会出现这种情况?

如果我们稍加思考就会发现,问题出现在数据仓库上。数据库体系过于封闭缺乏开放性,数据只有入库(包括外部数据映射)才能计算。不仅如此,由于数据库上的约束,数据必须经过深度整理符合规范后才能入库,而数据湖的原始数据本身就充斥着大量“垃圾”,整理这些数据本身无可厚非,但很难响应数据湖上的实时计算需求。如果数据库具备足够的开放性,可以直接计算数据湖上未经整理的数据,甚至可以基于多种不同类型的数据源混合计算,同时提供高性能机制保证计算效率那湖仓一体就可以很好实现了。不过很遗憾,数据库没法完成这个目标。

但开源集算器SPL可以。

开放的计算引擎SPL助力湖仓一体

开源SPL就是这样一个可应用在数据湖中提供开放计算能力的结构化数据计算引擎。可以针对数据湖的原始数据直接计算,没有约束,无需“入库”。同时SPL还提供了多样性数据源混合计算的能力,无论数据湖使用统一文件系统构建,还是基于多样性数据源(RDB、NoSQL、LocalFile、Webservice)使用SPL都可以直接混合计算,快速输出数据湖价值。此外,SPL还提供了高性能文件存储(数仓的存储功能),在SPL实时计算的同时,整理数据可以从容不迫地进行,将原始数据整理到SPL存储中可以获得更高性能。这里尤其注意的是,使用SPL存储整理后数据仍然存放在文件系统中,理论上可以与数据湖存放一处,这样可以实现真正意义的湖仓一体。

在整个结构中,SPL可以直接基于数据湖统一存储计算,也可以对接数据湖中的多样性数据源,甚至可以直接读取外部的生产数据源,这样不仅实现了数据湖上的实时计算,在某些数据时效性要求高的场景(当数据还没入湖的时候就要使用),通过SPL还可以对接实时数据源计算,数据时效性更高。

原来将从数据湖整理到数据仓库的工作仍可进行,将原始数据ETL到SPL高性能存储中可以获得更高的计算效率,同时采用文件系统存储,数据可以分布在SPL服务器(存储)上,也可以继续使用数据湖的统一文件存储,即通过SPL完全接管原来数据仓库的工作,这样在一个体系内就实现了湖仓一体。

下面我们具体来看一下SPL的这些能力。

开放且完善的计算能力

多数据源混合计算

SPL支持多种数据源,RDB、NoSQL、JSON/XML、CSV、Webservice等都可以连接,并进行混合计算。这样数据湖存储的各类原始数据就可以直接利用起来,无需整理就可以发挥数据价值,节省“入库”动作,保证数据使用的灵活与高效性,可以覆盖更广泛的业务需求。

有了这个能力以后,数据湖构建之初就能为应用提供数据服务,而不用等原来数据整理、入库、建模等一系列长链路长周期过程完成后才能服务。而且这种方式更加灵活,可以根据业务需要提供实时响应。

文件计算支持

特别地,SPL对文件的很好支持使得文件也拥有强计算能力,这样将数据湖数据存储在文件系统中也可以获得与数据库接近甚至超越的计算能力。SPL不仅能计算文本,还支持JSON等多层数据格式处理,这样NoSQL以及RESTful等数据不用转换就可以直接使用,非常方便。

A
1=json(file("/data/EO.json").read())
2=A1.conj(Orders)
3=A2.select(Amount>1000 && Amount<=3000 && like@c(Client,"*s*"))条件过滤
4=A2.groups(year(OrderDate);sum(Amount))分组汇总
5=A1.new(Name,Gender,Dept,Orders.OrderID,Orders.Client,Orders.Client,Orders.SellerId,Orders.Amount,Orders.OrderDate) 关联计算

完善的计算能力

SPL提供了完善的计算能力,基于离散数据集(而非关系代数)模型可以获得与SQL一样的完备计算性,同时在SPL敏捷语法与过程计算支持下数据处理比SQL更简单。

SPL丰富的计算类库

这样数据湖就完全拥有了数据仓库的计算能力,实现了湖中有仓的第一步

直接访问源数据

再将SPL的开放能力延伸一下。如果数据源与数据湖的数据同步没完成但还需要使用这部分数据怎么办?原来就只能等着了,现在有了SPL我们甚至可以直接对接数据源进行计算,或者与数据湖中已有数据进行混合计算都可以。逻辑上可以把数据源作为数据湖的一部分使用,这样可以获得更高的灵活性。

数据整理后的高性能计算

SPL除了自身拥有完善的强计算能力,同时还提供了基于文件的高性能存储。将原始数据ETL后存储在SPL存储中可以获得更高的计算性能,同时文件系统具备使用灵活、易于并行等特性。提供了数据存储能力后,就完成了湖中有仓的第二步,形成新的开放灵活的数据仓库形式。

目前SPL提供了两种高性能文件存储类型:集文件和组表。集文件采用了压缩技术(占用空间更小读取更快),存储了数据类型(无需解析数据类型读取更快),支持可追加数据的倍增分段机制,利用分段策略很容易实现并行计算,保证计算性能。组表支持列式存储,在参与计算的列数(字段)较少时会有巨大优势。组表上还实现了minmax索引,同时支持倍增分段,这样不仅能享受到列存的优势,也更容易并行提升计算性能。

SPL也很容易实施并行计算,发挥多CPU的优势。SPL有很多计算函数都提供并行机制,如文件读取、过滤、排序只要增加一个@m选项就可以自动实施并行计算,同时也可以显示编写并行程序,通过多线程并行提升计算性能。

特别地,SPL能支持很多SQL无法支持的高性能算法。比如常见的TopN运算,在SPL中TopN被理解为聚合运算,这样可以将高复杂度的排序转换成低复杂度的聚合运算,而且很还能扩展应用范围。

A
1=file(“data.ctx”).create().cursor()
2=A1.groups(;top(10,amount))金额在前10名的订单
3=A1.groups(area;top(10,amount))每个地区金额在前10名的订单

这里的语句中没有排序字样,也不会产生大排序的动作,在全集还是分组中计算TopN的语法基本一致,而且都会有较高的性能,类似的算法在SPL中还有很多。

通过这些机制,SPL可以跑出超过传统数据仓库数量级的计算性能。在数据湖中全面实现一体化数仓可不是说说而已。

更进一步,使用SPL还可以针对整理好的数据和未整理原始数据进行混合计算充分发挥各种类型的数据价值,而不用等所有数据整理好才能计算使用,不仅数据湖的灵活性得以充分扩展,还具备实时数据仓库的功能,这就完成了湖中有仓的第三步,兼顾了灵活性与高性能。

通过以上三步不仅可以改善数据湖的建设路径(原来需要先导入、再整理、再使用),数据整理与数据使用可以同时进行,循序渐进地建设数据湖,还在建设数据湖的过程中就完善了数据仓库,让数据湖也拥有强计算能力,实现真正意义的湖仓一体,这才是解锁Lakehouse的正确姿势。

SPL资料

  • SPL下载
  • SPL源代码

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

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

相关文章

AWS Lambda从入门到精通

这里写自定义目录标题AWS Lambda从入门到精通介绍调用AWS Lambda的函数请求响应&#xff08;RequestResponse&#xff09;式调用采用请求响应的同步方式以函数作为应用程序的后端后端应用程序的用例和需求AWS Lambda从入门到精通 Amazon发布AWS Lambda服务&#xff0c;云计算的…

Windows配置python3环境变量解决无法识别pip指令报错

Python官网下载 Python官网下载地址 在Windows系统中&#xff0c;推荐下载.msi或.exe安装包。需要注意&#xff0c;python3和python2的语法有很大区别&#xff0c;按照实际情况下载对应版本。本次安装的是Python 3.10.8稳定版。 环境变量配置 安装过程 如果是以.exe安装包方…

机器学习中的数学基础(三):随机变量

机器学习中的数学基础&#xff08;三&#xff09;&#xff1a;随机变量3 随机变量3.1 离散型随机变量3.2 连续型随机变量3.3 简单随机抽样3.4 似然函数3.5 极大似然估计在看西瓜书的时候有些地方的数学推导&#xff08;尤其是概率论的似然、各种分布&#xff09;让我很懵逼&…

【学习笔记46】JavaScript购物车的实现

一、案例效果 1、将通过数据重构页面 查询数据, 渲染页面 2、全选 选中全选按钮后, 根据全选按钮的选中状态, 修改所有商品的选中状态重新渲染视图 3、清空购物车 清空商品数据重新渲染视图 4、结算 找到所有选中的商品计算所有选中商品各自的总价计算所有选中商品的总价…

【MySQL】MVCC原理分析 + 源码解读 -- 必须说透

文章目录前言一、MVCC 介绍二、MySQL MVCC 介绍三、MySQL MVCC实现原理源码分析3.1 隐式字段源码验证3.2 undo logundo log格式undo log源码验证写insert undo log源码写update undo log源码写undo log源码roll_ptr是如何指向insert undo log的?roll_ptr是如何指向update undo…

Thymeleaf模板

Thymeleaf可用于前后端分离&#xff0c; 下图&#xff0c;value"aa"&#xff0c; 在本地静态资源可以改变值&#xff0c;但是在web端不可以 前端可以在本地测试&#xff0c;有数据了显示数据 所以前后端分离 th属性 常用th属性解读html有的属性&#xff0c;Thymel…

集合框架----源码解读LinkedList篇

1.LinkedList官方介绍 双链表实现的list和Deque接口。实现所有可选的列表操作&#xff0c;并允许所有元素(包括null)。 所有的操作都按照双链表的预期执行。索引到列表中的操作将从列表的开始或结束遍历列表&#xff0c;以更接近指定索引的为准。 注意&#xff0c;这个实现不是…

全球价值链GVC总出口分解(2011-2014年)

1、数据来源&#xff1a;&#xff29;&#xff23;&#xff29;&#xff2f;数据库 2、时间跨度&#xff1a;2011-2014年 3、区域范围&#xff1a;世界 4、指标说明&#xff1a; 全球价值链分析(Global Value Chain analysis&#xff0c;简称GVC分析)为解决传统贸易统计中…

数据库 1.关系

从关系开始&#xff1a; Table的严格定义&#xff1a; 域就是&#xff1a;学生表{名字&#xff08;char(20),学号(int20)&#xff09;}里面的char20,int20,是用来标记列的数据类型&#xff0c;或者说取值范围的。这个取值范围有一个大小&#xff0c;这个大小就是基数。 就是每种…

世界各国自然资源租金面板数据

1、数据来源&#xff1a;世界银行《世界发展指标数据库》 2、时间跨度&#xff1a;1970-2018年 3、区域范围&#xff1a;全球 4、指标说明&#xff1a; 自然资源租金总额是石油租金、天然气租金、煤炭&#xff08;硬煤和软煤&#xff09;租金、矿产租金和森林租金之和。 …

11.20 至 11.27 五道典型题记录: 贪心 | 应用题 | 脑筋急转弯 | 区间问题 | 双指针

11.20 至 11.27 五道典型题记录&#xff1a; 贪心 | 应用题 | 脑筋急转弯 | 区间问题 | 双指针 松懈了最近&#xff0c;要时刻保持警醒啊&#xff01;学习不能停&#xff0c;说那么多的借口不如花一些心思去学一些知识&#xff0c;之所以学到的内容不成体系&#xff0c;一方面就…

【Java集合】集合是什么?为什么要用集合?

> 集合是什么&#xff1f;为什么要用集合&#xff1f; 保存数据会经常使用到数组&#xff0c;但数组存在以下几个缺陷: 长度开始时必须指定&#xff0c;且一旦指定&#xff0c;不能更改&#xff1b;保存的必须为同一类型的元素&#xff1b;使用数组进行增加元素的步骤比较麻…

MySQL 8.0 Data Dictionary显示

数据字典 对于MySQL的系统库都不会陌生&#xff0c;因为是基本框架&#xff0c;支撑着MySQL有效运行。这些系统库提供诸多功能&#xff0c;如&#xff1a;账号&#xff0c;表&#xff0c;存储过程&#xff0c;表空间&#xff0c;性能监控&#xff0c;配置 等基础信息。系统库目…

【前沿技术RPA】 一文了解UiPath 使用Git管理项目

&#x1f40b;作者简介&#xff1a;博主是一位.Net开发者&#xff0c;同时也是RPA和低代码平台的践行者。 &#x1f42c;个人主页&#xff1a;会敲键盘的肘子 &#x1f430;系列专栏&#xff1a;UiPath &#x1f980;专栏简介&#xff1a;UiPath在传统的RPA&#xff08;Robotic…

【soc】— spluboot校验方法

【soc】— spl/uboot校验方法 一.常规校验/外部有存储介质 针对外部有存储介质的如nandFlash&#xff0c;norFlash&#xff0c;emmc&#xff0c;Sd等&#xff0c;常用的校验方法为&#xff1a;headerspl/uboot header&#xff1a;可定义为结构体&#xff0c;内容包括&#x…

全国366个市县日度空气质量数据(2016-2020年)(AQI,SO2,NO2,PM2.5,PM10)

数据集名称&#xff1a;全国366个市县日度空气质量数据 时间范围&#xff1a;2016-2020年 相关说明&#xff1a;共收录366个市县全年全日数据&#xff0c;其中浓度为日均值&#xff0c;IAQI由浓度推算而来。IAQI为各空气质量指标对应的空气质量指数&#xff0c;用于对应AQI与…

多线程的初识

目录多线程线程的引入进程和线程的关系多线程可能存在的问题多线程程序的创建Thread创建第一个多线程程序线程的抢占式执行查看java进程中的所有线程用Thread的其他方法创建多线程实现Runnable接口使用匿名内部类&#xff0c;继承Thread使用匿名内部类实现Runnable使用Lambda表…

嵌入式Linux驱动开发笔记(未完待续。。。)

一、Git仓库用法 1、linu终端输入下面命令安装 git clone https://e.coding.net/weidongshan/linux_course/linux_basic_develop.git2、 进入到GIT仓库目录 cd /D/abc/doc_and_source_for_mcu_mpu在doc_and_source_for_mcu_mpu目录下&#xff0c;执行以下命令获得资料的最新…

【1752. 检查数组是否经排序和轮转得到】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个数组 nums 。nums 的源数组中&#xff0c;所有元素与 nums 相同&#xff0c;但按非递减顺序排列。 如果 nums 能够由源数组轮转若干位置&#xff08;包括 0 个位置&#xff09;得到&#xf…

appnium环境搭建

一、安装JDK 官网下载对应版本直接安装 二、安装Android SDK 官网下载对应版本直接安装 https://www.androiddevtools.cn/ 三、安装安卓模拟器 我使用的是夜神模拟器&#xff0c;官网下载直接安装 夜神安卓模拟器-安卓模拟器电脑版下载_安卓手游模拟器_手机模拟器_官网 …