HDFS并不擅长存储小文件,因为每个文件最少一个block,每个block的元数据都会在NameNode占用内存,如果存在大量的小文件,它们会吃掉NameNode节点的大量内存。
Hadoop Archives可以有效的处理以上问题,它可以把多个文件归档成为一个文件,归档成一个文件后还可以透明的访问每一个文件。
1、Arichive文件是一个打包文件,但是不会对文件进行压缩
2、Arichive文件归档之后,我们还可以透明的访问其中的每一个小文件
3、Archive主要解决HDFS不擅长存储小文件问题
4、Archive过程是一个MapReduce任务
5、Archive之后,原来的文件依然保留
0、数据准备
hadoop fs -mkdir /config
cd /export/server/hadoop-3.3.0/etc/hadoop
hadoop fs -put *.xml /config
1、创建一个归档文件
#将/config目录的所有文件进行归档(打包),打包后的文件命名为test.har,并且把打包后的test.har存放在/outputdir目录
hadoop archive -archiveName test.har -p /config /outputdir
2、查看打包后的归档文件
hadoop fs -cat /outputdir/test.har/part-0
3、查看规定文件中所有小文件的名字
hadoop fs -ls har://hdfs-node1:8020/outputdir/test.har
hadoop fs -ls har:///outputdir/test.har #如果客户端