Hudi入门三:其他概念

158 阅读3分钟

前言

` Hudi的其他基础概念,有助于理解Hudi的底层逻辑


`

一、File Layouts文件结构

在这里插入图片描述 特点: 1.hudi数据表是放在分布式文件系统的目录文件下。如HDFS 2.表文件切片会被分区存放 3.在每个分区内,文件被作为文件组,标识唯一ID 4.每个文件组包含若干文件切片 5.每个文件切片包含提交或压缩命令产生的基础列式文件(.parquet)以及一组记录插入/更新增量操作信息的日志文件 ( .log.*) Hudi 采用多版本并发控制 (MVCC),压缩(compact)操作会合并日志和基础文件以生成新文件切片,清理(clean)操作会删除未使用/旧文件切片以回收文件系统上的空间。

二、Timeline 时间线

hudi的核心是通过时间线来记录某个时刻的操作, 时间线有三个组件 1.Instant action: 操作类型,就是干了什么事 2.Instant time:通常是一个时间戳(例如:20190117010349),单调递增。 3.state: 即时的状态 这个三个组件告诉我们在什么时间,什么状态,对表做了什么操作。 主要操作(action)包括; 1.COMMITS:提交一批新的记录到写表里,这个写具有原子性,要么都成功,要么都不成功 2.CLEANS :清理老版本的或者不需要的文件 3.DELTA_COMMIT :对MergeOnRead 类型的。提交增量的记录写到日志文件中,该写也具有原子性。 4.COMPACTION:压缩,将增量的行式的日志文件压缩到列式存储中,本质上可以看作一种特殊的commit。 5.ROLLBACK :回滚,跟关系型数据库回滚类似 6.SAVEPOINT:保存点,将某些文件组标记为“已保存”,这样做cleans的时候就不会删除它们。它有助于将表还原到时间线上的某个点,发生意外时可从该点进行数据恢复。可以理解游戏里的保存点。 states也有三个状态: 1.REQUESTED :操作已安排未启动 2.INFLIGHT :操作正在进行 3.COMPLETED: 操作已完成

三、Indexing索引

Hudi有四种索引 1.Bloom Index(默认):使用由记录键构建的Bloom过滤器,适用于分区表。 2.Simple Index:简单索引,适用于维表或者非分区表 3.HBase 索引:管理HBase 表中的索引映射。 4.自带实现:扩展API 以实现自定义索引。

四、Metadata Table元数据表

五、Write Operations写操作

1.UPSERT:通过索引插入或者更新记录 2.INSERT:与upsert类似,跳过索引查找步骤 3.BULK_INSERT:批量插入,适用于TB级数据初次加载 4.DELETE:分为Soft Deletes软删除:记录键保留,字段置空 和Hard Deletes 硬删除:物理删除

写过程: 1.检查是否有重复数据,有则删除 2.通过检查索引,判断记录属于那个文件组 3.根据之前提交数据大小,Hudi 将制定计划,将足够的记录添加到一个小文件中,以使其接近配置的大小。 4.把文件分配到分区中 5.写数据 6.更新索引 7.提交 8.清理,根据需要确实是否要清理无效文件 9.如果是 merger on read 表,还要压缩 10.归档:把老的历史时间线记录归档

六、Key Generation 主键

Hudi 一共有7种key生成器,常用有简单主键器和复合主键生成器。顾名思义,简单主键通过选取一个字段和分区路径作为key,复合主键可以选取多个字段+分区路径作为key