hudi系列-旧文件清理(clean)

本文介绍了Hudi的旧文件清理机制,包括清理保留策略和触发策略。Hudi使用MVCC设计,通过cleaner工具删除旧版本文件,防止存储空间和文件数量无限制增长。清理策略包括基于提交次数、文件版本和时间保留。清理流程涉及初始化、启动入口和逻辑执行,包括生成清理计划、刷新ActiveTimeline缓存以及执行清理计划。

1. 简介

hudi采用的是mvcc设计,提供了清理工具cleaner来把旧版本的文件分片删除,默认开启了清理功能,可以防止文件系统的存储空间和文件数量的无限增长。

1.1 环境

  • flink 1.13.6
  • hudi 0.11.0

1.2 清理保留策略

清理旧文件需要考虑数据查询的情况,有些长查询会占用着旧版本的文件,需要设置合适的清理策略来保留一定数量的commit或者文件版本,以提高系统的容错性

  • KEEP_LATEST_COMMITS:默认策略,表示保留最后n次提交,默认为10,通过参数hoodie.cleaner.commits.retained​或clean.retain_commits​(flink)设置
  • KEEP_LATEST_FILE_VERSIONS:保留最后n个文件版本,默认为3,通过参数hoodie.cleaner.fileversions.retained设置​
  • KEEP_LATEST_BY_HOURS:保留最后n小时,默认24小时,通过参数hoodie.cleaner.hours.retained设置,这是0.11版本后新增的

1.3 清理触发策略

目前仅支持一种触发清理的策略:CleaningTriggerStrategy#NUM_COMMITS,即根据提交的次数,默认为1,可以通过设置参数hoodie.clean.max

<think>好的,我现在需要帮助用户解决Maven构建Hudi项目时出现的BUILD FAILURE问题,可能与POM文件缺失或目录错误有关。首先,我需要回想用户提供的引用内容,看看是否有相关的信息可以借鉴。 用户提到了引用[1]中的pom.xml配置,里面提到了maven-project-info-reports-plugin插件,设置了JDK版本。引用[2]是关于如何在IntelliJ中导入Maven项目,可能和项目结构有关。引用[3]和[5]涉及settings.xml的配置,特别是代理设置,这可能影响依赖下载。引用[4]提到build标签和plugin标签的详解,这可能在检查pom.xml结构时有用。 首先,用户的问题可能涉及POM文件缺失或目录错误。POM文件缺失的话,Maven无法构建项目,所以第一步要确认项目根目录下是否存在pom.xml。如果存在,可能是路径错误,比如在错误的目录执行了mvn命令。这时候需要检查当前工作目录是否正确。 其次,目录结构错误。Maven项目有标准的目录结构,比如src/main/java,如果Hudi项目的结构不符合标准,Maven可能找不到源码,导致构建失败。需要用户确认目录结构是否正确,特别是模块化项目中的子模块路径是否正确。 接下来是依赖问题。Hudi项目可能依赖一些外部库或父POM,如果这些依赖无法下载,会导致失败。这时候需要检查网络连接,或者是否配置了正确的仓库镜像,比如阿里云镜像。引用[5]中提到代理配置的问题,如果用户处于需要代理的环境,可能需要配置settings.xml中的代理设置。 另外,检查pom.xml中的插件配置是否正确。例如,引用[1]中的JDK版本设置,如果Hudi项目需要更高版本的JDK,而pom.xml中配置的是1.7,可能会导致问题。需要确认pom.xml中的<source>和<target>版本是否与本地安装的JDK版本兼容。 还有可能是本地仓库损坏。有时候下载的依赖不完整,可以尝试清理本地仓库并重新下载。使用mvn clean install -U命令强制更新依赖。 如果用户是第一次构建Hudi项目,可能需要先构建其依赖的父项目或核心模块。Hudi项目可能有多个子模块,需要按照正确的顺序构建,或者使用递归构建命令。 最后,查看详细的错误日志,使用mvn clean install -e或-X参数获取更多信息,帮助定位具体问题。 总结步骤:检查pom.xml存在和路径;验证目录结构;检查依赖和仓库配置;确认插件和JDK版本;清理本地仓库;构建顺序是否正确;查看详细日志。</think>针对Maven构建Hudi项目时出现的$BUILD\ FAILURE$问题,可能与以下原因及解决方案相关: --- ### **1. 确认POM文件存在性与路径** - **问题现象**:若控制台报错`Non-resolvable parent POM`或`Could not find artifact`,说明Maven无法定位POM文件- **解决方案**: - 检查项目根目录下是否存在`pom.xml`文件- 若使用多模块项目,确保子模块的`<parent>`标签中定义的`<relativePath>`指向正确的父POM路径[^4]。例如: ```xml <parent> <groupId>org.apache.hudi</groupId> <artifactId>hudi</artifactId> <version>0.10.0</version> <relativePath>../pom.xml</relativePath> <!-- 路径需与实际一致 --> </parent> ``` --- ### **2. 验证Maven目录结构** - **问题现象**:若报错`Source directory does not exist: src/main/java`,说明目录结构不符合Maven标准。 - **解决方案**: - 确认项目目录结构符合Maven约定: ``` project-root/ ├── pom.xml ├── src/ │ ├── main/ │ │ ├── java/ │ │ └── resources/ │ └── test/ ``` -Hudi项目使用了非标准结构,需在`pom.xml`中显式配置`<build>`标签指定路径[^4]: ```xml <build> <sourceDirectory>custom-src</sourceDirectory> </build> ``` --- ### **3. 依赖下载失败** - **问题现象**:报错`Could not resolve dependencies`或`Missing artifact`。 - **解决方案**: 1. **检查网络与代理**:若处于内网环境,需在`settings.xml`中配置代理(参考引用[5]): ```xml <proxies> <proxy> <active>true</active> <protocol>http</protocol> <host>10.*.*.*</host> <port>8080</port> </proxy> </proxies> ``` 2. **更换镜像仓库**:在`settings.xml`中添加阿里云镜像加速下载: ```xml <mirror> <id>aliyun</id> <mirrorOf>central</mirrorOf> <url>https://maven.aliyun.com/repository/central</url> </mirror> ``` 3. **清理本地仓库**:删除`~/.m2/repository`中对应依赖目录,重新执行`mvn clean install -U`。 --- ### **4. 插件或JDK版本冲突** - **问题现象**:报错`No compiler is provided in this environment`或`Unsupported class file major version`。 - **解决方案**: - 在`pom.xml`中明确指定JDK版本(参考引用[1]): ```xml <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> ``` - 确保本地安装的JDK版本与配置一致(通过`java -version`验证)。 --- ### **5. 构建顺序问题** - **问题现象**:报错`Failed to execute goal on project hudi-common`。 - **解决方案**: -Hudi项目包含多个子模块,需先构建父项目: ```bash mvn clean install -pl :hudi-parent -am ``` - 或递归构建所有模块: ```bash mvn clean install -T 4C ``` --- ### **6. 查看详细日志定位问题** - 使用`-e`或`-X`参数获取完整错误堆栈: ```bash mvn clean install -e -X ``` 根据日志中的`Caused by:`部分精准定位缺失的依赖、语法错误或配置冲突。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值