默认的切片大小是block的大小,即128M
切片大小可自行设置,Math.max(minSize, Math.min(maxSize, blockSize));
block是HDFS上物理上存储的存储的数据,切片是对数据逻辑上的划分。
如果设置的最大值比blocksize值小,则按照maxSize切数据
如果设置的最小值比blocksize值大,则按照minSize切数据
第一种情况(切片大小为256M):
FileInputFormat.setInputPaths(job, new Path(input));
FileInputFormat. setMaxInputSplitSize(job,1024*1024*500) ; //设置最大分片大小
FileInputFormat.setMinInputSplitSize(job,1024*1024*256); //设置最小分片大小
第二种情况(切片大小为100M):
FileInputFormat.setInputPaths(job, new Path(input));
FileInputFormat.setMaxInputSplitSize(job,1024*1024*100) ; //设置最大分片大小
FileInputFormat.setMinInputSplitSize(job,1024*1024*80); //设置最小分片大小
整个切片的核心过程在getSplit()方法中完成。
数据切片只是在逻辑上对输入数据进行分片,并不会再磁盘上将其切分成分片进行存储。InputSplit只记录了分片的元数据信息,比如起始位置、长度以及所在的节点列表等。