更新时间:2025-07-01 GMT+08:00
分享

性能篇

如何快速判断Hudi表的性能影响点?

  1. 排查索引。
    1. 执行desc formatted 库名.表名,查询Hudi表的location属性,这个是Hudi表的物理路径(一般是HDFS路径和OBS路径)。
    2. 在Hudi表物理路径下“.hoodie”目录的“hoodie.index.properties”文件中可以看到索引信息,这里的索引最准确。因为用户可能在建表的时候把索引写错了,导致最终的索引并不是预期的索引。
    3. 检查索引是否合理。
      • cow表在更新场景(insert into,upsert)推荐用SIMPLE索引,在非更新场景(insert overwrite)推荐用BUCKET索引。BLOOM索引,更新数据量越大,假阳性率越高,性能越慢,不推荐。
      • mor表推荐用BUCKET索引。
      • 超过千万级以上数据量,建议mor表+BUCKET+分区,cow表在大数量场景下SIMPLE索引和BLOOM索引写的文件有点多,BUCKET索引会导致cow表的写放大问题更加严重,不推荐cow表。
  2. 排查BUCKET索引分桶。
    1. 执行desc formatted 库名.表名,查询Hudi表的location属性,这个是Hudi表的物理路径(一般是HDFS路径和OBS路径)。
    2. 在Hudi表的物理路径检查每个bucket桶下的parquet文件大小,大小在300M以内视为合理。文件size越大,性能越受影响,超过1GB,读写将会非常之慢。
  3. 排查Hudi表物理目录。
    1. 执行desc formatted 库名.表名,查询Hudi表的location属性,这个是Hudi表的物理路径(一般是HDFS路径和OBS路径)。
    2. 从Hudi表目录排查以下方向:
      • 分区或者非分区。千万级以上数据量必须用分区或者BUCKET索引分桶,避免全表更新,可以指定分区条件来更新和读取。更新的文件越多,写性能越慢。
      • 文件数量和文件大小。SIMPLE索引和BLOOM索引注意排查Hudi表现存的文件数量和增量数据的更新范围,BUCKET索引排查parquet文件的大小。
      • cow表/mor表的clean是否正常,参考Clean篇。其中insert overwrite场景,clean保留的历史越多,读写性能越慢。
      • cow表/mor表的archive是否正常,参考Archive篇。“.hoodie”目录下的元数据越多,读写性能越慢。
      • mor表一定要检查compaction是否正常,log文件越多,读写性能越慢。

相关文档