HDFS存储小文件的弊端
HDFS文件的元数据存放在NameNode,大量的小文件会导致NamenNode内存耗尽。
HDFS提供了一种针对小文件的归档方案,NameNode将多个小文件归档后的文件视为一个整体,所以可以大大降低元数据的开销。但是对于用户访问来说却是透明的,仍然可以可以对每个文件单独访问。
案例
-
文件归档需要执行mapreduce任务,所以要确保yarn服务正常启动。
./bin/star-yarn.sh
-
文件归档
原始目录/input有3个小文件,分别为a.txt, b.txt, c.txt[root@master hadoop-2.6.5]# ./bin/hdfs dfs -ls /input Found 3 items -rw-r--r-- 2 root supergroup 12 2019-12-05 20:32 /input/a.txt -rw-r--r-- 2 root supergroup 12 2019-12-05 20:32 /input/b.txt -rw-r--r-- 2 root supergroup 12 2019-12-05 20:32 /input/c.txt
将input目录归档成input.har
[root@master hadoop-2.6.5]# ./bin/hadoop archive -archiveName input.har -p /input /output
查看归档文件
[root@master hadoop-2.6.5]# ./bin/hdfs dfs -ls /output Found 1 items drwxr-xr-x - root supergroup 0 2019-12-05 21:24 /output/input.har
-
访问归档文件
[root@master hadoop-2.6.5]# ./bin/hdfs dfs -ls har:///output/input.har Found 3 items -rw-r--r-- 2 root supergroup 12 2019-12-05 20:32 har:///output/input.har/a.txt -rw-r--r-- 2 root supergroup 12 2019-12-05 20:32 har:///output/input.har/b.txt -rw-r--r-- 2 root supergroup 12 2019-12-05 20:32 har:///output/input.har/c.txt [root@master hadoop-2.6.5]# ./bin/hdfs dfs -cat har:///output/input.har/a.txt hello a.txt
-
解归档文件
[root@master hadoop-2.6.5]# ./bin/hdfs dfs -cp har:///output/input.har/* /test [root@master hadoop-2.6.5]# ./bin/hdfs dfs -ls /test Found 3 items -rw-r--r-- 2 root supergroup 12 2019-12-05 21:30 /test/a.txt -rw-r--r-- 2 root supergroup 12 2019-12-05 21:30 /test/b.txt -rw-r--r-- 2 root supergroup 12 2019-12-05 21:30 /test/c.txt