首页 > 云计算 > 云资讯

HadoopArchives指南

发表文章

来源:网络
上传者:用户

关键词: 文件系统目录 归档文件 HadoopArchives

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 [-r ] *

-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 举个连贯的例子(来自官文)

创建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),只能手动去删除。

查看Archive

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

输出如下

har:///user/zoo/foo.har/dir1 har:///user/zoo/foo.har/dir2

本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:zixun-group@service.aliyun.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关资讯

Azkaban实战

关键词: java Azkaban job描述文件

Azkaba内置的任务类型支持command、java Command类型单一job示例 1、创建job描述文件 vi command.job command.job type=command command=echo ‘hello’ 2、将job资源文件打包成zip文件 zip command.job 3、通过azkaban的web管理平台创建project并上传job压缩包 首先创建pr...

工作流调度器azkaban安装

关键词: 安装 Azkaban 工作流调度器

概述 2.1.1为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序、hive脚本等 各任务单元之间存在时间先后及前后依赖关系 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行; 例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示: ...

spark的应用场景和基本原理

关键词: Spark spark特点

摘要: spark的优势:(1)图计算,迭代计算(训练机器学习算法模型做广告推荐,点击预测,同时基于spark的预测模型能做到分钟级)(2)交互式查询计算(实时) spark的主要应用场景:(1)推荐系统,实时推荐 (2)交互式实时查询 spark特点:(1)分布式并行计算框架(2)内存计算,不仅数据加载到内存,中间结果也存储内存(中间结果不需要落地到hdfs) 还有一个特点:Spark在做...

libvmi编译问题

关键词: 执行 编译 libvmi

fatal error: json-c/json.h: No such file or directory ---解决方法: sudo apt-get install libjson-c-dev 然后重新执行./autoconf ./configure make 即可

Sparkstreaming作业需要注意的问题

关键词: 进程服务 SparkStreaming

1、java.lang.OutOfMemoryError: GC overhead limit exceeded 分析:因为streaming是长进程服务,如果当初分配堆太小,运行很长时间后会出现GC overhead limit exceeded问题,查看driver进程gc信息发现老年代使用率达到99.6%,故处理方法是提高driver堆大小,同时提高老年代大小。 处理:设置spark....

联系我们

    若您要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在5个工作日内回复。

最新热词

热门词条