大量小文件不适合存储于HDFS的原因
1、小文件过多,会过多占用namenode的内存,并浪费block。
- 文件的元数据(包括文件被分成了哪些blocks,每个block存储在哪些服务器的哪个block块上),都是存储在namenode上的。
HDFS的每个文件、目录、数据块占用150B,因此300M内存情况下,只能存储不超过300M/150=2M个文件/目录/数据块的元数据
- dataNode会向NameNode发送两种类型的报告:增量报告和全量报告。
增量报告是当dataNode接收到block或者删除block时,会向nameNode报告。
全量报告是周期性的,NN处理100万的block报告需要1s左右,这1s左右NN会被锁住,其它的请求会被阻塞。
2、文件过小,寻道时间大于数据读写时间,这不符合HDFS的设计:
HDFS为了使数据的传输速度和硬盘的传输速度接近,则设计将寻道时间(Seek)相对最小化,将block的大小设置的比较大,这样读写数据块的时间将远大于寻道时间,接近于硬盘的传输速度。