我正在编写一个hadoop应用程序,我希望将输入文件作为一个整体读取并发送给manny mappers并让每个映射器完成部分工作。这是我的FileInputFormat。我必须让isSplitable
返回false,以便我可以读取整个文件。但是,这会导致只初始化one mapper
。是否有人可以告诉我如何整体读取输入文件并将其发送给多个映射器进行处理?
public class WholeFileInputFormat extends FileInputFormat<PairWritable, BytesWritable> {
@Override
protected boolean isSplitable(FileSystem fs, Path filename) {
return false;
}
@Override
public RecordReader<PairWritable, BytesWritable> getRecordReader(
InputSplit split, JobConf job, Reporter reporter) throws IOException {
return new WholeFileRecordReader((FileSplit) split, job);
}
}
答案 0 :(得分:3)
向WholeFileInputFormat添加getSplits
的实现,返回任意数量的重复项。