Hadoop Archive解决海量小文件存储

这段时间看了公司部门邮件中大家讨论较多的几个关于HDFS的问题,一个是关于Namenode可扩展性的讨论,目前单台服务器作为Namenode,当文件数量规模不断增大时,元数据的规模增长将是一个需要面对的问题,由于Namenode需要将所有元数据Load到内存中,单台Namenode可能会无法管理海量的元数据。另一个是HDFS中SequenceFile存储方式的讨论,利用Block压缩方式可以很好的解决空间压力。

今天刚好看到Yahoo! Hadoop Blog上的一篇文章Hadoop Archive: File Compaction for HDFS,和上面两个问题都有一点联系,文章主要提出了在HDFS中存在海量的小文件时,会给存储带来的一系列问题 。

HDFS中文件是按Block来存储的,默认一个Block的长度是128MB,当HDFS中存在大量小文件(长度小于128MB)时,不仅占用大量存储空间,而且也占用大量的namespace,给Namenode带来了内存压力,Yahoo内部有一个生产集群,统计下来有57,000,000个小于128MB的文件,这些小文件消耗了95%的namespace,占用了30%的存储空间。Namenode的压力一般也常常是因为有海量的小文件存在,如果没有这些小文件存在的话,Namenode内存还没撑爆,估计存储空间就先爆了。。

文中提到了解决方法,是利用Hadoop Archive(HAR),这个特性从Hadoop 0.18.0版本就已经引入了,他可以将众多小文件打包成一个大文件进行存储,并且打包后原来的文件仍然可以通过Map-reduce进行操作,打包后的文件由索引和存储两大部分组成,索引部分记录了原有的目录结构和文件状态。

Hadoop Archive

举个例子,原本获取一个文件通过命令

hadoop fs –get hdfs://namenode/foo/file-1 localdir

如果将foo目录打包成bar.har后,获取file-1的命令就变成

hadoop fs –get har://namenode/bar.har#foo/file-1 localdir

通过以下命令可以将文件打包成HAR。

hadoop archive -archiveName  *

但是,目前HAR文件中的源数据只能获取,不能修改,文章中提到实现可以修改将是下一步的工作。

参考文章:

  1. Hadoop Archive: File Compaction for HDFS
  2. The Small Files Problem
  3. Hadoop Archives
其他文章
  • 陆行鸟
    第一次注册域名(Chocobo的顶级域名买不起,只能买了配件自己组装),第一次用wordpress,的第一篇日志,让我想起了初中时第一次做个人主页,用的是免费空间,附送二级域名(及各种弹出式广告),用...
  • 用Python监视进程是否结束
    平时不打游戏在Linux下的时间比较长,用VirtualBox装了个XP可以上上QQ,用用其他一些只有Windows版的软件,这两天下BoA的演唱会又用到了网盘,而且网盘的客户端软件只支持Window...
  • 牛年小节续
    前段时间牛年小节写了没多少内容就发觉已经出轨了,而且是出轨后继续行驶1000公里,真正在牛年做的事情好像没记录多少,今天再来回忆一下,顺便当笔记用了,哈哈。 学位论文发表了,虽然自己感觉有点豆腐...
  • 试用新主题SimpleDark
    教授(@Justice)出品,必属精品,是我喜欢的朴素风格。教授不仅dota打的好,Web前端也是一等一的高手,blog地址:http://lync.in。 试用过程中顺便发现了WP-CodeB...
  • 牛年小节
    还有一周不到的时间就要过春节了,外国人新年是1月1日,中国人都信春哥,所以春节才是中国的新年,作为春哥信众,自然也要到春节前才做年度小节。 牛年发生了许多大事,尤其是互联网,但对我个人生活产生的...

Comments (5)

  1. 22:59, 2010-08-05Justice  / Reply

    顶技术贴,虽然看不懂

  2. 08:12, 2010-09-15日记门  / Reply

    博主勤奋啊,经常看你更新

  3. 11:39, 2010-09-27Bill.Bao  / Reply

    很好的功能,可以解决众多小文件存储的问题。可否预先建立一个归档文件,然后向归档文件中写文件,就像RAR文件那样

  4. 12:54, 2010-09-27chocobo  / Reply

    @Bill.Bao
    HDFS目前只支持append的方式修改文件,所以归档文件没有办法再修改,另外更正一下文章里的说法,小文件虽然占用的块是128M的,但实际占用的磁盘空间仍然是文件大小,所以HAR想要缓解的仅仅是Namenode的内存压力。

  5. 17:55, 2010-12-08hudson  / Reply

    HAR 需要依赖m/r

Leave a Reply

Allowed Tags - You may use these HTML tags and attributes in your comment.

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

使用新浪微博登陆

Pingbacks (0)

› No pingbacks yet.