HDFS小文件处理
HDFS 小文件处理全攻略:问题到底在哪?怎么治?
HDFS 对大文件很友好,但小文件是它的”天敌”。
几 KB 的日志、几 MB 的图片、一堆零散的小 JSON——如果数量到了百万级,HDFS 的性能就会急剧下降。不是磁盘不够,是 NameNode 的内存扛不住。
小文件为什么是问题?根源在 NameNode
小文件的危害,根源是 HDFS 的架构设计。
1. NameNode 内存被撑爆
每个文件/目录的元数据在 NameNode 内存中大约占 150 字节。看起来不大,但数量上去就恐怖了:
- 1 亿个小文件 → 约 15GB 内存
- 10 亿个小文件 → 约 150GB 内存
NameNode 的内存是有限的(通常 64GB-256GB),元数据占满了,整个集群就不稳定了。
2. 计算框架的任务爆炸
MapReduce、Spark 通常按块划分任务。1 亿个 1MB 小文件 → 1 亿个 Map 任务。任务启动、调度、销毁的开销远超实际计算时间,作业跑不动。
3. 存储浪费
1MB 文件在 128MB 块大小下,磁盘只占 1MB,但元数据按一个块算(约 150 字节)。浪费的是 NameNode 内存,不是磁盘空间。