当前位置: 首页 > news >正文

基于数据湖的多流拼接方案-HUDI概念篇

目录

一、为什么需要HUDI?

1. 传统技术选型存在哪些问题?

2. Hudi有什么优点?

基于 Hudi Payload 机制的多流拼接方案:

二、HUDI的应用场景

1. 什么场景适合使用hudi?

2. 什么场景不适合使用hudi?

三、什么是HUDI?HUDI能做什么?

1. 什么是HUDI?

2. HUDI能做什么(特性)?

四、HUDI的概念&原理

1. 概念

2. 原理

五、流批一体


一、为什么需要HUDI?

1. 传统技术选型存在哪些问题?

【离线方面】:

这种T+1延迟的结果已经无法满足商业分析同学的日常分析需求。

【实时方面】:

有些场景需要基于具有相同主键的多个数据源实时构建一个大宽表,数据源一般包括 Kafka 中的指标数据,以及 KV 数据库中的维度数据。

业务侧通常会基于实时计算引擎在流上做多个数据源的 JOIN 产出这个宽表,但这种解决方案在实践中面临较多挑战,主要可分为以下两种情况:

01 - 维表 JOIN

  • 场景挑战:指标数据与维度数据进行关联,其中维度数据量比较大,指标数据 QPS 比较高,导致数据可能会产出延迟。
  • 当前方案:将部分维度数据缓存起起来,缓解高 QPS 下访问维度数据存储引擎产生的任务背压问题。
  • 存在问题:由于业务方的维度数据和指标数据时间差比较大,所以指标数据流无法设置合理的 TTL;而且存在 Cache 中维度数据没有及时更新,导致下游数据不准确的问题。

02 - 多流 JOIN

  • 场景挑战:多个指标数据进行关联,不同指标数据可能会出现时间差比较大的异常情况。
  • 当前方案:使用基于窗口的 JOIN,并且维持一个比较大的状态。
  • 存在问题:维持大的状态不仅会给内存带来的一定的压力,同时 Checkpoint 和 Restore 的时间会变 得更长,可能会导致任务背压。

总结上述场景遇到的挑战,主要可归结为以下两点:

由于多流之间时间差比较大,需要维持大状态,同时 TTL 不好设置。

由于对维度数据做了 Cache,维度数据数据更新不及时,导致下游数据不准确。

0

2. Hudi有什么优点?

基于 Hudi Payload 机制的多流拼接方案:

(Payload是一个条数据的内容的抽象,决定了同一个主键的数据的增删改查逻辑也决定了其序列化的方式。通过对payload的自定义,可以实现数据的灵活合并,数据的自定义编码序列化等,丰富Hudi现有的语义,提升性能。)

  1. 多流数据完全在存储层进行拼接,与计算引擎无关,因此不需要保留状态及其 TTL 的设置。
  2. 维度数据和指标数据作为不同的流独立更新,更新过程中不需要做多流数据合并,下游读取时再 Merge 多流数据,因此不需要缓存维度数据,同时可以在执行 Compact 时进行 Merge,加速下游查询。
  3. 支持离线场景和流批混合场景。
  4. 内置通用模板,支持数据去重等通用接口,同时可满足用户定制化数据处理需求。

二、HUDI的应用场景

1. 什么场景适合使用hudi?

0. 具有相同主键的多个数据源构建一个大宽表;

1. 近实时DB数据入仓/湖:把原来T + 1的数据新鲜度提升到分钟级别;

2. 近实时OLAP:分钟级别的端到端数据新鲜度,同时又非常开放的OLAP查询引擎可以适配;

3. 近实时ETL;

2. 什么场景不适合使用hudi?

下游对时效性要求较高,对数据延迟容忍度较低;

三、什么是HUDI?HUDI能做什么?

1. 什么是HUDI?

Hudi是Hadoop Updates and Incrementals的简写,它是由Uber开发并开源的Data Lakes解决方案。Hudi 用于管理的数据库层上构建具有增量数据管道的流式数据湖,同时针对湖引擎和常规批处理进行了优化。简言之,Hudi是一种针对分析型业务的、扫描优化的数据存储抽象,它能够使DFS数据集在分钟级的时延内支持变更,也支持下游系统对这个数据集的增量处理

1. Apache Hudi 本身不存储数据,仅仅管理数据,借助外部存储引擎存储数据,比如HDFS、S3;

2. 此外,Apache Hudi 也不分析数据,需要使用计算分析引擎,查询和保存数据,比如Spark或Flink

参考:Hudi学习一:Hudi简介_Hub-Link的博客-CSDN博客

2. HUDI能做什么(特性)?

  1. 开放性:上游支持多种数据源格式,下游查询端也同样支持多种查询引擎;
  2. 丰富的事务支持:对ACID语义(原子性、一致性、隔离性、持久性)的增强;
  3. Hudi 保管修改历史,可以做时间旅行或回退;
  4. Hudi 内部有主键到文件级的索引,默认是记录到文件的布隆过滤器;

四、HUDI的概念&原理

1. 概念

COW表(Copy On Write):

        在数据写入的时候,通过复制旧文件数据并且与新写入的数据进行合并,对 Hudi 的每一个新批次写入都将创建相应数据文件的新版本。

MOR表(Merge On Read):

        对于具有要更新记录的现有数据文件,Hudi 创建增量日志文件记录更新数据。此在写入期间不会合并或创建较新的数据文件版本;在进行数据读取的时候,将本批次读取到的数据进行Merge。Hudi 使用压缩机制来将数据文件和日志文件合并在一起并创建更新版本的数据文件。

指标

COW

MOR

更新代价

读取延迟

一般

写放大

总结:COW适用于读多写少的场景;MOR适用于写多读少的场景。

参考:腾讯广告业务基于Apache Flink + Hudi的批流一体实践 - 墨天轮 (modb.pro)

2. 原理

Hudi存储分为两个部分:

元数据:

         .hoodie目录对应着表的元数据信息,包括表的版本管理(Timeline)、归档目录(存放过时的instant也就是版本),一个instant记录了一次提交(commit)的行为、时间戳和状态,Hudi以时间轴的形式维护了在数据集上执行的所有操作的元数据;

数据: 

        和hive一样,以分区方式存放数据;分区里面存放着Base File(.parquet)和Log File(.log.*);

MOR表数据组织架构:

        数据构成关系:table -> partition -> FileGroup -> FileSlice -> parquet + log ;

五、流批一体

Flink + Hudi

Flink实现了计算框架一致

Hudi实现了存储框架一致(不能使用Kafka、Hive,因为不支持迟到数据对结果进行修改,以及长时间的数据回溯);

Hudi(Hadoop Upserts Deletes and Incrementals)是一个开源的数据湖解决方案,旨在简化大数据湖的数据管理和增量处理操作。Hudi 在 Apache Hadoop 生态系统中被广泛使用,并提供了一些核心功能。

以下是 Hudi 的核心功能:

  1. 增量写入(Incremental Writes):Hudi 允许在数据湖中进行增量写入操作。它支持更新(upsert)和删除(delete)操作,这意味着可以有效地处理变化的数据。用户可以仅仅写入发生变化的数据,而无需覆盖整个数据集。
  2. 原子性(Atomicity):Hudi 提供原子性写入操作,确保数据写入是事务性的。这意味着要么所有的写入操作都成功,要么都失败,保持数据的一致性。如果写入过程中发生故障或错误,Hudi 可以回滚写入操作,避免数据损坏。
  3. 时态数据(Point-in-Time Queries):Hudi 允许在数据湖中执行时态查询,即可以查询数据的历史版本。这对于分析和回溯数据非常有用。Hudi 使用了写时复制(copy-on-write)的机制来保存数据的历史版本,并提供了灵活的查询接口。
  4. 数据索引(Data Indexing):Hudi 提供了一种高效的数据索引机制,以加速数据查询操作。它使用了基于时间和位置的索引,可以快速定位和访问特定数据分区或时间范围内的数据。
  5. 建表和模式演化(Table Creation and Schema Evolution):Hudi 允许在数据湖中创建表格,并支持模式演化。它可以处理表格架构的变化,例如添加、删除或修改列。这使得在数据湖中进行架构更改变得更加灵活和简单。
  6. 兼容多种数据格式(Compatibility with Multiple Data Formats):Hudi 可以与多种数据格式兼容,包括 Parquet、Avro、ORC 等。这意味着可以使用不同的数据格式进行存储和读取,根据具体需求选择最合适的格式。

总而言之,Hudi 提供了一种强大而灵活的方式来管理和处理数据湖中的大数据。它的核心功能包括增量写入、原子性操作、时态数据查询、数据索引、表格创建和模式演化,以及与多种数据格式的兼容性。这些功能使得在数据湖中进行数据管理和处理变得更加高效和便捷。


其他HUDI相关资料:

基于Hudi的流批一体:

**基于Apache Hudi + Flink多流拼接(大宽表)最佳实践:万字长文:基于Apache Hudi + Flink多流拼接(大宽表)最佳实践-腾讯云开发者社区-腾讯云

*流批一体Hudi近实时数仓实践:干货|流批一体Hudi近实时数仓实践-腾讯云开发者社区-腾讯云

*腾讯广告业务基于Apache Flink + Hudi的批流一体实践:腾讯广告业务基于Apache Flink + Hudi的批流一体实践 - 墨天轮

*基于 Hudi 的湖仓一体技术在 Shopee 的实践:基于 Hudi 的湖仓一体技术在 Shopee 的实践 - 掘金

Flink+Hudi 构架仓湖一体化解决方案:Apache Flink学习网 ***

触宝科技基于Apache Hudi的流批一体架构实践:https://www.cnblogs.com/leesf456/p/15000030.html

Apache Hudi 原理: Hudi 原理 | 聊一聊 Apache Hudi 原理-轻识 *****

数据湖架构开发-Hudi入门教程

数据湖架构开发-Hudi入门教程 - 知乎

Hudi 快速体验使用(含操作详细步骤及截图)_安装完hudi后如何远程使用_半岛铁子_的博客-CSDN博客

Apache Hudi入门指南(含代码示例) - 墨天轮

相关文章:

基于数据湖的多流拼接方案-HUDI概念篇

目录 一、为什么需要HUDI? 1. 传统技术选型存在哪些问题? 2. Hudi有什么优点? 基于 Hudi Payload 机制的多流拼接方案: 二、HUDI的应用场景 1. 什么场景适合使用hudi? 2. 什么场景不适合使用hudi? …...

OpenCV基础知识(5)— 几何变换

前言:Hello大家好,我是小哥谈。OpenCV中的几何变换是指改变图像的几何结构,例如大小、角度和形状等,让图像呈现出缩放、翻转、旋转和透视效果。这些几何变换操作都涉及复杂、精密的计算。OpenCV将这些计算过程都封装成了非常灵活的…...

Linux下源码安装MySQL 8.0

MySQL 8.0源码安装 环境准备步骤 环境准备 Linux环境,本文基于CentOS 8 MySQL安装包,本文基于MySQL 8.1,以下为带boost MySQL 8.1源码下载地址: https://dev.mysql.com/get/Downloads/MySQL-8.1/mysql-boost-8.1.0.tar.gz 步骤…...

大聪明教你学Java | 深入浅出聊 Java 内存模型

前言 🍊作者简介: 不肯过江东丶,一个来自二线城市的程序员,致力于用“猥琐”办法解决繁琐问题,让复杂的问题变得通俗易懂。 🍊支持作者: 点赞👍、关注💖、留言💌~ 在多线程环境下,多个线程同时访问共享数据可能导致一系列问题,如数据不一致、竞态条件和死锁等…...

SAP ABAPG开发屏幕自动生成日期的搜索帮助

代码如下: REPORT z_jason_test_f4 . TABLES: s031. PARAMETER p_spmon TYPE spmon DEFAULT sy-datum0(6) OBLIGATORY. SELECT-OPTIONS s_spmon FOR s031-spmon DEFAULT sy-datum0(6) OBLIGATORY. AT SELECTION-SCREEN ON VALUE-REQUEST…...

leetcode 674. 最长连续递增序列

2023.8.24 与最长递增子序列 类似,不同的是, 本题要求连续序列,所以不需要第二层遍历比较之前所有的元素了,只需要比较上一个元素i-1。 dp[i]的含义为:以nums[i]元素为结尾的序列的最长递增子序列。 注意这里是以i为结…...

Mysql简短又易懂

MySql 连接池:的两个参数 最大连接数:可以同时发起的最大连接数 单次最大数据报文:接受数据报文的最大长度 数据库如何存储数据 存储引擎: InnoDB:通过执行器对内存和磁盘的数据进行写入和读出 优化SQL语句innoDB会把需要写入或者更新的数…...

vue 简单实验 v-model 变量和htm值双向绑定

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"two-way-binding"><p>{{ message }}</p><input v-model"message" /> </div> <script>…...

测试框架pytest教程(8)失败重试-pytest-rerunfailures

pytest-rerunfailures是一个pytest插件&#xff0c;用于重新运行失败的测试用例。当测试用例在第一次运行时失败&#xff0c;该插件会自动重新运行指定次数的失败用例&#xff0c;以提高稳定性和减少偶发性错误的影响。 要使用pytest-rerunfailures插件&#xff0c;需要按照以…...

6个主流的工业3D管道设计软件

3D 管道设计软件是大多数行业工程工作的主要部分&#xff0c;例如&#xff1a; 电力、石油和天然气、石化、炼油厂、纸浆和造纸、化学品和加工业。 全球各工程公司使用了近 50 种工厂或管道设计软件。 每个软件都有优点和缺点&#xff0c;包括价格点。 EPC 和业主部门当前的趋势…...

基于微信小程序的垃圾分类系统设计与实现(2.0 版本,附前后端代码)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 1 简介 视频演示地址&#xff1a; 基于微信小程序的智能垃圾分类回收系统&#xff0c;可作为毕业设计 小…...

基础论文学习(4)——CLIP

《Learning Transferable Visual Models From Natural Language Supervision》 CLIP的英文全称是Contrastive Language-Image Pre-training&#xff0c;即一种基于对比文本-图像对的预训练模型。CLIP是一种基于对比学习的多模态模型&#xff0c;与CV中的一些对比学习方法如moc…...

SpringBoot利用ConstraintValidator实现自定义注解校验

一、前言 ConstraintValidator是Java Bean Validation&#xff08;JSR-303&#xff09;规范中的一个接口&#xff0c;用于实现自定义校验注解的校验逻辑。ConstraintValidator定义了两个泛型参数&#xff0c;分别是注解类型和被校验的值类型。在实现ConstraintValidator接口时&…...

十、pikachu之php反序列化

文章目录 1、php反序列化概述2、实战3、关于Magic function4、__wakeup()和destruct() 1、php反序列化概述 在理解这个漏洞前&#xff0c;首先搞清楚php中serialize()&#xff0c;unserialize()这两个函数。 &#xff08;1&#xff09;序列化serialize()&#xff1a;就是把一个…...

PHP“牵手”拼多多商品详情数据获取方法,拼多多API接口批量获取拼多多商品详情数据说明

拼多多商品详情接口 API 是开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取拼多多商品的详细信息&#xff0c;包括商品的标题、描述、图片等信息。在拼多多电商平台的开发中&#xff0c;拼多多详情接口 API 是非常常用的 API&#xff0c;因此本文将详细介绍拼多多…...

前端面试:【Redux】状态管理的精髓

嘿&#xff0c;亲爱的Redux探险家&#xff01;在前端开发的旅程中&#xff0c;有一个强大的状态管理工具&#xff0c;那就是Redux。Redux是一个状态容器&#xff0c;它以一种可预测的方式管理应用的状态&#xff0c;通过Store、Action、Reducer、中间件和异步处理等核心概念&am…...

element-ui中的el-table的summary-method(合计)的使用

场景图片&#xff1a; 图片1&#xff1a; 图片2&#xff1a; 一&#xff1a;使用element中的方法 优点&#xff1a; 直接使用summary-method方法&#xff0c;直接&#xff0c;方便 缺点&#xff1a; 只是在表格下面添加了一行&#xff0c;如果想有多行就不行了 1&#xff1a;h…...

“深入探索JVM:解析Java虚拟机的工作原理与性能优化“

标题&#xff1a;深入探索JVM&#xff1a;解析Java虚拟机的工作原理与性能优化 摘要&#xff1a;本文将深入探讨Java虚拟机&#xff08;JVM&#xff09;的工作原理和性能优化。我们将首先介绍JVM的基本组成和工作流程&#xff0c;然后重点讨论JVM内存管理、垃圾回收算法以及性…...

【后端】Core框架版本和发布时间以及.net 6.0启动文件的结构

2023年&#xff0c;第35周&#xff0c;第1篇文章。给自己一个目标&#xff0c;然后坚持总会有收货&#xff0c;不信你试试&#xff01; .NET Core 是一个跨平台的开源框架&#xff0c;用于构建现代化的应用程序。它在不同版本中有一些重要的区别和发布时间 目录 一、Core版本和…...

Linux 定时任务 crontab 用法学习整理

一、linux版本 lsb_release -a 二、crontab 用法学习 2.1&#xff0c;crontab 简介 linux中crontab命令用于设置周期性被执行的指令&#xff0c;该命令从标准输入设备读取指令&#xff0c;并将其存放于“crontab”文件中&#xff0c;以供之后读取和执行。cron 系统调度进程。…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

微服务商城-商品微服务

数据表 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 商…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...