基于数据湖的多流拼接方案-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入门指南(含代码示例) - 墨天轮

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Qt QAxObject】使用 QAxObject 高效任意读写 Excel 表

1. 用什么操作 Excel 表 Qt 的官网库中是不包含 Microsoft Excel 的操作库,关于对 Microsoft Excel 的操作库可选的有很多,包含基于 Windows 系统本身的 ActiveX、Qt Xlsx、xlsLib、LibXL、qtXLS、BasicExcel、Number Duck。 库.xls.xlsx读写平台Qt Xls…

SQL注入之HTTP头部注入

文章目录 cookie注入练习获取数据库名称获取版本号 base64注入练习获取数据库名称获取版本号 user-agent注入练习获取数据库名称获取版本号 cookie注入练习 向服务器传参三大基本方法:GPC GET方法,参数在URL中 POST,参数在body中 COOKIE,参数…

大数据(四)主流大数据技术

大数据(四)主流大数据技术 一、写在前面的话 To 那些被折磨打击的好女孩(好男孩): 有些事情我们无法选择,也无法逃避伤害。 但请你在任何时候都记住: 你可能在一些人面前,一文不值&a…

7、监测数据采集物联网应用开发步骤(5.3)

监测数据采集物联网应用开发步骤(5.2) 静态配置库数据库调用,新建全局变量初始化类com.zxy.main.Init_Page.py #! python3 # -*- coding: utf-8 -Created on 2017年05月10日 author: zxyong 13738196011 from com.zxy.z_debug import z_debug from com.zxy.common…

英特尔Raptor Lake Refresh第14代CPU:传闻发布日期、价格、规格等

英特尔预计将在今年秋天推出第14代Raptor Lake-S Refresh CPU。虽然即将推出的系列芯片沿用了当前的第13代英特尔核心系列,但它们实际上是相同CPU的更新版本。 Raptor Lake-s Refresh芯片没有任何官方消息,但几次所谓的泄露让我们了解了我们可能会期待什…

Java后端开发面试题——集合篇

ArrayList底层的实现原理是什么 底层数据结构 ArrayList底层是用动态的数组实现的 初始容量 ArrayList初始容量为0,当第一次添加数据的时候才会初始化容量为10 扩容逻辑 ArrayList在进行扩容的时候是原来容量的1.5倍,每次扩容都需要拷贝数组 添加逻…

信号和槽的相关操作

目录 信号和槽 connect()函数 自定义信号槽 例子 自定义信号槽需要注意的事项 信号槽的更多用法 Lambda表达式 ① 函数对象参数 ② 操作符重载函数参数 ③ 可修改标示符 ④ 错误抛出标示符 ⑤ 函数返回值 ⑥ 是函数体 所谓信号槽,实际就是观察者模式。当…

CTFHUB_web_密码口令_默认口令

登陆界面如图所示,题目提示默认口令: 查找常用默认口令: 常见web系统默认口令总结 常见网络安全设备弱口令(默认口令) 找到相关内容: 输入用户名密码得到flag

Android Jetpack Compose中使用字段验证的方法

Android Jetpack Compose中使用字段验证的方法 数据验证是创建健壮且用户友好的Android应用程序的关键部分。随着现代UI工具包Jetpack Compose的引入,处理字段验证变得更加高效和直观。在这篇文章中,我们将探讨如何在Android应用中使用Jetpack Compose进…

【每日一题】1267. 统计参与通信的服务器

【每日一题】1267. 统计参与通信的服务器 1267. 统计参与通信的服务器题目描述解题思路 1267. 统计参与通信的服务器 题目描述 这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表示没有…

【Java基础篇】一文搞懂Java方法的调用与重载(超详细)

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 目录 一、方法的概念以及使用1.1什么是方法1.2方法定义1.3方法调用的执行过程1.4形参和实参的关系 二、方法的重载方…

【网络】多路转接——五种IO模型 | select

🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言:你只管努力,剩下的交给时间! 五种IO模型 | select 🍧五种IO模型🍧select🧁认识接口&#x1f9c1…

SpringBoot中间件ElasticSearch

Elasticsearch是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的 全文搜索引擎 ,基于RESTful web 接口。 Elasticsearch 是用 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elastics…

基于Servlet实现博客系统--- 前后端分离

目录 一.博客系统概述 1.软件的生命周期 2.学习目标 二.数据库的建立 2.插入数据 三.创建项目 1.建立maven项目 2.导入相关的依赖 3.编写工具类 1.编写数据库相关的工具类 2.编写字符串的工具类 3.编写用户的工具类 4.创建实体类 1.创建user实体类 2.创建blog…

ant-vue1.78版监听a-modal遮罩层的滚动事件

监听a-modal遮罩层的滚动事件 我们开发过程中经常有遇到监听页面滚动的事件需求,去做一些下拉加载或者是下拉分页的需求,我们直接在vue的生命周期中去绑定事件监听非常的方便,但如果是弹框的遮罩层的滚动监听呢?页面的监听完全是…

学习pytorch6 torchvision中的数据集使用

torchvision中的数据集使用 1. torchvision中的数据集使用官网文档注意点1 totensor实例化不要忘记加括号注意点2 download可以一直保持为True代码执行结果 2. DataLoader的使用 1. torchvision中的数据集使用 官网文档 注意左上角的版本 https://pytorch.org/vision/0.9/ 注…

【业务功能篇81】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-入门实战

ElasticSearch 一、ElasticSearch概述 1.ElasticSearch介绍 ES 是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储,检索数据;本身扩展性很好,可以扩展到上百台服务器,…

【漏洞复现】万户协同办公平台未授权访问漏洞

漏洞描述 万户ezOFFICE协同管理平台涵盖门户自定义平台、信息知识平台管理、系统管理平台功能,它以工作流引擎为底层服务,以通讯沟通平台为交流手段,以门户自定义平台为信息推送显示平台,为用户提供集成的协同工作环境。该平台存…

软件测试面试题及答案,2023秋招必看版

导读 精选400道软件测试面试真题,高清打印版打包带走,横扫软件测试面试高频问题,涵盖测试理论、Linux、MySQL、Web测试、接口测试、APP测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维、人力资源等模块…

【方案】基于AI边缘计算的智慧工地解决方案

一、方案背景 在工程项目管理中,工程施工现场涉及面广,多种元素交叉,状况较为复杂,如人员出入、机械运行、物料运输等。特别是传统的现场管理模式依赖于管理人员的现场巡查。当发现安全风险时,需要提前报告&#xff0…