我一直试图使用Java在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中的少量数据具有很高的开销。
有什么想法或工作吗?谢谢。
发布于 2012-09-10 20:02:33
通过增强JIRA:https://issues.apache.org/jira/browse/HADOOP-7139,ApacheHadoop2.6.1和2.7.2版本都增加了对附加到现有SequenceFiles的支持
CDH5用户可以在CDH5.7.1版本上找到相同的功能。
发布于 2011-04-08 20:34:19
对不起,目前Hadoop FileSystem不支持追加。但在未来的发行版中也有计划。
https://stackoverflow.com/questions/5598400
复制相似问题