用HDFS存储小文件是不经济的,由于每一个文件都存在一个block里,每一个block的metadata又在namenode的内存里存着,所以,大量的小文件。会吃掉大量的namenode的内存。(注意:一个小文件占用一个block,可是这个block的大小不是设定的值,比方设定每一个block是128M。可是一个1M的文件存在一个block里。实际占用的datanode的硬盘大小是1M,而不是128M。所以这里说的不经济是指占用大量namenode的内存资源。而不是说占用大量datanode的磁盘资源。)


Hadoop Archives(HAR文件)是一个文件打包工具,它把文件打包放进HDFS,以更加有效地利用block,从而减少namenode的内存使用。同一时候,Hadoop Archives还同意client透明訪问HAR包里的文件,像訪问目录里的文件一样方便,更重要的是,HAR文件还能够作为MapReduce的输入。

Hadoop Archives的用法

$hadoop fs -ls -R /user/norris/
列出/user/norris/文件夹下的全部文件,-R表示递归列出子文件夹里的文件。
然后我们能够使用以下命令:
$hadoop archive -archiveName files.har -p /user/norris/ /user/norris/har/
这个命令把/user/norris/文件夹下的全部内容打成files.har包放在/user/norris/har/下。
-p表示父文件夹(parent)。

之后使用
$hadoop fs -ls /user/norris/har/
查看/user/norris/har/文件夹下生成一个files.har文件。

$hadoop fs -ls /user/norris/har/files.har
能够看到files.har包由两个index文件和一组part文件组成。

part文件就是把全部文件内容拼接在一起,index文件存储文件起始位置的偏移量和文件长度。
假设要查看har文件的内容。能够用URI Scheme har来查看:
$hadoop fs -ls -R har:///user/norris/har/files.har
列出har里的文件和文件夹
HAR文件系统位于底层文件系统(HDFS)之上。


删除一个har文件要使用:
$hadoop fs -rm -R /user/norris/har/files.har
要用-R选项,由于在底层文件系统看来。.har文件事实上是一个文件夹。


Hadoop Archives的使用限制

1. 创建一个HAR须要跟源文件同样大小的空间,所以,在准备创建一个HAR之前,要保证有同样大小的磁盘空间。创建之后,能够删除原来的文件。文件夹Hadoop Archives仅仅打包,不压缩。
2. HAR文件一旦创建不可改动,不能向当中添加或删除文件。在实际使用中。一般对于一旦生成就不再更改的文件做定期的archive,比方,每天把当天生成的日志文件打成一个包。

3. 之前提到HAR文件能够作为MapReduce的输入,可是多个小文件打成包输入给MapReduce,并不比单独小文件输入给MapReduce更有效率,关于解决众多小文件输入的效率问题,后面要讨论其它解决方式。
4. 假设namenode的内存不够用了,在考虑降低系统中的大量小文件之后。应该考虑HDFS Federation。我们之前提到过:http://blog.csdn.net/norriszhang/article/details/39178041







最新文章

  1. 数字信号处理实验(四)——数字滤波器结构
  2. UIView 的autoresizingMask属性
  3. 1008. Elevator (20)
  4. Linux中查看进程的多线程
  5. sencha touch xtype
  6. App在后台运行
  7. java与.net比较学习系列(1) 开发环境和常用调试技巧
  8. hive metastore Server 出现异常
  9. 《java.util.concurrent 包源码阅读》18 Exchanger
  10. C# — Windows服务安装后自动停止问题
  11. MVCC(Multi-version Cocurrent Control)多版本并发控制协议
  12. ICPC World Finals 2019 题解
  13. 基于Python自动上传包到nexus仓库
  14. 个人作业2——APP案例分析
  15. php 百家姓
  16. 【经典漏洞案例】NSA黑客工具包——Windows 0day验证实验
  17. mysql四-1:单表查询
  18. Python获取网页Html文本
  19. 11-Mysql数据库----单表查询
  20. 安装软件时出现dll文件缺失

热门文章

  1. SpringBoot学习笔记(16)----SpringBoot整合Swagger2
  2. 《Unix环境高级编程》读书笔记 第8章-进程控制
  3. 使用了未经检查或不安全的操作。有关详细信息, 请使用 -Xlint:unchecked 重新编译。
  4. UE4.18.3 C++项目无法打开C++类问题(VS2017)
  5. TP5 错误信息提示入坑指南
  6. HDU-5009 Paint Pearls 动态规划 双向链表
  7. BZOJ 1355[Baltic2009]Radio Transmission(KMP)
  8. hadoop-13-root ssh无密码登陆
  9. HDU 5319
  10. Android 经常使用工作命令mmm,mm,m,croot,cgrep,jgrep,resgrep,godir