工具-Hadoop Archive

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wenzhou1219/article/details/88919999

原理

Hadoop的文件存储的单元为一个块(block),block的数据存放在集群中的datanode节点上,由namenode对所有datanode存储的block进行管理。每个文件对应的block块信息称为元数据,这些数据保存在namenode上。如果存在大量小文件,会导致namenode上的元数据急剧膨胀,而这些元数据一般存放在namenode内存中,以方便快速的响应客户端的请求,因此大量的小文件元信息会把namenode的内存耗尽

为了解决这个问题,Hadoop提供了一个叫Archive归档工具,Archive可以把多个文件归档成为一个文件。归档文件中包含元数据信息和小文件内容,将Namenode管理的元数据信息保存到Datanode上的归档文件中,避免元数据的膨胀,大大降低namenode 守护节点的内存压力。

如下图,归档的文件会被合并放到part-中管理,每个part-管理的文件索引放在_index和_materindex中。

har 归档示意图

命令使用方式

  • 创建归档文件

    • hadoop archive -archiveName name -p <parent> [-r <replication>] <src…> <dest>
    • -archiveName 指定归档结果名称,以har结尾
    • -p 归档源文件父目录,可通过src指定多个待归档文件,不指定文件时归档整个目录
    • dest 归档结果保存位置
    • -r 默认为10,官方给的意思为复制因子,实在没搞懂,有清楚的麻烦留言说明下。
  • 查看归档文件结构

    • hadoop fs -ls har:///archivepath/fileinarchive
  • 解压归档文件

    • hdfs fs -cp har:///user/zoo/foo.har/dir1 hdfs:/user/zoo/newdir
    • hadoop distcp har:///user/zoo/foo.har/dir1 hdfs:/user/zoo/newdir

演示

如下文件

源文件

文件内容分别是

file 1
file 2
file 3

执行如下命令归档

hadoop archive -archiveName test.har -p /home/hdp-jiagu/wenzhou/test -r 3 1.data 2.data 3.data /home/hdp-jiagu/wenzhou/archive

生成目录如下

归档目录

查看各个文件内容

文件内容

可以发现part-0文件内容是三个小文件内容合并的,索引_index中标记每个小文件的文件名和块中偏移位置和大小。

可使用har://协议查看归档文件结构和内容,如下

归档查看

不足

不足的地方:

  • 1、archive文件本占用与原文件相同的硬盘空间;
  • 2、archive文件不支持压缩;
  • 3、archive一旦创建就不能进行修改;
  • 4、archive虽然解决了namenode的空间问题,但是,在执行mapreduce时,会把多个小文件交给同一个map去split,这可能会降低mapreduce的效率,另外创建HAR和解压HAR依赖MapReduce,查询文件时耗很高。

原创,转载请注明来自

猜你喜欢

转载自blog.csdn.net/wenzhou1219/article/details/88919999