理论概述
每个文件均按块存储,每个块的元数据存储在 namenode 的内存中,因此 hadoop 存储小文件会非常低效。因为大量的小文件会耗尽 namenode 中的大部分内存。但注意,存储小文件所需要的磁盘容量和存储这些文件原始内容所需要的磁盘空间相比也不会增多。例如, 一个 1MB 的文件以大小为 128MB 的块存储,使用的是 1MB 的磁盘空间,而不是 128MB。
Hadoop 存档文件或 HAR 文件,是一个更高效的文件存档工具,它将文件存入 HDFS 块,在减少 namenode 内存使用的同时,允许对文件进行透明的访问。具体说来,Hadoop 存档文件可以用作 MapReduce 的输入。
- 案例实操
需要启动 yarn 进程
[qianfeng@hadoop102 hadoop-2.7.2]$ start-yarn.sh
1. 归档文件
归档成一个叫做 xxx.har 的文件夹,该文件夹下有相应的数据文件。Xx.har 目录是一个整体,该目录看成是一个归档文件即可。
[qianfeng@hadoop102 hadoop-2.7.2]$ bin/hadoop archive -archiveName myhar.har -p /user/qianfeng /user/my
2. 查看归档
[qianfeng@hadoop102 hadoop-2.7.2]$ hadoop fs -lsr /user/my/myhar.har
[qianfeng@hadoop102 hadoop-2.7.2]$ hadoop fs -lsr har:///myhar.har
3. 解归档文件
[qianfeng@hadoop102 hadoop-2.7.2]$ hadoop fs -cp har:/// user/my/myhar.har /*
/user/qianfeng