hadoop面对大量的小文件处理

小文件在HDFS中

 HDFS块大小默认是128m(hadoop2.x默认是128),若是存储了很多这种小文件每个小文件占了一个block而每个block的文件,目录在namenode里以对像(元数据)形式存储,

就会造成namenode内存占用严重,同时 阅读小文件通常会导致从一个DataNode到DataNode检索每个小文件检索效率极低

在MapReduce中小文件问题

一个Map任务每次能处理一个块的输入,多个小文件对应多个block就需要大量的map任务

解决方法:Hadoop本身提供了几个解决方案,分别为:Hadoop Archive,Sequence file和CombineFileInputFormat
(1) Hadoop Archive
Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时,仍然允许对文件进行透明的访问。
对某个目录/foo/bar下的所有小文件存档成/outputdir/ zoo.har:
hadoop archive -archiveName zoo.har -p /foo/bar /outputdir
当然,也可以指定HAR的大小(使用-Dhar.block.size)。
HAR是在Hadoop file system之上的一个文件系统,因此所有fs shell命令对HAR文件均可用,只不过是文件路径格式不一样,HAR的访问路径可以是以下两种格式:
har://scheme-hostname:port/archivepath/fileinarchive
har:///archivepath/fileinarchive(本节点)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值