表治理-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 说明:目标输出文件大小 默认值: 536870912 ( 512 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表小文件项目
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期