2

目前我使用以下代码附加到现有的SequenceFile

// initialize sequence writer
Writer writer = SequenceFile.createWriter(
        FileContext.getFileContext(this.conf), 
        this.conf, 
        new Path("/tmp/sequencefile"), 
        Text.class,
        BytesWritable.class, 
        CompressionType.NONE,
        null, 
        new Metadata(),
        EnumSet.of(CreateFlag.CREATE, CreateFlag.APPEND), 
        CreateOpts.blockSize(64 * 1024 * 1024));

writer.append(key, value);

// close writer
writer.hsync();
writer.close();

如果序列文件不存在,一切正常,但是当文件存在时,Hadoop 在文件中间再次写入SequenceFile标头(SEQ ...),并且该文件对于 Hadoop 来说是不可读的。

我使用 Hadoop 2.6.0

4

1 回答 1

1

我认为不可能附加到现有的序列文件。我分析了2.5.2和2.6.0-CDH5.5的源码。在 Writer 的每个构造函数中都写入了“序列文件头”(来自 init 函数)。

有支持此功能的路径https://issues.apache.org/jira/browse/HADOOP-7139但未推送到正式版本。

更新:问题 HADOOP-7139 现在已关闭,并且从版本 2.6.1 / 2.7.2 可以附加到现有的 SequenceFile :)

于 2015-03-12T08:37:32.740 回答