目录
一、为什么需要HUDI?
1. 传统技术选型存在哪些问题?
2. Hudi有什么优点?
基于 Hudi Payload 机制的多流拼接方案:
二、HUDI的应用场景
1. 什么场景适合使用hudi?
2. 什么场景不适合使用hudi?
三、什么是HUDI?HUDI能做什么?
1. 什么是HUDI?
2. HUDI能做什么(特性)?
四、HUDI的概念&原理
1. 概念
2. 原理
五、流批一体
【离线方面】:
这种T+1延迟的结果已经无法满足商业分析同学的日常分析需求。
【实时方面】:
有些场景需要基于具有相同主键的多个数据源实时构建一个大宽表,数据源一般包括 Kafka 中的指标数据,以及 KV 数据库中的维度数据。
业务侧通常会基于实时计算引擎在流上做多个数据源的 JOIN 产出这个宽表,但这种解决方案在实践中面临较多挑战,主要可分为以下两种情况:
01 - 维表 JOIN
02 - 多流 JOIN
总结上述场景遇到的挑战,主要可归结为以下两点:
由于多流之间时间差比较大,需要维持大状态,同时 TTL 不好设置。
由于对维度数据做了 Cache,维度数据数据更新不及时,导致下游数据不准确。
(Payload是一个条数据的内容的抽象,决定了同一个主键的数据的增删改查逻辑也决定了其序列化的方式。通过对payload的自定义,可以实现数据的灵活合并,数据的自定义编码序列化等,丰富Hudi现有的语义,提升性能。)
0. 具有相同主键的多个数据源构建一个大宽表;
1. 近实时DB数据入仓/湖:把原来T + 1的数据新鲜度提升到分钟级别;
2. 近实时OLAP:分钟级别的端到端数据新鲜度,同时又非常开放的OLAP查询引擎可以适配;
3. 近实时ETL;
下游对时效性要求较高,对数据延迟容忍度较低;
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博客
- 开放性:上游支持多种数据源格式,下游查询端也同样支持多种查询引擎;
- 丰富的事务支持:对ACID语义(原子性、一致性、隔离性、持久性)的增强;
- Hudi 保管修改历史,可以做时间旅行或回退;
- Hudi 内部有主键到文件级的索引,默认是记录到文件的布隆过滤器;
COW表(Copy On Write):
在数据写入的时候,通过复制旧文件数据并且与新写入的数据进行合并,对 Hudi 的每一个新批次写入都将创建相应数据文件的新版本。
MOR表(Merge On Read):
对于具有要更新记录的现有数据文件,Hudi 创建增量日志文件记录更新数据。此在写入期间不会合并或创建较新的数据文件版本;在进行数据读取的时候,将本批次读取到的数据进行Merge。Hudi 使用压缩机制来将数据文件和日志文件合并在一起并创建更新版本的数据文件。
指标 |
COW |
MOR |
更新代价 |
高 |
低 |
读取延迟 |
低 |
一般 |
写放大 |
高 |
低 |
总结:COW适用于读多写少的场景;MOR适用于写多读少的场景。
参考:腾讯广告业务基于Apache Flink + Hudi的批流一体实践 - 墨天轮 (modb.pro)
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 的核心功能:
总而言之,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入门指南(含代码示例) - 墨天轮