表治理-Iceberg小文件合并测试

总结

指标
合并前
合并后(因测试中多次合并,数据会偏多)
查询速度 246秒 13秒
表总大小 9.2G 26.4G
单个文件大小 1-25MB 60MB左右
metadata目录文件数 37 75
data目录文件数 900 1501

小文件合并后历史版本数据不会自动清理,需要做快照清理

快照清理参考:Iceberg过期快照清理

 

一、合并前性能统计

1、查询速度(4分钟多)

select count(1) from order_info1;

2、表总大小

hdfs dfs -du -h /user/hive/warehouse/data_lake_ods.db/order_info1


3、单个文件大小例子

4、文件数量

hdfs dfs -du -h /user/hive/warehouse/data_lake_ods.db/order_info1/data

路径:/user/hive/warehouse/data_lake_ods.db/order_info1/data

文件数:900

路径:/user/hive/warehouse/data_lake_ods.db/order_info1/metadata

文件数:37

二、合并任务资源使用情况

1、处理数据表中已删除的数据(仅超1亿大表才执行)

如果是大表,则先执行max-file-group-size-bytes=1处理删除文件。max-concurrent-file-group-rewrites设置为maxExecutors个数最快

CALL iceberg_catalog.system.rewrite_data_files(
table => 'data_lake_ods.order_info1',
options => map(
  'max-concurrent-file-group-rewrites','15',
  'max-file-group-size-bytes','1',
  'rewrite-all','true'
  )
);
 

任务使用的10并行度,单executor执行一个任务,大概20秒左右处理一个数据文件

共计2.8亿条数据表,任务执行时长15分钟左右。

2、开始合并小文件(分组大小1GB,生成文件64MB)

CALL iceberg_catalog.system.rewrite_data_files(
table => 'data_lake_ods.order_info1',
options => map(
  'max-concurrent-file-group-rewrites','15',
  'max-file-group-size-bytes','1073741824',
  'target-file-size-bytes','67108864',
  'rewrite-all','true'
  )
);
 
合并方法2大宽表直接合并:
CALL spark_catalog.system.rewrite_data_files(
table => 'data_lake_ods.order_info1',
options => map(
  'partial-progress.enabled', 'true',
  'rewrite-job-order', 'bytes-asc',
  'partial-progress.max-commits', '10000',
  'max-file-group-size-bytes', '1073741824',
  'rewrite-all','true'
  )
);

合并小文件执行时长2分钟左右

官网文档:https://iceberg.apache.org/docs/latest/spark-procedures/

其它优化参数

1)rewrite-job-order=bytes-asc
说明:根据该值强制指定重写作业顺序
    bytes-asc:则首先重写最小的作业组。
    bytes-desc:则首先重写最大的作业组。
    files-asc:则首先重写文件最少的作业组。
    files-desc:则首先重写文件最多的作业组。
    none(默认):则按照计划的顺序重写作业组(无特定顺序)。
2)target-file-size-bytes
说明:目标输出文件大小
默认值:536870912512 MB)
可以修改成:67108864(64MB)

三、合并后性能统计

1、查询速度(13秒)

2、表总大小(26.4G)

3、单个文件大小例子

4、文件数量

hdfs dfs -du -h /user/hive/warehouse/data_lake_ods.db/order_info1/data

路径:/user/hive/warehouse/data_lake_ods.db/order_info1/data

文件数:1501

路径:/user/hive/warehouse/data_lake_ods.db/order_info1/metadata

文件数:75

 

 

 

 

 

 

 

 

参考文章:

1、Spark 合并 Iceberg 小文件内存溢出问题定位和解决方案

https://xie.infoq.cn/article/50259945d7663d7194a5e2763

2、通过flink、spark优化iceberg表小文件项目

https://github.com/zhuxiaoshang/flink-be-god/blob/master/flink-iceberg/src/main/java/flink/iceberg/compaction/SparkCompaction.java

 

posted @ 2024-01-02 10:27  黑水滴  阅读(509)  评论(0编辑  收藏  举报