分享

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

linshi0591 2014-3-28 17:41:57 发表于 连载型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 6627
本帖最后由 pig2 于 2014-3-28 18:08 编辑
简介
我们在hadoop深入研究:(一)——hdfs介绍里已讲过,hdfs并不擅长存储小文件,因为每个文件最少一个block,每个block的元数据都会在namenode节点占用内存,如果存在这样大量的小文件,它们会吃掉namenode节点的大量内存。
hadoop Archives可以有效的处理以上问题,他可以把多个文件归档成为一个文件,归档成一个文件后还可以透明的访问每一个文件,并且可以做为mapreduce任务的输入。

用法       

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



我们通过archive工具才对该目录进行归档

  1. hadoop archive -archiveName input.har -p /user/hadoop/ input har  
复制代码




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


  1. [hadoop@namenode ~]$hadoop fs -ls har</span></div>Found 1 items
  2. drwxr-xr-x   - hadoop supergroup          0 2013-06-20 12:38 /user/hadoop/har/input.har
  3. [hadoop@namenode ~]$hadoop fs -ls har/input.har
  4. Found 4 items
  5. -rw-r--r--   2 hadoop supergroup          0 2013-06-20 12:38 /user/hadoop/har/input.har/_SUCCESS
  6. -rw-r--r--   5 hadoop supergroup        272 2013-06-20 12:38 /user/hadoop/har/input.har/_index
  7. -rw-r--r--   5 hadoop supergroup         23 2013-06-20 12:38 /user/hadoop/har/input.har/_masterindex
  8. -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去访问的话,这些文件就会隐藏起来,只显示原文件
  1. [hadoop@namenode ~]$hadoop fs -lsr har:///user/hadoop/har/input.har
  2. drwxr-xr-x   - hadoop supergroup          0 2013-05-23 11:35 /user/hadoop/har/input.har/input
  3. -rw-r--r--   2 hadoop supergroup     888978 2013-05-23 11:35 /user/hadoop/har/input.har/input/1902
  4. -rw-r--r--   2 hadoop supergroup     888190 2013-05-23 11:35 /user/hadoop/har/input.har/input/1901
复制代码


还可以象普通文件系统那样访问har下一级的文件
  1. [hadoop@namenode ~]$hadoop fs -lsr har:///user/hadoop/har/input.har/input
  2. -rw-r--r--   2 hadoop supergroup     888978 2013-05-23 11:35 /user/hadoop/har/input.har/input/1902
  3. -rw-r--r--   2 hadoop supergroup     888190 2013-05-23 11:35 /user/hadoop/har/input.har/input/1901
复制代码


如果要远程访问的话可以使用以下命令
  1. [hadoop@namenode ~]$hadoop fs -lsr har://hdfs-namenode:9000/user/hadoop/har/input.har/input
  2. -rw-r--r--   2 hadoop supergroup     888978 2013-05-23 11:35 /user/hadoop/har/input.har/input/1902
  3. -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
删除文件相对简单,但需要递归删除,否则报错
  1. [hadoop@namenode ~]$hadoop fs -rmr har/input.har
  2. 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。


感谢Tom White,此文章大部分来自于大神的definitive guide,奈何中文版翻译太烂,就在英文原版的基础上和官方的一些文档加入一些自己的理解。
全当是读书笔记吧,画蛇添足之举。
转载请注明来源地址:http://blog.csdn.net/lastsweetop/article/details/9123155



已有(1)人评论

跳转到指定楼层
desehawk 发表于 2014-3-29 19:59:42
好帖子,真不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条