一、Hudi整体架构
Hudi表的三个主要特点:
1)、timeline metadata 有序的时间轴元数据,类似于数据库事务日志。
2)、分层布局的数据文件:base file + delta log file(主要⾯向对base file的update&delete);
3)、index 索引(多种实现方式):默认是file group级别的bloomfilter,可定制
二、写⼊存储类型(表类型)
1、COW:(Copy on Write)写时复制表
1)、概念
Copy on Write表中的文件切片仅包含基本列文件,并且每次提交都会生成新版本的基本文件。换句话说,每次提交操作都会被压缩,以便存储列式数据,因此Write Amplification写入放大非常高(即只有一个字节的数据被提交修改,我们也需要先copy改值所在的最小单位块复制到内存整体修改再写会去),而读取数据成本则没有增加,所以这种表适合于做分析工作,读取密集型的操作。
2)、COW表工作原理
当数据被写入,对现有文件组的更新会为该文件组生成一个带有提交即时间标记的新切片,而插入分配一个新文件组并写入该文件组第一个切片。这些切片和提交即时时间在上图用同一颜色标识。针对图上右侧sql查询,首先检查时间轴上的最新提交并过滤掉之前的旧数据(根据时间查询最新数据),如上图所示粉色数据在10:10被提交,第一次查询是在10:10之前,所以不会出现粉色数据,第二次查询时间在10:10之后,可以查询到粉色数据(以被提交的数据)。
3)、COW表对表的管理方式改进点
(1)、在原有文件上进行自动更新数据,而不是重新刷新整个表/分区
(2)、能够只读取修改部分的数据,而不是浪费查询无效数据
(3)、严格控制文件大小来保证查询性能(小文件会显著降低查询性能)
2、MOR:(Merge on Read)读时复制表
1)、概念
Merge on Read表使用列式存储(parquet)+行式文件(arvo)存储数据,它仍然支持只查询文件切片中的基本列(parquet)来对表进行查询优化。用户每次对表文件的upsert操作都会以增量写入delta log(avro),增量日志会对应每个文件最新的ID来帮助用户完成快照查询。因此这种表类型