我需要处理文件,因为它意味着文件内容应该按照文件中的显示进行处理。
例如:我有一个文件,大小为700MB。我们如何确保文件将按其显示处理,因为它取决于Datanode的可用性。在某些情况下,如果任何Datanode缓慢处理文件(低配置)。
解决此问题的一种方法是在文件中添加唯一ID /密钥,但我们不想在文件中添加任何新内容。
任何想法:)
答案 0 :(得分:2)
您可以保证只有一个映射器通过编写自己的FileInputFormat
将isSplitable
设置为false来计算文件的内容。例如。
public class WholeFileInputFormat extends FileInputFormat<Text, BytesWritable> {
@Override
protected boolean isSplitable(FileSystem fs, Path filename) {
return false;
}
@Override
public RecordReader<Text, BytesWritable> getRecordReader(
InputSplit split, JobConf job, Reporter reporter) throws IOException {
return new WholeFileRecordReader((FileSplit) split, job);
}
}
有关如何操作的更多示例,我建议使用github project。根据你的hadoop版本,可能需要稍作修改。