Hadoop 文件分片 split的源码分析

2020-07-09  本文已影响0人  大雄的学习笔记
//miniSize是取formatMinSplitSize、minSplitSize两者的最大值。
long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));
//获取maxSplitSize 
long maxSize = getMaxSplitSize(job);
//获取blockSize,在hdfs文件系统中默认是128MB,在本地测试环境默认是32MB
long blockSize = file.getBlockSize();
//根据minSize、maxSize、blockSize三个值来计算splitSize
long splitSize = computeSplitSize(blockSize, minSize, maxSize);

formatMinSplitSize默认是1

protected long getFormatMinSplitSize() {
    return 1;
}

minSplitSize默认是1,也可手动配置

public static final String SPLIT_MINSIZE = "mapreduce.input.fileinputformat.split.minsize";
public static long getMinSplitSize(JobContext job) {
    return job.getConfiguration().getLong(SPLIT_MINSIZE, 1L);
}

maxSplitSize默认是Long.MAX_VALUE,也可手动配置

public static final String SPLIT_MAXSIZE ="mapreduce.input.fileinputformat.split.maxsize";
public static long getMaxSplitSize(JobContext context) {
    return context.getConfiguration().getLong(SPLIT_MAXSIZE, 
                                              Long.MAX_VALUE);
}

计算规则

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

Math.max(1,Math.min(Long.MAX_VALUE,128)) = 128
在HDFS中的计算结果默认是128MB
在本地跑测试结果是32MB

上一篇 下一篇

猜你喜欢

热点阅读