用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







Hadoop HDFS (4) Hadoop Archives的更多相关文章

  1. 【转】Hadoop HDFS分布式环境搭建

    原文地址  http://blog.sina.com.cn/s/blog_7060fb5a0101cson.html Hadoop HDFS分布式环境搭建 最近选择给大家介绍Hadoop HDFS系统 ...

  2. Hadoop(1)---运行Hadoop自带的wordcount出错问题。

    在hadoop2.9.0版本中,对namenode.yarn做了ha,随后在某一台namenode节点上运行自带的wordcount程序出现偶发性的错误(有时成功,有时失败),错误信息如下: // : ...

  3. Hadoop演进与Hadoop生态

    1.了解对比Hadoop不同版本的特性,可以用图表的形式呈现. (1)0.20.0~0.20.2: Hadoop的0.20分支非常稳定,虽然看起来有些落后,但是经过生产环境考验,是 Hadoop历史上 ...

  4. hadoop深入研究:(五)——Archives

    转载请注明来源地址:http://blog.csdn.net/lastsweetop/article/details/9123155 简介 我们在hadoop深入研究:(一)——hdfs介绍里已讲过, ...

  5. Docker 安装Hadoop HDFS命令行操作

    网上拉取Docker模板,使用singlarities/hadoop镜像 [root@localhost /]# docker pull singularities/hadoop 查看: [root@ ...

  6. hadoop/hdfs/yarn 详细命令搬运

    转载自文章 http://www.cnblogs.com/davidwang456/p/5074108.html 安装完hadoop后,在hadoop的bin目录下有一系列命令: container- ...

  7. 介绍hadoop中的hadoop和hdfs命令

    有些hive安装文档提到了hdfs dfs -mkdir ,也就是说hdfs也是可以用的,但在2.8.0中已经不那么处理了,之所以还可以使用,是为了向下兼容. 本文简要介绍一下有关的命令,以便对had ...

  8. Hadoop HDFS 用户指南

    This document is a starting point for users working with Hadoop Distributed File System (HDFS) eithe ...

  9. Hadoop HDFS负载均衡

    Hadoop HDFS负载均衡 转载请注明出处:http://www.cnblogs.com/BYRans/ Hadoop HDFS Hadoop 分布式文件系统(Hadoop Distributed ...

随机推荐

  1. 优动漫PAINT基础系列之图层模式

    在绘画软件优动漫PAINT中,笔刷工具属性中的消除锯齿变成灰色无法选择了?铅笔绘制没有压感?快来改改图层模式~ 优动漫PAINT下载:http://www.dongmansoft.com/xiazai ...

  2. 正则表达式中的/i

    i = insensitive means case-insensitive 表示大小写不敏感

  3. 小程序自定义tabbar

    代码片段: wechatide://minicode/IUoCyemJ7D3d GitHub: https://github.com/WozHuang/Miniprogram-Demo/tree/ma ...

  4. CSS常用样式--font

    CSS font 属性 参考:W3school- CSS font 所有浏览器都支持 font 属性,可在一个声明中设置所有字体属性,各属性需按顺序,语法如下: selector{ font:styl ...

  5. luogu P2664 树上游戏(点分治)

    点分治真是一个好东西.可惜我不会 这种要求所有路经的题很可能是点分治. 然后我就不会了.. 既然要用点分治,就想,点分治有哪些优点?它可以\(O(nlogn)\)遍历分治树的所有子树. 那么现在的问题 ...

  6. DataTable 数据导入MS ACCESS 数据库中 数字类型字段为空的解决办法

    string strSql = "insert into GongCheng (GCSY,GCBH,GCBHOLD,GCMC,GCKCJD,GCJSDW,GCSJDW,GCKCDW,GCSG ...

  7. [AngularJS] ng-ture-value & ng-false-value

    When you have a checkbox, not necessary that just 'ture' & 'false', you might have 'yes', 'no', ...

  8. cocos2d_android 第一个游戏

    依据上一篇文章.创建好cocos2d--android的开发环境 先上效果图 实现该效果的代码: package com.cn.firstgame; import org.cocos2d.layers ...

  9. sass10 demo1

    index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  10. UITextField限制输入长度

    首先,汉字的输入时的联想词在输入到TextFiled时,并不会走 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersIn ...