我一直在尝试使用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的少量数据有很高的开销。
任何想法或解决方法?感谢。
答案 0 :(得分:6)
通过增强型JIRA,已向Apache Hadoop 2.6.1和2.7.2版本添加了对现有SequenceFiles
的附加支持:https://issues.apache.org/jira/browse/HADOOP-7139
CDH5用户可以在CDH 5.7.1版本中找到相同的功能。
答案 1 :(得分:4)
抱歉,目前Hadoop FileSystem不支持附加功能。但是在未来的版本中有计划。