hadoop mapreduce中Map器的最大输入文件大小(不带拆分)是多少?

bcs8qyzn  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(306)

我已经写了一个mapreduce作业,可以处理一些protobuf文件作为输入。由于文件的性质(不可发布),每个文件都由一个Map器(实现了一个自定义Map器)处理 FileInputFormatisSplitable 设置为 false ). 当输入文件大小小于 ~680MB 但是,一旦输入文件大小超过该限制,应用程序将成功完成,但会生成一个空文件。
我想知道我是否达到了Map器的文件大小限制?如果有关系的话,这些文件存储在google存储(gfs)上,而不是hdfs上。
谢谢!

wsewodh2

wsewodh21#

原来我碰到了这里讨论的一个著名的hadoop bug。这里的问题是 BytesWritable 类,用于编写protobuf文件。在习俗中 RecordReader 我以前做过

@Override
public boolean nextKeyValue() throws IOException, InterruptedException {
    if(!processed){
        byte[] contents = new byte[(int) fileSplit.getLength()];
        Path file = fileSplit.getPath();
        log.debug("Path file:" + file);
        FileSystem fs = file.getFileSystem(conf);
        FSDataInputStream in = null;
        try{
            in = fs.open(file);
            IOUtils.readFully(in, contents, 0, contents.length);    
            value.set(contents, 0, contents.length);
        }catch(Exception e){
            log.error(e);
        }finally{
            IOUtils.closeQuietly(in);
        }
        processed = true;
        return true;
    }
    return false;
}

默认情况下,错误会将最大内容大小设置为integer.max\u size/3,即~680mb。为了解决这个问题,我必须手动设置容量(我的最大大小)

value.setCapacity(my_ideal_max_size)

在我之前 value.set() .
希望这能帮助别人!

相关问题