转载请注明来源地址:http://blog.csdn.net/lastsweetop/article/details/9123155

简介

我们在hadoop深入研究:(一)——hdfs介绍里已讲过,hdfs并不擅长存储小文件,因为每个文件最少一个block,每个block的元数据都会在namenode节点占用内存,如果存在这样大量的小文件,它们会吃掉namenode节点的大量内存。
hadoop Archives可以有效的处理以上问题,他可以把多个文件归档成为一个文件,归档成一个文件后还可以透明的访问每一个文件,并且可以做为mapreduce任务的输入。

用法

hadoop Archives可以使用archive工具创建,同上一篇讲的distcp一样,archive也是一个mapreduce任务。首先我们先来看下我的目录结构:
[hadoop@namenode ~]$hadoop fs -lsr
drwxr-xr-x   - hadoop supergroup          0 2013-06-20 12:37 /user/hadoop/har
drwxr-xr-x   - hadoop supergroup          0 2013-05-23 11:35 /user/hadoop/input
-rw-r--r--   2 hadoop supergroup     888190 2013-05-23 11:35 /user/hadoop/input/1901
-rw-r--r--   2 hadoop supergroup     888978 2013-05-23 11:35 /user/hadoop/input/1902
-rw-r--r--   2 hadoop supergroup        293 2013-06-02 17:44 /user/hadoop/news.txt
我们通过archive工具才对该目录进行归档
hadoop archive -archiveName input.har -p /user/hadoop/ input har

archiveName指定archive的文件名,-p代表父目录,可以把多个目录文件放到archive里,我们来看下创建好的har文件。

[hadoop@namenode ~]$hadoop fs -ls har
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2013-06-20 12:38 /user/hadoop/har/input.har
[hadoop@namenode ~]$hadoop fs -ls har/input.har
Found 4 items
-rw-r--r-- 2 hadoop supergroup 0 2013-06-20 12:38 /user/hadoop/har/input.har/_SUCCESS
-rw-r--r-- 5 hadoop supergroup 272 2013-06-20 12:38 /user/hadoop/har/input.har/_index
-rw-r--r-- 5 hadoop supergroup 23 2013-06-20 12:38 /user/hadoop/har/input.har/_masterindex
-rw-r--r-- 2 hadoop supergroup 1777168 2013-06-20 12:38 /user/hadoop/har/input.har/part-0

这里可以看到har文件包括,两个索引文件,多个part文件,这里只显示一个。part文件是多个原文件的集合,根据index文件去找到原文件。

如果用har uri去访问的话,这些文件就会隐藏起来,只显示原文件
[hadoop@namenode ~]$hadoop fs -lsr har:///user/hadoop/har/input.har
drwxr-xr-x - hadoop supergroup 0 2013-05-23 11:35 /user/hadoop/har/input.har/input
-rw-r--r-- 2 hadoop supergroup 888978 2013-05-23 11:35 /user/hadoop/har/input.har/input/1902
-rw-r--r-- 2 hadoop supergroup 888190 2013-05-23 11:35 /user/hadoop/har/input.har/input/1901

还可以象普通文件系统那样访问har下一级的文件

[hadoop@namenode ~]$hadoop fs -lsr har:///user/hadoop/har/input.har/input
-rw-r--r-- 2 hadoop supergroup 888978 2013-05-23 11:35 /user/hadoop/har/input.har/input/1902
-rw-r--r-- 2 hadoop supergroup 888190 2013-05-23 11:35 /user/hadoop/har/input.har/input/1901

如果要远程访问的话可以使用以下命令

[hadoop@namenode ~]$hadoop fs -lsr har://hdfs-namenode:9000/user/hadoop/har/input.har/input
-rw-r--r-- 2 hadoop supergroup 888978 2013-05-23 11:35 /user/hadoop/har/input.har/input/1902
-rw-r--r-- 2 hadoop supergroup 888190 2013-05-23 11:35 /user/hadoop/har/input.har/input/1901

har开头说明时har文件系统,hdfs-域名:端口,har文件系统进行转换直到har文件末位,例子中会转换为hdfs://namenode:9000/user/hadoop/har/input.har,剩余的部分仍然用archive方式打开:input

删除文件相对简单,但需要递归删除,否则报错
[hadoop@namenode ~]$hadoop fs -rmr har/input.har
Deleted hdfs://192.168.115.5:9000/user/hadoop/har/input.har

限制

archive文件有一些限制条件:

1.创建archive文件要消耗和原文件一样多的硬盘空间

2.archive文件不支持压缩,尽管archive文件看起来象已经被压缩过了。

3.archive文件一旦创建就无法改变,这就意味这你要改一些东西的话,你需要创新创建archive文件

4.虽然解决了namenode的内存空间问题,但是在执行mapreduce时,会把多个小文件交给同一个mapreduce去split,这样明显是低效的

解决namenode内存的问题可以参照之前的文章中的hdfs federation。

hadoop深入研究:(五)——Archives的更多相关文章

  1. hadoop深入研究:(七)——压缩

    转载请标明出处:hadoop深入研究:(七)——压缩 文件压缩主要有两个好处,一是减少了存储文件所占空间,另一个就是为数据传输提速.在hadoop大数据的背景下,这两点尤为重要,那么我现在就先来了解下 ...

  2. Hadoop生态圈-hive五种数据格式比较

    Hadoop生态圈-hive五种数据格式比较 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  3. hadoop深入研究:(十三)——序列化框架

    hadoop深入研究:(十三)--序列化框架 Mapreduce之序列化框架(转自http://blog.csdn.net/lastsweetop/article/details/9376495) 框 ...

  4. Nginx源码研究五:NGINX的配置信息管理

    配置信息是nginx系统重要的组成部分,配置信息的使用,实际上包含两层,一层是用户针对参数定义了值,例如下面nginx参数文件中的 keepalive_timeout 65,还有一部分是用户没有定义值 ...

  5. Hadoop(十五)MapReduce程序实例

    一.统计好友对数(去重) 1.1.数据准备 joe, jon joe , kia joe, bob joe ,ali kia, joe kia ,jim kia, dee dee ,kia dee, ...

  6. Hadoop学习笔记五

    一.uber(u:ber)模式 MapReduce以Uber模式运行时,所有的map,reduce任务都在一个jvm中运行,对于小的mapreduce任务,uber模式的运行将更为高效. uber模式 ...

  7. Hadoop 系列(五)—— Hadoop 集群环境搭建

    一.集群规划 这里搭建一个 3 节点的 Hadoop 集群,其中三台主机均部署 DataNode 和 NodeManager 服务,但只有 hadoop001 上部署 NameNode 和 Resou ...

  8. dedecms代码研究五

    上一次留几个疑问: 1)DedeTagParse类LoadTemplet方法. 2)MakeOneTag到底在搞什么. 从DedeTagParse开始前面,我们一直在dedecms的外围,被各种全局变 ...

  9. hadoop拾遗(五)---- mapreduce 输出到多个文件 / 文件夹

    今天要把HBase中的部分数据转移到HDFS上,想根据时间戳来自动输出到以时间戳来命名的每个文件夹下.虽然以前也做过相似工作,但有些细节还是忘记了,所以这次写个随笔记录一下. package com. ...

随机推荐

  1. 2013年最好的Python开源项目汇总

    2013年Python社区诞生了很多实用的开发工具,这些工具 在一定程度上 可以帮助你节省更多的时间.本文为你汇总了这些工具,它们大部分都是开源的,你还可以通过源码来学习更多的Python开发知识. ...

  2. #AzureChat - 自动伸缩和虚拟机

    我们很高兴地推出再一次 #AzureChat,这是 @WindowsAzure 团队为您精心打造的一个在 Twitter 上进行的聊天活动! #AzureChat 专注于云计算的各个方面以及云开发的最 ...

  3. location.href使用方法总结

    javascript中的location.href有非常多种使用方法,主要例如以下. self.location.href="/url" 当前页面打开URL页面 location. ...

  4. hdu 4975 A simple Gaussian elimination problem.(网络流,推断矩阵是否存在)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4975 Problem Description Dragon is studying math. One ...

  5. C++变量(C++变量定义、变量赋值、命名规则)

    其实在前面的例子中已经多次用到了变量.在程序运行期间其值可以改变的量称为变量.一个变量应该有一个名字,并在内存中占据一定的存储单元,在该存储单元中存放变量的值.请注意区分变量名和变量值这两个不同的概念 ...

  6. 用U盘与移动硬盘制作WIN7启动盘(亲自实践)

    昨晚帮一个娃娃用移动硬盘里面的一个分区帮他制作成一个win7系统盘,为了以后万一换系统的时候方便.我自己有一个U盘坐的启动盘,移动硬盘没有倒腾过,看网上N多都是相互抄,制作都是WINPE系统的,相当蛋 ...

  7. ZOJ3768 夹逼查找【STL__lower_bound()_的应用】

    首先学习一下lower_bound() 函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置.如果所有元素都小于val,则返回last ...

  8. docker学习笔记6:利用dockerfile创建镜像介绍(生成简单web服务器镜像)

    本文介绍如何利用dockerfile来创建镜像.下面介绍具体的操作过程: 一.创建构建环境 操作示例如下: xxx@ubuntu:~$ pwd /home/xxx xxx@ubuntu:~$ mkdi ...

  9. HTML——左右側边栏布局

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  10. 使用linq对字符串1,2,3,4,5,6,7,8,9,10求和

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SumI ...