HDFS:使用HDFS API附加到SequenceFile
问题描述:
我一直在尝试使用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中的少量数据有很高的开销。
任何想法或变通?谢谢。
答
对不起,目前Hadoop FileSystem不支持附加。但是在未来的版本中有计划。
答
用于附加到现有
SequenceFiles
支持已被添加到Apache Hadoop的2.6.1和2.7.2版本起,经由增强JIRA:https://issues.apache.org/jira/browse/HADOOP-7139
CDH5用户可以在版本CDH 5.7.1及更高版本中找到相同的功能。
哈哈,那就是我所害怕的。不过,感谢您的帮助。 – 2011-04-10 15:49:35
这仍然是真的吗?这听起来像CDH3至少使这个可行吗? – kee 2012-05-10 19:24:03