标签:
hdfs并不擅长存储小文件,因为每个文件最少一个block,每个block的元数据都会在NameNode中占用150byte内存。如果存储大量的小文件,它们会吃掉NameNode节点的大量内存。
Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具。它能将多个小文件打包成一个HAR文件,这样在减少NameNode内存使用的同时,仍然允许对小文件进行透明的访问,比如作为MapReduce的输入。
使用方法:
1). 归档前的目录结构
[root@ncst mapreduce]# hadoop fs -lsr /test/in drwxr-xr-x - root supergroup 0 2015-08-26 02:35 /test/in/har drwxr-xr-x - root supergroup 0 2015-08-22 12:02 /test/in/mapjoin -rw-r--r-- 1 root supergroup 39 2015-08-22 12:02 /test/in/mapjoin/address.txt -rw-r--r-- 1 root supergroup 129 2015-08-22 12:02 /test/in/mapjoin/company.txt drwxr-xr-x - root supergroup 0 2015-08-25 22:27 /test/in/small -rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 /test/in/small/small.1 -rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 /test/in/small/small.2 -rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 /test/in/small/small.3 -rw-r--r-- 1 root supergroup 3 2015-08-25 22:27 /test/in/small/small_data
2). 归档命令
可以通过参数 -D har.block.size 指定HAR的大小
/* 归档命令
* -archiveName 0825.har : 指定归档后的文件名
* -p /test/in/ : 被归档文件所在的父目录
* small mapjoin : 要被归档的目录(small和mapjoin)
* /test/in/har : 生成的归档文件存储目录
*/
hadoop archive -archiveName 0825.har -p /test/in/ small mapjoin /test/in/har
3). 归档后的目录结构
[root@ncst ~]# hadoop fs -lsr /test/in drwxr-xr-x - root supergroup 0 2015-08-26 02:56 /test/in/har drwxr-xr-x - root supergroup 0 2015-08-26 02:56 /test/in/har/0825.har -rw-r--r-- 1 root supergroup 0 2015-08-26 02:56 /test/in/har/0825.har/_SUCCESS -rw-r--r-- 5 root supergroup 665 2015-08-26 02:56 /test/in/har/0825.har/_index -rw-r--r-- 5 root supergroup 23 2015-08-26 02:56 /test/in/har/0825.har/_masterindex -rw-r--r-- 1 root supergroup 174 2015-08-26 02:56 /test/in/har/0825.har/part-0 drwxr-xr-x - root supergroup 0 2015-08-22 12:02 /test/in/mapjoin -rw-r--r-- 1 root supergroup 39 2015-08-22 12:02 /test/in/mapjoin/address.txt -rw-r--r-- 1 root supergroup 129 2015-08-22 12:02 /test/in/mapjoin/company.txt drwxr-xr-x - root supergroup 0 2015-08-25 22:27 /test/in/small -rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 /test/in/small/small.1 -rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 /test/in/small/small.2 -rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 /test/in/small/small.3 -rw-r--r-- 1 root supergroup 3 2015-08-25 22:27 /test/in/small/small_data
4). 查看结果文件【part-0】内容
[root@ncst ~]# hadoop fs -cat /test/in/har/0825.har/part-0 1231231 Beijing 2 Guangzhou 3 Shenzhen 4 XianBeijing Red Star 1 Shenzhen Thunder 3 Guangzhou Honda 2 Beijing Rising 1 Guangzhou Development Bank 2 Tencent 3
5). 使用har uri去访问
HAR是在HDFS之上的一个文件系统,因此所有 fs shell 命令对HAR文件均可用,只不过是文件路径格式不一样
[root@ncst ~]# hadoop fs -lsr har:///test/in/har/0825.har
drwxr-xr-x - root supergroup 0 2015-08-22 12:02 har:///test/in/har/0825.har/mapjoin
-rw-r--r-- 1 root supergroup 39 2015-08-22 12:02 har:///test/in/har/0825.har/mapjoin/address.txt
-rw-r--r-- 1 root supergroup 129 2015-08-22 12:02 har:///test/in/har/0825.har/mapjoin/company.txt
drwxr-xr-x - root supergroup 0 2015-08-25 22:27 har:///test/in/har/0825.har/small
-rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 har:///test/in/har/0825.har/small/small.1
-rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 har:///test/in/har/0825.har/small/small.2
-rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 har:///test/in/har/0825.har/small/small.3
-rw-r--r-- 1 root supergroup 3 2015-08-25 22:27 har:///test/in/har/0825.har/small/small_data
6). 用har uri访问下一级目录
[root@ncst ~]# hdfs dfs -lsr har:///test/in/har/0825.har/small -rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 har:///test/in/har/0825.har/small/small.1 -rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 har:///test/in/har/0825.har/small/small.2 -rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 har:///test/in/har/0825.har/small/small.3 -rw-r--r-- 1 root supergroup 3 2015-08-25 22:27 har:///test/in/har/0825.har/small/small_data
7). 远程访问,可以使用以下命令
//hdfs-ncst:9000 其中,ncst是NameNode所在节点的HostName [root@ncst ~]# hadoop fs -lsr har://hdfs-ncst:9000/test/in/har/small.har lsr: DEPRECATED: Please use ‘ls -R‘ instead. drwxr-xr-x - root supergroup 0 2015-08-25 22:27 har://hdfs-ncst:9000/test/in/har/small.har/small -rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 har://hdfs-ncst:9000/test/in/har/small.har/small/small.1 -rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 har://hdfs-ncst:9000/test/in/har/small.har/small/small.2 -rw-r--r-- 1 root supergroup 1 2015-08-25 22:17 har://hdfs-ncst:9000/test/in/har/small.har/small/small.3 -rw-r--r-- 1 root supergroup 3 2015-08-25 22:27 har://hdfs-ncst:9000/test/in/har/small.har/small/small_data
存在的问题:
标签:
原文地址:http://www.cnblogs.com/skyl/p/4758364.html