Hadoop FileInputFormat 默认切片机制

FileInputFormat

默认的切片机制

  1. 简单地按照文件的内容长度进行切片
  2. 切片大小,默认等于 block 大小**(Local模式默认32M,集群模式默认128M)**
  3. 切片时不考虑数据集整体,而是逐个针对每一个文件单独切片

FileInputFormat默认切割机制

源码分析

参考:Hadoop MapReduce Splits 切片源码分析及切片机制

计算切片大小 computeSplitSize

默认情况下,切片大小=blocksize

protected long computeSplitSize(long blockSize, long minSize, long maxSize) {
    return Math.max(minSize, Math.min(maxSize, blockSize));
}

SPLIT_SLOP

每次切片时,都要判断切完剩下的部分是否大于块的 1.1 倍, 不大于 1.1 倍就划分一块切片

private static final double SPLIT_SLOP = 1.1;   // 10% slop
while (((double) bytesRemaining)/splitSize > SPLIT_SLOP) {
    int blkIndex = getBlockIndex(blkLocations, length-bytesRemaining);
    splits.add(makeSplit(path, length-bytesRemaining, splitSize, blkLocations[blkIndex].getHosts(),blkLocations[blkIndex].getCachedHosts()));
    bytesRemaining -= splitSize;
}

通过分析源码,在 FileInputFormat 中,计算切片大小的逻辑:Math.max(minSize,
Math.min(maxSize, blockSize));

切片主要由这几个值来运算决定

mapreduce.input.fileinputformat.split.minsize=1 //默认值为 1 
mapreduce.input.fileinputformat.split.maxsize= Long.MAXValue //默认值

因此,默认情况下,切片大小=blocksize。
maxsize(切片最大值):参数如果调得比 blocksize 小,则会让切片变小,就等于
配置的这个参数的值。
minsize(切片最小值):参数调的比 blockSize 大,则可以让切片变得比 blocksize 还大

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值