HDFS(Hadoop Distributed File System)被设计为用来处理超大文件(通常是GB、TB、PB级别)和流式数据访问模式的。它非常不适合存储海量小文件(小文件通常指大小远小于HDFS默认块大小,如小于128MB的文件)。 导致这一限制的原因主要集中在元数据管理、读写性能以及计算框架的开销三个方面。以下是详细的深度剖析: 1. NameNode 的内存瓶颈(最核心原因) HDFS的架构是 Master/Slave 结构,其中 NameNode(主节点)负责管理文件系统的命名空间(即元数据:文件名、目录结构、文件到块的映射关系等)。 内存占用固定: 在 NameNode 中,每一个文件、目录和数据块(Block)都会作为一个对象存储在内存中。无论这个文件是 1KB 还是 128MB,它在 NameNode 中占用的元数据大小几乎是一样的(大约 150字节)。 算一笔账: 如果你有 1000 万个 10KB 的小文件,实际数据量只有约 100GB。但为了管理这些文件,NameNode 需要在内存中维护 1000 万个文件对象和 1000 万个块对象,占用约 3G...