mapreduce CombineTextInputFormat合并小文件

22 篇文章 0 订阅
15 篇文章 0 订阅

CombineTextInputFormat是用于合并小文件的。通过调用setMaxInputSplitSize方法设置maxSize。

有两个主要步骤,

(1)虚拟存储,先按照指定规则把指定目录下的文件都切分为小于maxSize的更小文件。当然,原本就小于maxSize的小文件不做切分。只有大于maxSIze的小文件会切分的比maxSize更小。切分后的所有文件都是小于maxSize的,当然,这里说的切分后的文件不是真的切分成更小文件了,而是属于一种逻辑上的文件。。所以才叫做虚拟存储。

具体切分规则是:

将输入目录下所有文件大小,依次和设置的 setMaxInputSplitSize 值比较,

<1>如果不 大于设置的最大值,逻辑上划分一个块。

<2>如果输入文件大于设置的最大值且大于两倍, 那么以最大值切割一块;

<3>当剩余数据大小超过设置的最大值且不大于最大值 2 倍,此时 将文件均分成 2 个虚拟存储块(防止出现太小切片)。

<1>和<2>示例如图:

<3>的例子如下:

例如 setMaxInputSplitSize 值为 4M,输入文件大小为 8.02M,则先逻辑上分成一个 4M。剩余的大小为 4.02M,如果按照 4M 逻辑划分,就会出现 0.02M 的小的虚拟存储 文件,所以将剩余的 4.02M 文件切分成(2.01M 和 2.01M)两个文件。

 

(2)切片过程,如图:

 

总结:

(1)虚拟存储时切分的虚拟小文件大小都是小于maxSIze的。

(2)切分过程时把(1)虚拟存储的每个虚拟文件与之后的虚拟文件合并,直到合并的文件大于maxSize,此时把这部分虚拟文件作为一个split,然后再让下一个虚拟文件及其虚拟文件一个一个合并直到大于maxSize....这样就可以得到多个split了,每个split的大小都在maxSize到2*maxSize之间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值