Hadoop Archives指南

来源:互联网 发布:网络词画风是什么意思 编辑:程序博客网 时间:2024/05/16 16:22

Hadoop Archives指南

概述

​ Hadoop archives是一种归档文件。按照官网的说法,一个Hadoop archive对应一个文件系统目录。 那么为什么需要Hadoop Archives呢?因为hdfs并不擅长存储小文件,文件在hdfs上以block的形式存储,而这些block会在namenode中保存其索引等元数据,这些元数据在namenode启动后被加载至内存。如果存在大量的小文件(文件大小比块还要小),如:一个块128MB,对于一个128MB的文件只需存储一个块(假设为1备份),在namenode中也只存储了一份元数据,而对于128个1MB的文件,则要在namenode中存储128个元数据,显然,少量的大文件要比大量的小文件消耗的namenode内存要小。hadoop Archives就是出于这样的考虑:把多个文件归档成为一个文件,归档成一个文件后还可以透明的访问每一个文件,并且可以做为mapreduce任务的输入,这样可以减少namenode内存消耗。 Hadoop archives类似于linux上的tar, 用于对hdfs上的文件进行归档,Hadoop archive的扩展名是.har。Hadoop archive包含元数据(形式是_index和_masterindx)和数据(part-)文件。_index文件包含了档案中的文件的文件名和位置信息。

创建Archive

hadoop archive -archiveName name -p <parent> [-r <replication factor>] <src>* <dest>

-archiveName name: 指定归档文件的名称,例如test.har

-p parent: 用于指定父目录,表示一种相对路径,指定了这个参数,后面的src和dest都是相对与这个目录的。比如,

-p   /foo/bar  a/b/c   e/f/g

这里,指定/foo/bar为父目录,则a/b/c和e/f/g 就表示/foo/bar/a/b/c和/foo/bar/e/f/g

-r 表示复制因子,不指定的话,默认为10。

​ 其他需要注意的是,使用hadoop archive工具会产生一个mapreduce程序,因此首先要确保集群能够运行mapreduce。

如下例子表示对一个单个目录/foo/bar进行归档:

hadoop archive -archiveName zoo.har -p /foo/bar -r 3 /outputdir

如下例子表示对

查看创建的Archive

​ archive本身就作为文件系统层暴露给外界,因此所有的hadoop fs shell的命令都可以在archive上运行。不同的是,不能再继续使用hdfs://host:8020这样的URI, 而是要使用archive文件系统的URI。另外要注意的是,archive文件是不可变的,因此,不能对archive文件进行删除和重命名。Hadoop Archives 的URI是:

har://scheme-hostname:port/archivepath/fileinarchive

Unarchive

​ 由于可以在archive文件系统上可以使用所有的fs shell命令又能够透明的访问archive文件,因此,可以通过直接拷贝实现unarchive。

如:

hdfs dfs -cp har:///user/zoo/foo.har/dir1 hdfs:/user/zoo/newdir

或者使用distcp

hadoop distcp har:///user/zoo/foo.har/dir1 hdfs:/user/zoo/newdir

举个连贯的例子(来自官文)

  1. 创建Archive

    hadoop archive -archiveName foo.har -p /user/hadoop -r 3 dir1 dir2 /user/zoo

    ​ 上面的句子使用/user/hadoop作为相对路径创建一个名为foo.har的archive文件,该文件包含了/user/hadoop/dir1和/user/hadoop/dir2。该命令不会删除/user/hadoop/dir1和/user/hadoop/dir2,如果你想在创建archive文件之后删除输入文件(这样做可以减少namespace),只能手动去删除。

  2. 查看Archive

    hadoop fs -ls har:///user/zoo/foo.har

    输出如下

    har:///user/zoo/foo.har/dir1har:///user/zoo/foo.har/dir2
原创粉丝点击