HDFS之小文件归档

90 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情

 在实际生产应用总难免会遇到一些小文件,而对于任何一个文件块来说,无论块本身的大小如何,他们的元数据都会在内存中占用150个字节,如果系统中存储了大量的小文件,那么就会造成较大的资源浪费,所以我们会对小文件进行归档,使多个小文件当作一个文件去占用内存中的150个字节。实现如下:

  • 启动yarn

该过程背后实际上是MapReduce在操作,所以要确保yarn进程是启动的。

[root@hadoop302 sbin]# ./start-yarn.sh
  • 上传多个测试小文件
[root@hadoop301 hadoop-3.1.3]# cd testdata/;ll
total 32
-rw-r--r--. 1 root root  43 Jul 30 08:39 dept.txt
-rw-r--r--. 1 root root  78 Jul 30 08:38 employee.txt
-rw-r--r--. 1 root root  72 Jul 24 08:36 testcombine1.txt
-rw-r--r--. 1 root root  88 Jul 24 08:37 testcombine2.txt
-rw-r--r--. 1 root root  24 Jul 24 08:37 testcombine3.txt
-rw-r--r--. 1 root root 351 Jul 24 08:38 testcombine4.txt
-rw-r--r--. 1 root root 381 Jul 24 08:39 testcombine5.txt
-rw-r--r--. 1 root root  69 Jul 29 09:22 testorder.txt
[root@hadoop301 testdata]# pwd
/usr/local/wyh/software/hadoop-3.1.3/testdata
[root@hadoop301 testdata]# hdfs dfs -mkdir /testmultiplefile
[root@hadoop301 testdata]# hdfs dfs -put testcombine*.txt /testmultiplefile

  •  归档小文件
[root@hadoop301 testdata]# hadoop archive -archiveName multipleinput.har -p /testmultiplefile /multipleoutput

#multipleinput.har表示多个文件归档后的名字
#/testmultiplefile表示要归档的文件目录
#/multipleoutput表示归档后文件输出的目录
  • 查看归档后的文件

 查看part-0文件时,会发现此时我们能查看到的是各个小文件合并在一起的内容:

 可以使用har协议头查看具体的各个小文件:

[root@hadoop301 testdata]# hdfs dfs -ls har:///multipleoutput/multipleinput.har

 这样,当我们需要使用这些小文件时,可以将他们拷贝到指定目录下:

[root@hadoop301 testdata]# hdfs dfs -cp har:///multipleoutput/multipleinput.har/testcombine2.txt /

这样就简单地实现了HDFS中小文件的归档。