flinkcdc 写入 hudi 没有生成 parquet 文件,整个过程也没有报错,大家有遇到过吗? 这个解释对吗 ?MOR 模式可能没有 parquet文件.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您提到使用 Flink CDC 写入 Hudi 时没有生成 Parquet 文件,并且整个过程没有报错,同时提出了一个可能的解释:MOR 模式可能没有 Parquet 文件。以下是对该问题的详细解答。
Hudi 支持两种表类型:
Copy On Write (COW)
Merge On Read (MOR)
因此,在 MOR 模式下,如果没有触发 COMPACTION 操作,则只会生成 Avro Log 文件,而不会生成 Parquet 文件。
根据知识库中的说明,Hudi 的 Merge On Read 表默认开启异步压缩(COMPACTION),但压缩任务的触发条件是基于以下参数配置的:
compaction.delta_commits
:每隔多少次提交触发一次压缩,默认值为 5。compaction.delta_seconds
:每隔多少秒触发一次压缩,默认值为 3600 秒(1 小时)。如果您的写入频率较低,或者未达到上述压缩触发条件,则不会生成 Parquet 文件,只有 Avro Log 文件存在。
可以通过以下方式确认表的类型:
.hoodie
目录下的 hoodie.properties
文件),查看 hoodie.table.type
参数:
COPY_ON_WRITE
,则为 COW 表。MERGE_ON_READ
,则为 MOR 表。如果您希望在 MOR 模式下生成 Parquet 文件,可以采取以下措施:
hudi-cli.sh compaction scheduleAndExecute --base-path <path_to_hudi_table> --table-type MERGE_ON_READ
compaction.delta_commits
和 compaction.delta_seconds
参数,降低压缩触发的阈值。例如:
compaction.delta_commits=2
compaction.delta_seconds=600
这样可以更快地触发压缩任务,从而生成 Parquet 文件。
您的解释是正确的: 在 Merge On Read (MOR) 模式下,如果没有触发 COMPACTION 操作,则只会生成 Avro Log 文件,而不会生成 Parquet 文件。建议根据实际需求调整压缩参数或手动触发 COMPACTION 操作,以生成 Parquet 文件。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。