TextInputFormat是FileInputFormat的子类,其createRecordReader()方法返回的就是LineRecordReader。
- public
class TextInputFormat extends FileInputFormat<</span>LongWritable, Text> { -
-
@Override -
public RecordReader<</span>LongWritable, Text> -
createRecordReader(InputSplit split, -
TaskAttemptContext context) { -
return new LineRecordReader(); -
} -
-
@Override -
protected boolean isSplitable(JobContext context, Path file) { -
CompressionCodec codec = -
new CompressionCodecFactory(context.getConfiguration()).getCodec(file); -
return codec == null; -
} - }
-
我们还看到isSplitable()方法,当文件使用压缩的形式,这个文件就不可分割,否则就读取不到正确的数据了。这从某种程度上将影响分片的计算。 有时我们希望一个文件只被一个Mapper处理的时候,我们就可以重写isSplitable()方法,告诉MapReduce框架,我哪些文件可以分 割,哪些文件不能分割而只能作为一个分片。