2011-04-08 240 views
4

我一直在尝试使用Java API在HDFS上创建和维护序列文件,而未对未来的MapReduce作业运行MapReduce作业作为设置。我希望将所有MapReduce作业的输入数据存储在单个序列文件中,但是数据会随着时间的推移而被添加。问题是,如果SequenceFile存在,下面的调用将会覆盖SequenceFile而不是附加到它。HDFS:使用HDFS API附加到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

对不起,目前Hadoop FileSystem不支持附加。但是在未来的版本中有计划。

+0

哈哈,那就是我所害怕的。不过,感谢您的帮助。 – 2011-04-10 15:49:35

+0

这仍然是真的吗?这听起来像CDH3至少使这个可行吗? – kee 2012-05-10 19:24:03