Hadoop Archives档案
HDFS 并不擅长存储小文件,因为每个文件最少一个 block,每个 block 的元数据都会在 NameNode 占用内存,如果存在大量的小文件,它们会吃掉NameNode 节点的大量内存。
Hadoop Archives 可以有效的处理以上问题,它可以把多个文件归档成为一个文件,归档成一个文件后还可以透明的访问每一个文件。
使用方法
创建 Archives(档案)
Usage: hadoop archive -archiveName name -p <parent> <src>* <dest>
其中-archiveName 是指要创建的存档的名称。比如 test.har,archive 的名字的扩展名应该是*.har。 -p 参数指定文件存档文件(src)的相对路径。
举个例子:-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
例如:如果你只想存档一个目录/input 下的所有文件:
hadoop archive -archiveName test.har –p /input /outputdir
这样就会在/outputdir 目录下创建一个名为 test.har 的存档文件。


查看 Archives
首先我们来看下创建好的 har 文件。使用如下的命令:
hadoop fs -ls /outputdir/test.har

这里可以看到 har 文件包括:两个索引文件,多个 part 文件(本例只有一个)以及一个标识成功与否的文件。part 文件是多个原文件的集合,根据index 文件去找到原文件。
例如上述的三个小文件 1.txt 2.txt 3.txt 内容分别为 1,2,3。进行archive 操作之后,三个小文件就归档到 test.har 里的 part-0 一个文件里。


archive 作为文件系统层暴露给外界。所以所有的 fs shell 命令都能在archive 上运行,但是要使用不同的 URI。Hadoop Archives 的 URI 是:
har://scheme-hostname:port/archivepath/fileinarchive
scheme-hostname 格式为 hdfs-域名:端口,如果没有提供 scheme-hostname,它会使用默认的文件系统。这种情况下 URI 是这种形式:
har:///archivepath/fileinarchive
如果用 har uri 去访问的话,索引、标识等文件就会隐藏起来,只显示创建档案之前的原文件:



解压 Archives
按顺序解压存档(串行):
hadoop fs -cp har:///user/zoo/foo.har/dir1 hdfs:/user/zoo/newdir
要并行解压存档,请使用 DistCp:
hadoop distcp har:///user/zoo/foo.har/dir1 hdfs:/user/zoo/newdir
har文档结构

Archive 注意事项
1. Hadoop archives 是特殊的档案格式。一个 Hadoop archive 对应一个文件系统目录。Hadoop archive 的扩展名是*.har;
2. 创建 archives 本质是运行一个 Map/Reduce 任务,所以应该在 Hadoop集群上运行创建档案的命令;
3. 创建 archive 文件要消耗和原文件一样多的硬盘空间;
4. archive 文件不支持压缩,尽管 archive 文件看起来像已经被压缩过;
5. archive 文件一旦创建就无法改变,要修改的话,需要创建新的archive 文件。事实上,一般不会再对存档后的文件进行修改,因为它们是定期存档的,比如每周或每日;
6. 当创建 archive 时,源文件不会被更改或删除;
7. 虽然 HAR 文件可以作为 MR 的输入,但是由于 InputFormat 类并不知道文件已经存档,所以即使在 HAR 文件里处理许多小文件,仍然低效。
Hadoop Archives档案的更多相关文章
- Hadoop Archives
		原文地址:http://hadoop.apache.org/docs/r1.0.4/cn/hadoop_archives.html 什么是Hadoop archives? 如何创建archive? 如 ... 
- hadoop文件系统上的小文件合并-Hadoop Archives
		1. 什么是Hadoop archives Hadoop archives是特殊的档案格式.一个Hadoop archive对应一个文件系统目录. Hadoop archive的扩展名是.har.Ha ... 
- Hadoop HDFS (4) Hadoop Archives
		用HDFS存储小文件是不经济的,由于每一个文件都存在一个block里,每一个block的metadata又在namenode的内存里存着,所以,大量的小文件.会吃掉大量的namenode的内存.(注意 ... 
- hadoop深入研究:(五)——Archives
		转载请注明来源地址:http://blog.csdn.net/lastsweetop/article/details/9123155 简介 我们在hadoop深入研究:(一)——hdfs介绍里已讲过, ... 
- 从零自学Hadoop(11):Hadoop命令上
		阅读目录 序 概述 Hadoop Common Commands User Commands Administration Commands File System Shell 引用 系列索引 本文版 ... 
- 从零自学Hadoop(13):Hadoop命令下
		阅读目录 序 MapReduce Commands User Commands Administration Commands YARN Commands User Commands Administ ... 
- HADOOP命令介绍
		一.用户命令1.archive命令 (1).什么是Hadoop archives?Hadoop archives是特殊的档案格式.一个Hadoop archive对应一个文件系统目录. Hadoop ... 
- Hadoop 2.0命令手册
		1. FS Shell 1.1 简介 调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式. 所有的的FS shell命令使用URI ... 
- hadoop shell 详解
		概述 所有的hadoop命令均由bin/hadoop脚本引发.不指定参数运行hadoop脚本会打印所有命令的描述. 用法: hadoop [--config confdir] [COMMAND] ... 
随机推荐
- js map 、filter 、forEach 、every、some 的用法
			1.map 首先map 就是将原数组 映射成 新的数组: 其次map 有返回值 2.filter 对数组中的每个元素都执行一次指定的函数(callback),并且创建一个新的数组,该数组元素是所有回调 ... 
- url传递参数带 + ,解决办法
			修改客户端,将客户端带“+”的参数中的“+”全部替换为“%2B”,这样参数传到服务器端时就能得到“+”了. 
- URL中参数为数组
			今天写代码时候碰到了一个需要在URL中传递数组类型的参数,记录一下. var urlstr = "http://test"; var test = new Array(); for ... 
- 《大数据日知录》读书笔记-ch3大数据常用的算法与数据结构
			布隆过滤器(bloom filter,BF): 二进制向量数据结构,时空效率很好,尤其是空间效率极高.作用:检测某个元素在某个巨量集合中存在. 构造: 查询: 不会发生漏判(false negativ ... 
- vue-quill-editor   html编辑器
			在Vue项目使用quill-editor带样式编辑器(更改插入图片和视频) https://www.cnblogs.com/zhengweijie/p/7305903.html vue-quil ... 
- JavaEE_XMind总结
			1 Servlet 2 ServletContext 3 HttpServletResponse 4 HttpServletResquest 5 Cookie 
- jcef视频教程
			http://www.cnblogs.com/Johness/p/java-cef-1-building.html 
- CentOS 7下使用yum安装MySQL5.7
			1.卸载 1.1先停掉mysql进程,没有安装过的可以直接跳过 pkill - mysqld rpm -qa|grep -i mysql 1.2用命令 yum -y remove -.el7.x86_ ... 
- Vue路由开启keep-alive时的注意点
			Vue路由开启keep-alive时的注意点 这个不是业务的要求,但是看到每次进入页面就重新渲染DOM然后再获取数据更新DOM,觉得作为一个前端工程师有必要优化下的加载逻辑,正好vue提供了 ke ... 
- PHP之数组和函数的基本教程
			[PHP数组的分类] 按照下标的不同,PHP数组分为关联数组与索引数组 索引数组:下标从0开始,依次增长: 关联数组:下标为字符串格式,每个下标字符串与数字的值一一关联对应(有点像对象的键值对) [关 ... 
