【Hudi】核心概念-基本概念

目录

  • 基本概念
    • 时间轴(TimeLine)
      • Instant action:在表上执行的操作类型
      • Instant time
      • State
      • 两个时间概念
    • 文件布局(File Layout)
    • 索引(Index)
      • 原理
      • 索引选项
        • 全局索引与非全局索引
        • 索引的选择策略
    • 表类型(Table Types)
    • 查询类型
      • Snapshot Queries
      • Incremental Queries
      • Read Optimized Queries
      • 不同表支持的查询类型

基本概念

时间轴(TimeLine)

在这里插入图片描述

Hudi的核心是维护表上在不同的即时时间(instants)执行的所有操作的时间轴(timeline),这有助于提供表的即时视图,同时还有效地支持按到达顺序检索数据。一个instant由一下三个部分组成:

Instant action:在表上执行的操作类型

  • commits:一次xommit表示将一批数据原子性地写入一个表
  • cleans:清除表中不在需要的旧版本文件的后台活动
  • delta_commit:增量提交指的是将一批数据原子性地写入一个MergeOnRead类型的表,其中部分或所有数据可以写入增量日志
  • compaction:合并Hudi内部差异数据结构的后台活动,例如:将更新操作从基于行的log日志文件合并到列式存储的数据文件。在内部,compaction体现为timeline上特殊提交。
  • rollback:表示当commit/delta_commit不成功时进行回滚,其会删除在写入过程中产生的部分文件。
  • savepoint:将某些文件组标记为已保存,以便其不会被删除。在发生灾难需要恢复数据的情况下,他有助于将数据集还原到时间轴上的某个点。

Instant time

通常是一个时间戳(例如20190117010349),他按照动作开始时间的顺序单调增加

State

  • requested:表示某个action已经调度,但尚未执行。
  • inflight:表示action当前正在执行
  • completed:表示timeline上的action已经完成

两个时间概念

区分两个重要的事件概念

  • Arrival time:数据到达Hudi的时间,commit time.
  • Event time:record中记录时间
    在这里插入图片描述

文件布局(File Layout)

Hudi将一个表映射为如下文件结构
在这里插入图片描述
Hudi存储分为两个部分:
(1)元数据:.hoodie目录对应着表元数据信息,包括表的版本管理(Timeline)、归档目录(存放过时的instant也就是版本),一个instant记录一次(commit)的行为、时间戳和状态,Hudi以时间轴的形式维护了在数据集上执行的所有操作的元数据;
(2)数据:和Hive一样,以分区方式存储数据;分区里面存放着Base File(.Parquet) 和Log File(.log.*);
在这里插入图片描述

  • Hudi将数据表组织成分布是文件系统基本路径(basepath)下的目录结构

  • 表被划分为多个分区,这些分区是包含该分区的数据文件的文件夹,非常类似Hive表

  • 在每个分区中,文件被组织成文件组,由文件ID唯一标识

  • 每个文件组包含几个文件片(FileSlice)

  • 每个文件包含:
    1)一个基本文件(.parquet):在某个commit/compaction即时时间(instant time)生成的(MOR)可能没有
    2)多个日志文件(.log.*),这些日志文件包含生成基本文件以来对基本文件插入更新(COW没有)

  • Hudi采用了对版本并发控制
    1)compaction操作:合并日志和基本文件以产生新的文件片
    2)clean操作:清除不使用/旧的文件片以回收文件系统上的空间
    在这里插入图片描述

  • Hudi的base file(parquet文件)在footer的meta去记录了record key 组成的BloomFilter,用于在file base index的实现中实现高效的key contains检测,只有不存BloomFilter的key才需要扫描整个文件消灭假阳

  • Hudi的log是自己编码的,通过积攒数据buffer以LogBlock为单位写出,每个LogBlock包含magic number、size、content、footer等信息,用于数据读、校验、过滤。

索引(Index)

原理

Hudi是通过索引机制提供高效的upserts,具体是指将给定的hoodie key(record key + partition path)与文件id(文件组)建立唯一映射。这种映射关系,数据第一次写入文件后保持不变,索引,一个FileGroup包含了一批record的所有版本记录。Index用于区分消息是INSERT 还是 UPDATE.
在这里插入图片描述

索引选项

名称备注
Bloom索引采用根据记录key构建的布隆过滤器,还可以选择使用记录key范围修剪候选文件。
GLOBAL_BLOOM索引与Boolm索引类似,但是作用范围是全局
Simple索引针对从存储上的表中提取的键对传入的更新/删除记录执行精益联接。
GLOBAL_SIMPLE索引与Simple类似,但是作用范围是全局
HBase索引将index信息保存到Hbase当中。
INMEMORY索引在Spark、Java程序、Flink的内存中保存索引信息,Flink和Java默认使用当前索引
BUCKET索引使用桶hash的方式定位文件组,在大数据量情况下效果较好。可以通过hoodie.index.bucket.engine指定bucket引擎。
RECORD_INDEX索引索引将record的key保存到 Hudi元数据表中的位置映射。
自定义索引自定义实现的索引。
全局索引与非全局索引
  • 全局索引:全局索引在全表的所有分区范围下强制要求键的唯一性.全局索引提供了更强的保证,但是随着表增大,update/delete操作损失的性能越高。因此,更适合于小表

  • 非全局索引:默认的索引实现,只能保证数据在分区的唯一性。非全局索引一开写入器为同一个记录的update/delete提供一致性的分区路径,同时大幅度提高了效率,更适用于大表

    从index的维护成本和写入性能的角度考虑,维护一个global index的难度更大 对写入性的影响也更大,所以需要non-global index.
    在这里插入图片描述

索引的选择策略
  • 对事实表的延迟更新
    大部分更新会发生在最新的几个分区上而小部分会在旧的分区;采用布隆索引
    Hudi缓存了输入记录并使用了自定义分区器和统计规律来解决数据倾斜。如果布隆过滤器的伪正率过高,查询会增加数据的打乱操作。Hudi支持动态布隆过滤器(设置hoodie.bloom.index.filter.type = DYNAMIC_V0),它可以根据文件里存放的记录数量来调整大小而达到设定的假阳性率。
  • 对事件表去重
    抵消耗去重是一个非常有挑战的工作。虽然可以用一个键值存储来实现去重(即Hbase索引),但索引存储的消耗会随着事件数增长而线性增长以至于变得不可行。事实上,有范围剪裁功能的布尔索引是最佳的解决方案
  • 对维度表的随机更删:使用简单索引更适合

表类型(Table Types)

  • Copy On Write(COW)
    在COW表中,**只有数据文件/基本文件(.parquet),没有增量日志文件(.log.*).**对每一个新批次写入都将创建相应数据文件的新版本(新的FileSlice),新版本文件包包括旧版本文件的记录以及来自传入批次的记录(全量最新)。
    由于再写入期间进行合并COW会产生一些写入延迟。但是COW的优势在于他的简单性,不需要其他表服务(如压缩),也相对容易调试。

  • Merge On Read(MOR)
    MOR表中,包含列存的进本文件(.parquet)和行存的增量日志文件(基于行的avro格式,.log.*)MOR表的合并成本在读取端在写入期间不会合并或创建较新的数据文件版本。标记/索引完成后,对于具有要更新记录的现有的数据文件。
    读取端将实时合并基本文件及各自的增量文件日志。每次的读取延迟比较高。所以Hudi使用压缩机制来将数据文件和日志合并在一起并创建更新版本的数据文件。

  • COW/MOR的对比
    在这里插入图片描述

查询类型

Snapshot Queries

快照查询,可以查询指定commit/delta commit即时操作后表的最新快照
在读取合并(MOR)表的情况下,它通过即时合并最先新文件片的基本文件和增量文件来提供近实时表(几分钟)。
对于写时复制(COW),它可以替代现有的parquet表(或相同基本文件类型的表),同时提供upsert/delete和其他写入方面的功能,可以理解为查询最新版本的parquet数据文件;
下图是COW的快照查询:
在这里插入图片描述

Incremental Queries

增量查询,可以查询给定Commit/delta commit即时操作来查询新写入的数据。有效的提供变更流来启动增量数据管道。

Read Optimized Queries

读优化查询,可查看给定的commit/compact即时操作的表的最新快照。仅将最新文件片的基本/列文件暴露查询,并保证非Hudi表相同的列查询性能。
下图是MOR表的快照查询与读优化查询的对比:
在这里插入图片描述
Read Optimized Queries是对Merge On Read 表类型快照查询的优化;
在这里插入图片描述

不同表支持的查询类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

图像生成新篇章:Stable Diffusion 3 Medium开源评析

摘要 在数字艺术与人工智能的交汇点上,Stable Diffusion 3(SD3)的开源无疑是一场技术革新的盛宴。就在3月份,我撰写了一篇博文,深入探讨了SD3的技术报告内容与介绍,文章发表在CSDN博客上,https:…

[Algorithm][贪心][柠檬水找零][将数组和减半的最少操作次数][最大数][摆动序列]详细讲解

目录 1.柠檬水找零1.题目链接2.算法原理详解3.代码实现 2.将数组和减半的最少操作次数1.题目链接2.算法原理详解3.代码实现 3.最大数1.题目链接2.算法原理详解3.代码实现 4.摆动序列1.题目链接2.算法原理详解3.代码实现 1.柠檬水找零 1.题目链接 柠檬水找零 2.算法原理详解 …

在vue中循环中调用接口-promise.all();按顺序执行异步处理

🌈🌈🌈目录 场景一 解决 场景二 解决 场景一 数组遍历中每次遍历都需要去请求getStaffCover接口,拿到该接口的结果拼接到数组的每一项,等到数组遍历完之后,拿到拼接好的数组。拼接的数组必须是最终遍历…

探索AIGC与3D技术的融合:从图像到可探索的3D动态场景

随着人工智能和计算机图形技术的飞速发展,AIGC(人工智能生成内容)与3D技术的结合正在为我们打开一扇全新的创意之门。最近,我深入研究了几个令人兴奋的AIGC+3D方案,它们不仅展示了从单张图片或文本提示生成3D点云的强大能力,还进一步实现了AI虚拟试穿和生成高保真3D数字人…

银河麒麟系统升级openssh至9.7p1

银河麒麟系统升级openssh至9.7p1 升级过程建议参照链接 https://blog.csdn.net/zt19820204/article/details/137877652 当前环境 开始安装 # 1.查看当前服务器的openssh版本 ssh -V# 2.openssh下载地址 https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/# 3.升级opens…

【并集查找】839. 相似字符串组

本文涉及知识点 并集查找(并差集) 图论知识汇总 LeetCode839. 相似字符串组 如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。…

搜维尔科技:特斯拉称工厂内有两台人形机器人开始自主工作

搜维尔科技消息,据外电报道,特斯拉声称,其目前拥有两台 Optimus 人形机器人在工厂内自主工作,这尚属首次。 如果目前这场薪酬方案混乱有什么好处的话,那就是特斯拉几乎看起来又有了一个公关部门。 当然,其…

基于BP神经网络对鸢尾花数据集分类

目录 1. 作者介绍2. 关于理论方面的知识介绍2.1 BP神经网络原理2.2 BP神经网络结构 3. 关于实验过程的介绍,完整实验代码,测试结果3.1 鸢尾花数据集介绍3.2 代码演示3.3 结果演示 4. 问题与分析 1. 作者介绍 侯硕,男,西安工程大学…

CentOS7安装nginx【巨详细】

CentOS7安装nginx 安装依赖 1.安装gcc,nginx 编译时依赖 gcc 环境 # 安装c yum install gcc-c# 查看版本 gcc -v正常情况显示如下 2.安装openssl 安全套接字层密码库,用于通信加密 yum install -y openssl openssl-devel3.安装zlib,zlib 库 提供了很多…

基于python-CNN深度学习的食物识别-含数据集+pyqt界面

代码下载地址: https://download.csdn.net/download/qq_34904125/89374855 本代码是基于python pytorch环境安装的。 下载本代码后,有个requirement.txt文本,里面介绍了如何安装环境,环境需要自行配置。 或可直接参考下面博文…

【有用】docker在windows下使用详情

在Windows下安装和使用Docker可以按照以下步骤进行: 安装 Docker Desktop 系统要求 • Windows 10 64-bit: Pro, Enterprise, or Education (1607 Anniversary Update, Build 14393 or later) • Windows 11 64-bit: Pro, Enterprise, or Education • Windows 10 …

GIGE 协议摘录 —— 照相机的标准特征列表(五)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现(一) GIGE 协议摘录 —— GVCP 协议(二) GIGE 协议摘录 —— GVSP 协议(三) GIGE 协议摘录 —— 引导寄存器(四) GIGE 协议…

[数据集][目标检测]减速区域检测数据集VOC+YOLO格式1654张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1654 标注数量(xml文件个数):1654 标注数量(txt文件个数):1654 标注…

如何用多媒体沙盘实现智能交互体验?

随着多媒体技术在内容展示领域的迅猛进步,智能化信息交互方式已然跃升为公众瞩目的焦点,而展厅作为信息传递与产品展示的核心阵地,正面临着提升交互体验、强化信息传递效果的迫切需求。因此,以多媒体沙盘、LED屏幕等创新装置为媒介…

k8s+springcloud+nacos部署配置

1 k8s 部署nacos-2.1.2配置k8s-nacos-statefulSet.yaml文件 apiVersion: v1 kind: Service metadata:name: nacos-headlessnamespace: rz-dtlabels:app: nacosannotations:service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" spec:# 3个端口打开&…

力扣384. 打乱数组

Problem: 384. 打乱数组 文章目录 题目描述思路复杂度Code 题目描述 思路 打乱数组的主要算法: 从1 - n每次生成[i ~ n - i]的一个随机数字,再将原数组下标位置为i的元素和该随机数字位置的元素交换 复杂度 打乱数组的主要算法 时间复杂度: O ( n ) O(…

晶振的匹配电容的计算

晶振 等效电路 C0是晶振的静态电容 L1是晶振的等效电感 C1是晶振的等效电容 R1是晶振的等效串联电阻 芯片内部已有反相器和负载电阻 计算公式 参考1 参考2

Vue31-生命周期的简介

一、需求:文字的透明度递减 示例: 对象的简写形式 new vue({ key:value, key:value, 。。。。。。 }) 二、代码的实现 注意:JS不擅长小数的计算!!! 此写法不好!!!追求…

DT浏览器很好用

简单的浏览器,又是强大的浏览器,界面简洁大方,操作起来非常流畅😎,几乎不会有卡顿的情况。 搜索功能也十分强大👍,能够快速精准地找到想要的信息。 而且还有出色的兼容性,各种网页都…

【车载AI音视频电脑】200万像素迷你一体机

产品主要特点: -设备安装方便简洁,可通过3M胶直接将设备粘 贴到车前挡风玻璃上 -支持IE预览,手机,PAD实时预览, 支持电脑客 户端实时预览功能 -内置2路模拟高清, 每路均可达到200万像素。另 外可扩充2路1080P模拟…