如何在hadoop中处理小文件

一、什么是小文件

    小文件一般是指明显小于Hadoop的block size(hadoop 1.x中默认是64M,hadoop 2.x中默认是128M)的文件。Hadoop的block size一般是64MB,128MB或者256MB,现在一般趋向于设置的越来越大。后文要讨论的内容为什么会基于128MB,这也是CDH中的默认值。为了方便后面的讨论,这里假定如果文件大小是小于block size的75%,则定义为小文件。但小文件不仅是指文件比较小,如果Hadoop集群中的大量文件略大于block size,同样也会存在小文件问题。

  比如,假设block size是128MB,但加载到Hadoop的所有文件都是136MB,就会存在大量8MB的block。处理这种“小块”问题你可以调大block size来解决,但解决小文件问题却要复杂的多。

 

调整block size大小公式:computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128M

算法分析: (默认切片大小就是block块大小)

max(minSize, min(maxSize,blockSize))

min(maxSize,blockSize)取maxSize,blockSize之间的最小值

max(minSize, min())取minSize, min()之间的最大值

blockSize=128MB

所以增加切片大小有要调整 min(maxSize,blockSize)中maxSize值

减小切片大小调整minSize值.

具体两个方法如下:

FileInputFormat.setMaxInputSplitSize(job, size);

FileInputFormat.setMinInputSplitSize(job, size);

二、小文件是如何来的

一个Hadoop集群中存在小文件问题是很正常的,可能的原因如下:

1. 现在我们越来越多的将Hadoop用于(准)实时计算,在做数据抽取时处理的频率可能是每小时,每天,每周等,每次可能就只生成一个不到10MB的文件。

2.数据源有大量小文件,未做处理直接拷贝到Hadoop集群。

3.MapReduce作业的配置未设置合理的reducer或者未做限制,每个reduce都会生成一个独立的文件。另外如果数据倾斜,导致大量的数据都shuffle到一个reduce,然后其他的reduce都会处理较小的数据量并输出小文件。

三、为什么hadoop中会有小文件的问题

    Hadoop的小文件问题主要是会对NameNode内存管理和MapReduce性能造成影响。Hadoop中的每个目录、文件和block都会以对象的形式保存在NameNode的内存中。根据经验每个对象在内存中大概占用150个字节。如果HDFS中保存2000万个文件,每个文件都在同一个文件夹中,而且每个文件都只有一个block

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值