一说 HDFS 小文件治理,最常见的动作是安排一个夜间任务,把昨天的文件再合并一次。这个办法能让目录暂时好看一些,却很容易变成另一条长期运行的数据链路:白天持续制造小文件,晚上再花计算和 IO 把它们重写。
我不太赞成先上合并任务。小文件是一种结果,产生它的地方可能是过细的 Hive 分区、过多的 Reducer、流任务滚动过快,也可能是同步工具为每个并发通道各写一个文件。没有先找到生产者,存量清理得越勤,平台越难看清真正的写入模型。
这篇文章以 Hadoop 3.3.0 的文档和源码为准,先确认小文件到底给 HDFS 增加了什么负担,再讨论 concat、HAR 和重写任务各自适合做什么。