总结
指标
|
合并前
|
合并后(因测试中多次合并,数据会偏多)
|
---|---|---|
查询速度 | 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分钟左右
三、合并后性能统计
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表小文件项目