Lakehouse 架构下的元数据“大一统”管理深度解析

在湖仓一体(Lakehouse)出现之前,数据仓库和数据湖堪称数据领域的两大“顶流”。打个比方,要是把数据仓库比作一座大型图书馆,那其中的数据就如同馆内藏书,需要按照规范放好,借阅者只需依照类别索引,便能精准找到想要的信息。反观数据湖,更像是一个大型仓库,海纳百川,可以存储任何形式和任何格式的原始数据。 然而,这两大传统模式各有掣肘。数据湖擅长存储大规模、非结构化数据,但缺乏数据治理和查询优化能力,导致数据“沼泽”现象频发;数据仓库可以提供强大的分析能力,但其扩展性和灵活性较差,尤其在处理非结构化数据时,表现不如数据湖。这些局限性导致了企业数据孤岛林立、重复管理耗时费力等问题,愈发难以契合现代企业在海量、多元数据浪潮冲击下的数智需求。 市场和行业都在呼唤着新一代数据架构模式的破局与革新,从传统数仓到结合数据湖和数据仓库两层架构,再到构建高性能计算引擎,直接在数据湖上进行数据探查以及分析。 file 无外乎都在表明新的数据架构被期望具备以下功能: 能够提供ACID支持,支持插入/更新操作 具有高度的可扩展性,经济高效且灵活 优秀的BI性能以及数据仓库的访问控制机制 能够处理所有数据格式并支持多种用例的统一平台 而满足这些功能点的便是新的数据架构——湖仓一体Lakehouse

01什么是Lakehouse

Lakehouse本质上是一个带有附加事物层和高性能计算引擎的数据湖,从结构上来说可以拆成两个层面: file 1、带有附加事物特性的存储层 这一层主要由三个组件组成:开放的表格式、开发的文件格式和云存储。 file

  • 开放的表格式 可以理解为是提供类似数据仓库ACID数据和其他特性的元数据层(Metadata APIs),为了保持一致性,它提供了与事务相关的元数据。 目前开源社区比较流行的湖表格式有Apache Paimon、Apache Iceberg、Apache Hudi以及DeltaLake。每种表格式所侧重的能力不一样,用户可根据自身业务特性自由选择。
  • 开放的文件格式 数据平台可以将不同文件格式的数据存储在云存储中,对于分析平台,最广泛采用的有Apache Parquet、Apache ORC、Apache AVRO。这几种都是开源的列式存储格式,很多存储和处理引擎都会兼容这几种存储格式。
  • 云存储 云存储服务,如AWS的S3或阿里云的OSS对象存储,提供了高可用性、持久性和可扩展性等特性,是构建数据湖和Lakehouse平台的理想选择。 公司也可以使用本地 HDFS 存储来实施 Lakehouse,但考虑到成本低、计算与存储分离、易于扩展等特点,建议使用云对象存储作为实现 Lakehouse 的底层基础设施。
  • 2、高性能的计算引擎层* 开放性,以及可由任何兼容处理引擎直接访问、或查询的能力是Lakehouse架构的主要优点之一,它不需要任何特定的专有引擎来运行BI以及Ad-hoc。这些引擎可以是开源的,比如Spark、Trino或者Presto;也可以是商业查询引擎,比如Starrocks以及selectDB。

    02为什么要追求元数据的“大一统”

    根据上文所述,Lakehouse架构采用了一种“开放”的方法来构建数据平台,允许我们自由选择开源的数据格式和计算引擎。与传统数据仓库相比,后者通常将计算与存储紧密绑定,这种设计虽然适用于特定场景下的数据处理,但面对海量数据时,容易出现错误且实施成本高昂。此外,由于其结构较为固定,当需要对大量数据进行处理或分析时,灵活性差,构建成本溢出。相比之下,Lakehouse架构可以使用与底层存储格式兼容的任何分布式计算引擎,在灵活性和兼容性方面有明显优势。 当然,“开放”带来灵活性的同时,也带来了其他的诸如跨查询引擎等互操作性引起的一些问题:
  • 1、多计算引擎间Catalog元数据难以管理* 企业用户通常会根据业务需求选择不同的计算引擎来处理和分析数据,而每个引擎都有自己的 catalog 元数据管理系统。想象一个简单的场景,对于同一个数据源下的同一张表,用户可能先用 Flink 完成数据采集,然后再用 Trino 或 Spark 来分析这些数据。这样一来,用户就不得不在每个计算引擎里重复创建 catalog 实例并注册表。随着数据源和表的数量增加,这种重复操作会变得越来越麻烦,时间和成本都会增加。而更糟糕的是,人工操作难免会出错,不同计算引擎之间的“catalog”元数据一致性也没法保证。
  • 2、不同标准下的湖表元数据格式引起的“数据孤岛”效应* 如今,各种开源湖表格式层出不穷,每种表格式都有其独特的侧重点和与相关计算引擎的适配特性。比如,HUDI 强调高性能的实时写入,而 Iceberg 则侧重于数据分析。用户会根据不同的业务场景,选择与当前计算引擎适配度较高的表格式,以便更高效地实现业务需求。不同表格式在数据量暴增的情况下带来的数据存储成本和管理难度也在成倍增加,“数据孤岛”的问题变得越来越突出。

    03利用DataLake实现元数据统一

    DataLake是袋鼠云自研的,开放、一站式的湖仓一体管理工具,旨在帮助企业快速完成湖仓构建,实现“一键式”入湖,并通过对湖表进行统一治理,达到降本增效的目的,实现数据价值最大化。 file
  • 1、数据处理层* 从数据架构层面来讲,DataLake集成了袋鼠云基于开源二开后的Trino/Flink/Spark组件作为湖仓架构的数据处理层, 将数据的入湖效率大幅度提升,同时基于颠覆传统“insert-overwrite”模式的增量计算数据处理方式,来提高运行任务的效率,并降低不必要的资源开销。 file
  • 2、数据存储层* 在构建带有附加事务层的数据存储层时,DataLake采用了Paimon+ORC+HDFS/S3这样一套组合。 选择Paimon之前,我们进行了广泛的对比评估。从功能和性能方面来看,需要一个能够支持大批量实时入湖更新、分析性能不那么差且易于拓展的表格式。尽管Hudi提供了丰富的功能选项,但其使用过程相对复杂。在数据实时入湖方面,对比了云栖大会上给出的Paimon和Hudi的入湖更新性能: file 如图所示,针对大约5亿条记录的入湖操作,在相似配置及相同索引条件下进行测试,结果显示Paimon在吞吐量或耗时上达到了Hudi的四倍效率;而在查询性能上,Paimon的表现更是Hudi的10到20倍。此外,我们还观察到了Hudi在面对较小内存时无法读取数据的问题,深入分析后发现Hudi MOR是纯Append,虽然后台有compaction,也不会等待该过程完成,导致测试中Hudi的Compaction仅部分完成,进而影响了读取性能。 基于此,我们也做了图右的benchmark,就是1亿条数据的CopyOnWrite,来测试CopyOnWrite情况下的 compaction 性能。结果表明,无论是2分钟、1分钟还是30秒间隔,Paimon都表现出显著优势,性能差距达到12倍之多。特别是在30秒间隔下,Hudi无法正常运行,而Paimon仍能顺利完成任务。 另外,虽然Iceberg具有强大的扩展能力,并为其他计算引擎提供了许多优化接口,但它目前主要聚焦于离线处理场景,侧重于离线数据湖的分析处理。相比之下,Paimon在实时数据处理场景中展现了更优的整体表现。
  • 3、Catalog元数据统一管理* “UnitMetadata Service”是DataLake的Catalog表管理服务,本质上是对底层数据源实体在元数据层面的逻辑关系进行抽象的逻辑统一层。 在进行湖仓构建时,UnitMetadata Service会将构建的元数据信息缓存并持久化,随后自动根据当前服务中元数据的逻辑关系分别在对应计算引擎(通过数栈进行绑定的计算引擎)中建立与底层数据源实体的元数据的关系映射,以此来屏蔽不同计算引擎带来的Catalog难以管理的问题,同时,作为Catalog表管理的统一入口,规范化湖仓构建方式,避免同一Entry在引擎切换后进行查询带来的元数据不一致问题。 file
  • 4、湖表格式元数据统一* “UnitTableForm Service”是DataLake的湖表元数据统一服务。Paimon作为与DataLake绑定的湖表格式,UnitTableForm能够使得通过其他湖表格式摄取的表转换为Paimon表,并支持其他湖表格式之间的元数据一键互转。这样用户无需复制或者移动湖表对应的底层数据文件,大幅度减少了数据的存储成本的同时还增强了与外部的“互操作性”,使得用户根据自己的历史技术架构选择对接合适的表格式,无需被束缚。 file

    04写在最后

    实现湖表格式和Catalog元数据的统一,仅仅是DataLake在湖仓架构下“大一统”的第一步。我们的长远目标是进一步开发带有HBO的极致统一查询能力,这将极大提升数据处理效率与查询性能,为企业提供更加高效、灵活的数智解决方案,帮助企业更好地利用数据资源,加速业务增长,在竞争激烈的市场环境中保持领先优势。 感兴趣的朋友可以点击DataLake了解更多关于详细内容。

参考文献: What is Lakehouse? 新型大数据架构之湖仓一体(Lakehouse)架构特性说明——Lakehouse 架构(一)

《数据资产管理白皮书》下载地址:https://www.dtstack.com/resources/1073/?src=szsm

《行业指标体系白皮书》下载地址:https://www.dtstack.com/resources/1057/?src=szsm

《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001/?src=szsm

《数栈V6.0产品白皮书》下载地址:https://www.dtstack.com/resources/1004/?src=szsm

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szsm

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack

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

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

相关文章

【AI系统】MobileVit 系列

MobileVit 系列 自 Vision Transformer 出现之后,人们发现 Transformer 也可以应用在计算机视觉领域,并且效果还是非常不错的。但是基于 Transformer 的网络模型通常具有数十亿或数百亿个参数,这使得它们的模型文件非常大,不仅占…

投稿指南——论文检索报告如何开具

【SciencePub学术】论文发表被SCI数据库收录之后,作为学术成果上报时,一般需要提供论文检索报告,SCI论文检索报告怎么开?在哪开?要注意什么?这些问题,本期小编给大家解答一下。 Q 开具检索报告…

Jenkins 推送报错 - SSH 密钥失效

目录 问题描述报错原因解决方案 问题描述 jenkins 构建完毕后,将构建好的 jar 包推送至远端服务器时,Deploy 阶段报如下错误: sshpass -p **** scp -o StrictHostKeyCheckingno -P 22 -r /data/jenkins/workspace/TAI/TAI/AllCam-tai-cloud/…

《ODIN: A Single Model for 2D and 3D Segmentation》CVPR2024

斯坦福和微软: 代码链接:ODIN: A Single Model For 2D and 3D Perception 论文链接:2401.02416 摘要 这篇论文介绍了ODIN(Omni-Dimensional INstance segmentation),一个能够同时处理2D RGB图像和3D点云…

三、代码管理-Git

文章目录 前言一、Git1. Git 与 SVN 区别2. Git 入门3. 客户端工具4. 主流Git仓库 二、GitLab1. 介绍2. 适合的场景 二、GitHub1. 介绍2. 适合的场景 三、Gitee1. 介绍2. 适合的场景 四、GitCode1. 介绍2. 适合的场景 五、总结 前言 代码托管‌ Git作为目前最为流行的版本控制…

npm, yarn, pnpm之间的区别

前言 在现代化的开发中,一个人可能同时开发多个项目,安装的项目越来越多,所随之安装的依赖包也越来越臃肿,而且有时候所安装的速度也很慢,甚至会安装失败。 因此我们就需要去了解一下,我们的包管理器&#…

vscode上传本地文件到服务器

vscode上传本地文件到服务器 首先下载插件SFTP,我们通过ftp进行文件传输 VScode打开要传输的文件 使用快捷键 ctrlshiftP 打开搜索窗口,搜索SFTP 点击之后vscode文件夹下会生成对应json文件 我们编辑json信息根据远程的服务器情况填写,比如…

Next.js 实战 (二):搭建 Layouts 基础排版布局

前言 等了许久,Next.js 终于迎来了 v15.x 版本,刚好 Github 上面的旧项目重构完,终于可以放心大胆地去研究 Next.js了。 搭建最新项目可以参考官方文档:Installation 最新的 Next.js 版本,使用的是 React19.x 内测版…

Java的Stirng、StringBuilder、StringJoiner

黑马程序员Java个人笔记 目录 字符串比较 比较 boolean equals boolean equalsIgnoreCase 键盘录入和定义的字符串的比较 StringBuilder 打印 ​编辑 添加元素 反转 获取长度 toString 练习 对称字符串 拼接字符串 StringJoiner 概述 ​编辑 构造方法 只有…

elasticsearch(三)

文章目录 1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法 1.3.RestAPI实现聚合1.3.1.API语法1.3.2.业务需求1.3.3.业务实现 2.自动补全2.1.拼音分词器2.2.自定义分词器2.3.自动补全查询2.4.实现酒店搜…

Python_Flask03

这篇文章主要介绍的是数据库的增删改查操作,无多余好说的。 from flask import Flask from flask_sqlalchemy import SQLAlchemy from sqlalchemy import text from flask_migrate import Migrateapp Flask(__name__)# 本地基础信息的主机名 HOSTNAME "127.0…

Hive分区值的插入

对于Hive分区表,在我们插入数据的时候需要指定对应的分区值,而这里就会涉及很多种情况。比如静态分区插入、动态分区插入、提供的分区值和分区字段类型不一致,或者提供的分区值是NULL的情况,下面我们依次来展现下不同情况下的表现…

安达发|工业镜头APS高级排产的关键约束

工业镜头生产具有其特定的复杂性,如技术要求高、生产周期长、工序多等特点。在应用APS系统进行高级排产时,需要考虑以下关键约束: 1. 技术与质量约束 - 精度要求:工业镜头对精度的要求极高,这直接影响到排产计划中机加…

【SKFramework框架核心模块】3-9、资源模块

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【Unity3D框架】SKFramework框架完全教程《全…

Swing中密码框组件

一、介绍 密码框(JPasswordField)与文本框的定义和用法基本相同,唯一不同的是密码框将用户输入的字符串以某种符号进行加密。密码框对象是通过javax.swing.JPasswordField类创建的。 二、常用构造方法 1、public JPasswordField() 2、pub…

SpringMVC ——(1)

1.SpringMVC请求流程 1.1 SpringMVC请求处理流程分析 Spring MVC框架也是⼀个基于请求驱动的Web框架,并且使⽤了前端控制器模式(是⽤来提供⼀个集中的请求处理机制,所有的请求都将由⼀个单⼀的处理程序处理来进⾏设计,再根据请求…

【英一】1998年

阅读1 suffering. 苦难at the mercy of. 完全受...的支配do ones bidding. 服从某人threaten to. 可能...(发生不好的事情)do more harm than good. 弊大于利strive to. 争取,努力assert. 主张cement. 巩固bid for. (尤指许下诺言)企图获得&…

BT.1120视频传输协议标准介绍

1.BT.1120 BT.656 协议主要是针对 PAL、NTSC下的标清视频。随着高清视频的发展的需要,又推出了 BT.1120 标准,它与 BT656 有许多类似的地方,不同点在于时钟频率更高了,更加适合高清视频的传输,隔行传输和逐行传输兼备。…

RabbitMQ学习-Eleven

SpringBoot中RabbitMQ的消息确认和Return机制 1.再application.yml文件中开启消息确认机制和return机制 spring:rabbitmq:publisher-confirm-type: simplepublisher-returns: true 2.创建confirm和return监听 // MsgConfirmAndReturn.java 中的代码片段Component public cla…

GAMES101 完结篇(笔记和作业)

写在前面 我已经把笔记和作业代码放在了GitHub上,欢迎访问GAMES101笔记及作业 (github.com),如果对你有帮助,欢迎fork or star 下面我想简单介绍一下这里面的东西 Homework Homework文件夹里有0~8的作业框架,参考的其他大佬的代…