-
文件切分
如果想一个大的文件能同时被多个Mapper处理,hadoop一般把一个文件切分成多个splits。当然如果文件被压缩,文件的压缩格式需支持splitable;
源代码见:org.apache.hadoop.mapreduce.lib.input.FileInputFormat-
涉及的参数
- blocksize hadoop文件系统的block的大小
- splitMaxSize mapreduce.input.fileinputformat.split.maxsize
- splitMinSize mapreduce.input.fileinputformat.split.minsize
splitSize = max{splitMinSize, min{splitMaxSize, blocksize}}
有意思的是:splitMaxSize设置成大于blocksize没有任何意义。只有splitMinSize>blocksize时,splitSize才会大于blocksize。还是hadoop不希望splitSize>blocksize?
-
-
文件合并
mapreduce过程,每个split对应一个map jvm 进程(当然也可以通过设置mapred.job.reuse.jvm.num.tasks来使同job的task重用jvm)。过多的小文件给HDFS的性能带来影响,所以有时需要合并小文件成大文件。