目前,我使用以下代码附加到现有的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();
如果sequencefile不存在,那么一切都可以工作,但是当文件存在时,hadoop再次在文件中间写入sequencefile头(seq…),并且该文件对于hadoop是不可读取的。
我使用hadoop2.6.0
1条答案
按热度按时间p4tfgftt1#
我认为不可能附加到现有的序列文件。我已经分析了2.5.2和2.6.0-cdh5.5的源代码。在writer的每个构造函数中,都会写入“sequence file header”(从init函数)。
没有支持此功能的路径https://issues.apache.org/jira/browse/hadoop-7139 但它并没有被推到官方发布。
更新:hadoop-7139现在已经关闭,从版本2.6.1/2.7.2可以附加到现有的sequencefile:)