【问题标题】:How to force file content to be processed sequenctially?如何强制按顺序处理文件内容?
【发布时间】:2016-02-16 08:58:47
【问题描述】:

我需要按原样处理文件,这意味着文件内容应按文件中出现的方式处理。

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

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

任何想法:)

【问题讨论】:

    标签: hadoop mapreduce hive hdfs bigsql


    【解决方案1】:

    您可以通过编写自己的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 版本,可能需要稍作更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多