首页/数据/数据工程与 ETL 速查/小文件问题与治理
管道基础52 条

小文件问题与治理

大量小文件会抬高元数据压力与扫描开销:每读一个文件都有打开、寻址与统计成本。治理思路是写入侧控制文件数量,读侧用 AQE/合并任务兜底。

成因流式小批写入、并行度过多、分区粒度过细
影响元数据压力、任务启动慢、扫描效率低
治理合并文件、控制并行度、AQE 自动合并、定期 compaction

Spark AQE 合并小分区

Spark AQE 合并小分区
spark.sql.adaptive.enabled=true
spark.sql.adaptive.coalescePartitions.enabled=true
spark.sql.adaptive.advisoryPartitionSizeInBytes=64MB

Hive ORC 合并相邻小文件

Hive ORC 合并相邻小文件
ALTER TABLE dwd_order PARTITION (dt='2026-10-11') CONCATENATE;
按“天+小时+分钟”过多粒度分区是常见制造小文件的方式,分区粒度要与查询模式匹配。

易错点

  • 用简单的 getmerge 合并大目录会单点拷贝,成本高且难增量
  • 流式写入不做 compaction,小文件数量会随时间线性增长

数据来源与参考

  • Apache Spark 官方文档:Adaptive Query Execution
  • Apache Hive LanguageManual:ORC CONCATENATE
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌