1. HDFS 存储小文件的弊端
HDFS中每个文件、目录、数据块的元数据存储大约占150字节,不管文件是大是小,因此HDFS存储小文件会非常低效。存储大量小文件会耗尽NameNode中的大部分内存。
但注意,存储小文件所需要的磁盘容量和数据块的大小无关。例如,一个1MB的文件设置为128MB的块存储,实际使用的是1MB的磁盘空间,而不是128MB。
2. 优化小文件存储
2.1. 解决方法1:小文件归档
HDFS存档文件(HAR文件),是HDFS2.X的新特性,是一个更高效的文件存档工具,它将文件存入HDFS块,在减少NameNode内存使用的同时,允许对文件进行透明的访问。
具体说来,HDFS存档文件对内还是个一个独立文件,对NameNode而言却是个整体,减少了 NameNode的内存。
例如:将1.txt、2.txt、3.txt归档成一个har文件。对于NameNode而言只有一个har文件。但是client还是可以访问其中一个单独的文件

2.1.1. 启动HDFS和YARN
归档是一个MapReduce程序,如果已经配置了MapReduce运行在YARN上,就要启动YARN
1 | start-dfs.sh |
2.1.2. 执行归档操作
1 | # 将/input作为输入目录,/output作为输出目录,打包的文件名为input.har(强制要求以har为后缀) |
查看结果目录。用har协议才能查看har归档的内容
1 | $ hdfs dfs -ls /output # 生成一个input.har目录,就是归档 |