hudi系列-文件归档(archive)

本文介绍了Hudi的文件归档过程,包括每次commit触发的归档机制、归档Instant的选择、执行归档、删除归档文件以及归档结果的合并。归档旨在限制元数据文件数量,将较早的元数据移动到归档时间轴中。

1. 简介

hudi会不断生成commit、deltacommit、clean等类型的Instant从而形成活跃时间轴(ActiveTimeline),随着时间增长,时间轴变长,.hoodie元数据目录下的文件不断累积,为了限制元数据文件数量,需要对一些比较久远的元数据文件进行归档,保存到.hoodie/archived目录下,可以称之为归档时间轴(ArchivedTimeline)。

1.1 环境

  • flink 1.13.6
  • hudi 0.11.0
  • merge on read表

1.2 逻辑结构

在这里插入图片描述

2. 归档流程

2.1 每次commit触发归档

每次数据提交结束后都会触发archive操作HoodieFlinkWriteClient#postCommit,前提是开启了自动归档配置hoodie.archive.automatic

protected 
Hudi 的 Parquet 存储格式在文件裁剪方面依赖于索引机制和文件元数据管理,以实现高效的查询性能和数据过滤。文件裁剪是指在查询过程中,系统能够跳过不相关的数据文件,从而减少 I/O 操作和计算资源的消耗。以下是 Hudi Parquet 存储格式中实现文件裁剪的主要方法: ### 1. 布隆过滤器(Bloom Filter)裁剪 Hudi 利用布隆过滤器进行索引构建,特别是在使用 Bloom Index 时,能够有效裁剪掉不包含目标记录的数据文件[^3]。布隆过滤器是一种空间效率高且查询速度快的概率型数据结构,它能够快速判断某个记录键是否可能存在于某个数据文件中。如果布隆过滤器确认目标键不在某个文件中,则可以直接跳过该文件,从而减少不必要的 I/O 操作。 ### 2. 范围裁剪(Range Pruning) Hudi文件系统会根据记录键的排序特性进行范围裁剪。如果记录键是有序的(例如时间戳),Hudi 可以利用这些键的范围信息来构建区间树(Interval Tree),从而在查询时快速识别出可能包含目标记录的文件集合。这种基于键值范围的裁剪方法可以显著减少参与查询的数据文件数量。 ### 3. 文件分组与文件 ID 映射 Hudi 使用记录键(record key)和分区路径(partition path)生成唯一的 hoodie key,并通过索引机制将这些键映射到对应的文件 ID(file ID)[^4]。这种映射机制确保了记录键与文件位置之间的高效查找,从而在更新和删除操作中快速定位到相关的数据文件,避免扫描所有文件。 ### 4. 文件元数据管理 Hudi文件系统视图(File System View)维护了所有活跃文件的元数据信息,包括文件的创建时间、大小、键范围等[^1]。通过这些元数据信息,Hudi 可以在查询执行时快速判断哪些文件可能包含目标数据,哪些文件可以直接跳过。 ### 5. 与 Parquet 格式的列式裁剪结合 由于 Hudi 使用 Parquet 作为其底层存储格式,因此还可以利用 Parquet 自身的列式裁剪能力。Parquet 格式支持按列读取数据,查询引擎可以仅读取与查询相关的列数据,从而减少 I/O 操作并提升查询性能。 以下是一个简单的 Spark SQL 查询示例,展示如何从 Hudi 表中读取数据: ```sql -- 查询 Hudi 表中的部分数据 SELECT c_custkey, c_name, c_nationkey FROM customer_cow WHERE c_nationkey = 'CHINA'; ``` 在执行上述查询时,Hudi 会结合上述裁剪机制,快速定位并跳过不相关的 Parquet 文件,从而提升查询效率。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值