@[目录]
0 原因猜测
每次我们更新目标时,hoodie 都会生成一个日志并对其进行压缩,从而导致该时间点之前的任何增量查询终止。
1
以下是与原始标签有关的所有操作。
1.1 操作一(更新)
先对原表进行upsert操作(更新370条数据),然后进行增量查询,结果成功
使用hadoop命令查询HDFS文件,出现log log,数据写入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 方案二
调整 Hudi 压缩操作,如hoodie.com paction. Strategy
. 尚未找到有用的调整策略。
已经进行了尝试,但是 upsert 导致增量查询失败并没有帮助。
希望大家能指出正确的解决方法,谢谢。