对原表进行upsert后,Hudi的Parquet文件名中的writeToken发生变化,导致Incremental查询失败

问题描述

@[目录]

0 原因猜测

每次我们更新目标时,hoodie 都会生成一个日志并将其压缩,从而导致在该时间点之前的任何增量查询都消失。

1

这里是对原始标签的所有操作。

1.1 操作 1(更新)

先对原表进行upsert操作(更新370条数据),然后进行增量查询,结果成功

使用hadoop命令查询HDFS文件,出现log日志,数据写入日志文件,但未写入parquet:

执行压缩操作时未发生压缩。

1.2 操作 2(插入和更新)

原表数据插入6条数据,更新380条数据。使用Spark查询的HDFS数据变化如下:

重复提交数据 370。使用Spark进行增量查询时出现如下错误

21/07/30 14:25:45 ERROR executor.Executor: Exception in task 0.0 in stage 2.0 (TID 4)
java.io.FileNotFoundException: File does not exist: hdfs://hdp-jk-1:8020/user/hive/warehouse/test_increment_hudi9_mor/2021/07/30/4fe43850-4be8-447f-827e-edfdba44adb4-0_0-34 0-294_20210730142459.parquet

使用hadoop命令查询instantTime的'20210730142459'的parquet,发现实际writetoken为'341-295',而查询到的writetoken为'340-294',说明文件又被写入了。因此,writetoken 被更改,导致 Spark 递增无效或不存在的 Parquet 文件

我们发现数据报 InstantTime '20210730142459' 被压缩一次,导致数据报重写和 writetoken 更改。

2 排除其他因素

我们有一个新的插入操作,没有生成日志文件,我们还没有执行压缩操作。但是,只要更新插入一对原始表,就会生成并压缩日志。

3 解决方

之前针对错误数据的尝试,

查询campAction的状态:

在 HUDi-cli 上运行“compaction repair --instant 20210730112532”命令。 sh 服务器修复压缩。

3.2 解决方案 2

调整 Hudi 压缩操作,例如 hoodie.com paction. Strategy。尚未找到有用的调整策略。

已经尝试过,但是 upsert 导致增量查询失败并没有帮助。

希望大家能指出正确的解决方法,谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)