4

我一直在尝试使用 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 的少量数据有很高的开销。

有什么想法或解决方法吗?谢谢。

4

2 回答 2

6

通过增强 JIRA: httpsSequenceFiles ://issues.apache.org/jira/browse/HADOOP-7139,Apache Hadoop 2.6.1 和 2.7.2 版本开始支持追加到现有版本

例如用法,测试用例可以阅读:https ://github.com/apache/hadoop/blob/branch-2.7.2/hadoop-common-project/hadoop-common/src/test/java/org/ apache/hadoop/io/TestSequenceFileAppend.java#L63-L140

CDH5 用户可以在 CDH 5.7.1 及更高版本中找到相同的功能。

于 2012-09-10T20:02:33.587 回答
4

抱歉,目前 Hadoop 文件系统不支持追加。但是在未来的版本中有它的计划。

于 2011-04-08T20:34:19.820 回答