我一直在尝试使用 Java API 在 HDFS 上创建和维护一个序列文件,而不运行 MapReduce 作业作为未来 MapReduce 作业的设置。我想将 MapReduce 作业的所有输入数据存储在一个序列文件中,但数据会随着时间的推移在一天中被附加。问题是,如果 SequenceFile 存在,下面的调用只会覆盖 SequenceFile 而不是追加到它上面。
// fs and conf are set up for HDFS, not as a LocalFileSystem
seqWriter = SequenceFile.createWriter(fs, conf, new Path(hdfsPath),
keyClass, valueClass, SequenceFile.CompressionType.NONE);
seqWriter.append(new Text(key), new BytesWritable(value));
seqWriter.close();
另一个问题是我无法维护自己格式的文件并在一天结束时将数据转换为 SequenceFile,因为可以在任何时候使用该数据启动 MapReduce 作业。
我找不到任何其他 API 调用来附加到 SequenceFile 并保持其格式。由于格式需要,我也不能简单地连接两个 SequenceFile。
我还想避免为此运行 MapReduce 作业,因为它对于我添加到 SequenceFile 的少量数据有很高的开销。
有什么想法或解决方法吗?谢谢。