flinkcdc 写入 hudi 没有生成 parquet 文件,整个过程也没有报错,大家遇到过吗?

flinkcdc 写入 hudi 没有生成 parquet 文件,整个过程也没有报错,大家有遇到过吗? 这个解释对吗 ?MOR 模式可能没有 parquet文件.84c5f3fd423dddf69290b3d529a43109.png

展开
收起
小小鹿鹿鹿 2024-04-15 19:23:10 107 分享 版权
阿里云 AI 助理回答

问题分析

您提到使用 Flink CDC 写入 Hudi 时没有生成 Parquet 文件,并且整个过程没有报错,同时提出了一个可能的解释:MOR 模式可能没有 Parquet 文件。以下是对该问题的详细解答。


1. Hudi 的两种表类型及其存储机制

Hudi 支持两种表类型:

  • Copy On Write (COW)

    • 数据以 Parquet 格式存储。
    • 更新操作通过重写 Parquet 文件实现。
    • 每次写入都会直接生成 Parquet 文件。
  • Merge On Read (MOR)

    • 数据以列式文件(Parquet)和行式文件(Avro Log)混合存储。
    • 最新写入的增量数据会先存储在 Avro Log 文件中。
    • 只有在执行 COMPACTION 操作后,增量数据才会合并到 Parquet 文件中。

因此,在 MOR 模式下,如果没有触发 COMPACTION 操作,则只会生成 Avro Log 文件,而不会生成 Parquet 文件。


2. 为什么 MOR 模式可能没有 Parquet 文件?

根据知识库中的说明,Hudi 的 Merge On Read 表默认开启异步压缩(COMPACTION),但压缩任务的触发条件是基于以下参数配置的:

  • compaction.delta_commits:每隔多少次提交触发一次压缩,默认值为 5。
  • compaction.delta_seconds:每隔多少秒触发一次压缩,默认值为 3600 秒(1 小时)。

如果您的写入频率较低,或者未达到上述压缩触发条件,则不会生成 Parquet 文件,只有 Avro Log 文件存在。


3. 如何验证当前表是否为 MOR 模式?

可以通过以下方式确认表的类型:

  • 检查 Hudi 表的元数据文件(.hoodie 目录下的 hoodie.properties 文件),查看 hoodie.table.type 参数:
    • 如果值为 COPY_ON_WRITE,则为 COW 表。
    • 如果值为 MERGE_ON_READ,则为 MOR 表。

4. 解决方案

如果您希望在 MOR 模式下生成 Parquet 文件,可以采取以下措施:

(1)手动触发 COMPACTION

  • 使用 Hudi 提供的 CLI 工具或 API 手动触发 COMPACTION 操作。
  • 示例命令:
    hudi-cli.sh compaction scheduleAndExecute --base-path <path_to_hudi_table> --table-type MERGE_ON_READ
    

(2)调整压缩参数

  • 修改 compaction.delta_commitscompaction.delta_seconds 参数,降低压缩触发的阈值。例如:
    compaction.delta_commits=2
    compaction.delta_seconds=600
    

    这样可以更快地触发压缩任务,从而生成 Parquet 文件。

(3)切换为 COW 模式

  • 如果您的业务场景不需要 MOR 的低延迟特性,可以考虑将表类型切换为 COW 模式。COW 模式每次写入都会直接生成 Parquet 文件。

5. 重要提醒

  • MOR 模式的适用场景:MOR 模式适合需要低延迟写入和高吞吐量的场景,但查询性能可能会受到在线合并日志数据的影响。
  • COW 模式的适用场景:COW 模式适合对查询性能要求较高的场景,但写入性能可能会因频繁重写 Parquet 文件而受到影响。

结论

您的解释是正确的: 在 Merge On Read (MOR) 模式下,如果没有触发 COMPACTION 操作,则只会生成 Avro Log 文件,而不会生成 Parquet 文件。建议根据实际需求调整压缩参数或手动触发 COMPACTION 操作,以生成 Parquet 文件。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

还有其他疑问?
咨询AI助理