读取文件的切片规则
截取了源码重要的部分
//所有的文件
FileStatus[] files = listStatus(job);
//记录所有文件的总大小
//numSlits是minPartitions=2
long totalSize = 0;
long goalSize = totalSize / (numSplits == 0 ? 1 : numSplits);
//前部分没有配置,那么就是1 minSplitSize看源码也是1
long minSize = Math.max(job.getLong(org.apache.hadoop.mapreduce.lib.input.
FileInputFormat.SPLIT_MINSIZE, 1), minSplitSize);
//保存所有切片
ArrayList<FileSplit> splits = new ArrayList<FileSplit>(numSplits);
如果文件可以切割
if (isSplitable(fs, path)) {
//local:32M 集群:128M
long blockSize = file.getBlockSize();
long splitSize = computeSplitSize(goalSize, minSize, blockSize);
//用来记录文件切后剩余的大小
bytesRemaining -= splitSize;
那举个列子一共有4个文件
a.txt 100k b.txt 100k c.txt 100k d.txt 400k
请问一个有几个切片?
答案:5个
前三个文件100k 只有一个切片
如果找不到源码-分享步骤
看源码
先ctrl+左键点击testFile
找到getPartitions
ctrl+h
找到这里就可以了