HDFS:使用HDFS API附加到SequenceFile

时间:2011-04-08 17:02:07

标签: hadoop hdfs

我一直在尝试使用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并保持其格式。我也不能简单地连接两个SequenceFiles,因为它们需要格式化。

我还想避免为此运行MapReduce作业,因为它对我添加到SequenceFile的少量数据有很高的开销。

任何想法或解决方法?感谢。

2 个答案:

答案 0 :(得分:6)

通过增强型JIRA,已向Apache Hadoop 2.6.1和2.7.2版本添加了对现有SequenceFiles的附加支持:https://issues.apache.org/jira/browse/HADOOP-7139

例如,可以阅读测试用例: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版本中找到相同的功能。

答案 1 :(得分:4)

抱歉,目前Hadoop FileSystem不支持附加功能。但是在未来的版本中有计划。