如何强制文件内容按顺序处理?

时间:2016-02-16 08:58:47

标签: hadoop mapreduce hive hdfs bigsql

我需要处理文件,因为它意味着文件内容应该按照文件中的显示进行处理。

例如:我有一个文件,大小为700MB。我们如何确保文件将按其显示处理,因为它取决于Datanode的可用性。在某些情况下,如果任何Datanode缓慢处理文件(低配置)。

解决此问题的一种方法是在文件中添加唯一ID /密钥,但我们不想在文件中添加任何新内容。

任何想法:)

1 个答案:

答案 0 :(得分:2)

您可以保证只有一个映射器通过编写自己的FileInputFormatisSplitable设置为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版本,可能需要稍作修改。

相关问题