解读:Hadoop Archive

hdfs并不擅长存储小文件,因为每个文件最少一个block,每个block的元数据都会在NameNode中占用150byte内存。如果存储大量的小文件,它们会吃掉NameNode节点的大量内存。

Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具。它能将多个小文件打包成一个HAR文件,这样在减少NameNode内存使用的同时,仍然允许对小文件进行透明的访问,比如作为MapReduce的输入。

使用方法:

 1). 归档前的目录结构

[[email protected] 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). 归档后的目录结构

[[email protected] ~]# 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】内容

[[email protected] ~]# 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文件均可用,只不过是文件路径格式不一样

[[email protected] ~]# 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访问下一级目录

[[email protected] ~]# 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
[[email protected] ~]# 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

存在的问题:

  1. 存档文件的源文件及目录都不会自动删除,需要手动删除
  2. 存档过程实际是一个MapReduce过程,所以需要hadoop的MapReduce支持
  3. 存档文件本身不支持压缩
  4. 存档文件一旦创建便不可修改,要想从中删除或增加文件,必须重新建立存档文件
  5. 创建存档文件会创建原始文件的副本,所以至少需要有与存档文件容量相同的磁盘空间
时间: 08-23

解读:Hadoop Archive的相关文章

Hadoop小文件解决之道之一 Hadoop archive

简介 hdfs并不擅长存储小文件,因为每个文件最少一个block,每个block的元数据都会在namenode节点占用内存,如果存在这样大量的小文件,它们会吃掉namenode节点的大量内存. hadoop Archives可以有效的处理以上问题,他可以把多个文件归档成为一个文件,归档成一个文件后还可以透明的访问每一个文件,并且可以做为mapreduce任务的输入. 用法 hadoop Archives可以使用archive工具创建,同上一篇讲的distcp一样,archive也是一个mapre

一步一步跟我学习hadoop(3)----hadoop命令手册

上节我们学习了hadoop的eclipse插件安装和wordcount程序的运行,本篇对hadoop命令进行一个系统的了解 hadoop的命令通过HADOOP_HOME\bin\hadoop命令触发,我们可以在命令行执行 hadoop --help 来提示用户的命令输入. hadoop命令分为两大类:用户命令和管理命令,以下是hadoop命令的详细解读 本篇博客是摘自官网http://hadoop.apache.org/docs/r1.0.4/cn/commands_manual.html 0概

Hadoop学习笔记(3) Hadoop文件系统二

1 查询文件系统 (1) 文件元数据:FileStatus,该类封装了文件系统中文件和目录的元数据,包括文件长度.块大小.备份.修改时间.所有者以及版权信息.FileSystem的getFileStatus()方法用于获取文件或目录的FileStatus对象. 例:展示文件状态信息 public class ShowFileStatusTest{ private MiniDFSCluster cluster; private FileSystem fs; @Before public void

Hadoop Shell 介绍

以 hadoop 2.7.3 为例 bin 目录下是最基础的集群管理脚本, 用户可通过该脚本完成各种功能, 如 HDFS 管理, MapReduce 作业管理等. 作为入门, 先介绍bin 目录下的 hadoop 脚本的使用方法, 如下所示:   参考 官网的Hadoop 命令参考 Usage: hadoop [--config confdir] [COMMAND | CLASSNAME] CLASSNAME run the class named CLASSNAME or where COMM

关于hadoop处理大量小文件情况的解决方法

小文件是指那些size比HDFS的block size(默认64m)小的多的文件.任何一个文件,目录和bolck,在HDFS中都会被表示为一个object存储在namenode的内存中,每一个object占用150bytes的内存空间.所以,如果有10milion个文件,每一个文件对应一个block,那么就会消耗namenode 3G来保存这些block的信息.如果规模再大一点,那么将会超出现阶段计算机硬件所能满足的极限. 控制小文件的方法有: 1应用程序自己控制 2archieve 第一种是我

Hadoop学习之常用命令

HADOOP基本操作命令 在这篇文章中,我们默认认为Hadoop环境已经由运维人员配置好直接可以使用. 假设Hadoop的安装目录HADOOP_HOME为/home/admin/hadoop. 启动与关闭 启动HADOOP 进入HADOOP_HOME目录. 执行sh bin/start-all.sh 进入HADOOP_HOME目录. 执行sh bin/stop-all.sh 关闭HADOOP 文件操作 Hadoop使用的是HDFS,能够实现的功能和我们使用的磁盘系统类似.并且支持通配符,如*.

Hadoop的Shell操作

Hadoop shell命令操作,输入hadoop回车后可以发现如图所示: 常用的命令有: hadoop namenode -format 这个是启动Hadoop之前格式化文件系统时使用的命令. hadoop dfsadmin 这是Hadoop的管理命令,我们输入hadoop dfsadmin回车后可以看到详细命令如下图: hadoop dfsadmin常用的命令有: 1):hadoop dfsadmin -report 查看Hadoop的运行状态 2):hadoop dfsadmin -saf

Hadoop常见重要命令行操作及命令作用

关于Hadoop [[email protected] ~]# hadoop --help Usage: hadoop [--config confdir] COMMAND where COMMAND is one of: fs run a generic filesystem user client version print the version jar <jar> run a jar file checknative [-a|-h] check native hadoop and co

一篇文看懂Hadoop

我们很荣幸能够见证Hadoop十年从无到有,再到称王.感动于技术的日新月异时,希望通过这篇内容深入解读Hadoop的昨天.今天和明天,憧憬下一个十年. 本文分为技术篇.产业篇.应用篇.展望篇四部分 技术篇 2006年项目成立的一开始,“Hadoop”这个单词只代表了两个组件——HDFS和MapReduce.到现在的10个年头,这个单词代表的是“核心”(即Core Hadoop项目)以及与之相关的一个不断成长的生态系统.这个和Linux非常类似,都是由一个核心和一个生态系统组成. 现在Hadoop

Hadoop学习笔记——入门指令操作

假设Hadoop的安装目录HADOOP_HOME为/home/admin/hadoop. 启动与关闭启动HADOOP1. 进入HADOOP_HOME目录. 2. 执行sh bin/start-all.sh 关闭HADOOP1. 进入HADOOP_HOME目录. 2. 执行sh bin/stop-all.sh 文件操作Hadoop使用的是HDFS,能够实现的功能和我们使用的磁盘系统类似.并且支持通配符,如*. 查看文件列表查看hdfs中/user/admin/aaron目录下的文件. 1. 进入H