hadoop1.1.2 小文件解决方案

小文件指的是那些size比HDFS的block size(默认64M)小的多的文件。

任何一个文件,目录和block,在HDFS中都会被表示为一个object存储在namenode的内存中,

每一个object占用150 bytes的内存空间。所以,如果有10million个文件,每一个文件对应一个block,

那么就将要消耗namenode 3G的内存来保存这些block的信息。

如果规模再大一些,那么将会超出现阶段计算机硬件所能满足的极限


解决hadoop集群小文件过多的方式:

1.使用程序直接将待上传的小文件合并成一个文件,前提是这些小文件是同种类型,比如日志类的

2.使用hadoop archive 命令将hdfs中指定目录中的小文件打包成har文件

打包命令 hadoop archive -archiveName XXX.har -p /src /dest    -p指递归内部文件

可以使用hadoop fs -lsr har:///dest/XXX.har 查看内部目录信息

可以使用hadoop fs -lsr /dest/XXX.har 查看内部结构信息

可以使用hadoop fs -text har:///dest/XXX.har/*** 直接查看har包里指定文件的内容

3.使用SequenceFile

使用fileName作为key,file contents作为value。写一个小程序将10000个100kb的小文件写入到一个SequenceFile中去,和har不同的是,支持压缩,可以按block压缩,也可以按recode压缩。

4.使用MapFile

MapFile是排序后的SequenceFile,通过观察其目录结构可以看到MapFile由两部分组成,分别是data和index。

需注意的是,MapFile并不会把所有Record都记录到index中去,默认情况下每隔128条记录存储一个索引映射。当

然,记录间隔可人为修改,通过MapFIle.Writer的setIndexInterval()方法,或修改io.map.index.interval属性;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值