弊端

每个文件均按块存储,每个块的元数据存储在namenode的内存,因此hadoop存储小文件会非常低效.

因为大量的小文件会耗尽namenode中的大部分内存.但注意,存储小文件所需要的磁盘容量和存储这些文件原始内容所需要的磁盘空间相比也不会增多

例如,一个1MB的文件以大小为128M的块存储,使用的是1M的磁盘空间,而不是128M

解决

hadoop存档文件或HAR文件,是一个更高效的文件存档工具,它将文件存入HDFS块,在减少namenode内存使用的同时,允许对文件进行透明的访问.具体来说,hadoop存档文件对内还是一个一个独立文件,对namenode而言却是一个整体,减少了namenode的内存使用的同时,允许对文件进行透明的访问.

具体来说,hadoop存档文件对内还是一个一个独立文件,对namenode而言却是一个整体,减少了namenode的内存

例子

启动yarn进程

  1. start-yarn.sh

归档文件
把/user/x目录里面的所有文件归档成一个叫myhar.har的归档文件,并把归档后文件存储到/user/my路径下

hadoop archive -archiveName myhar.har -p /user/x /user/my

查看归档

hadoop fs -lsr /user/my/myhar.har

hadoop fs -lsr har:///user/my/myhar.har

解开归档文件

hadoop fs -cp har:///user/my/myhar.har /*