HDFS:使用HDFS API附加到SequenceFile

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不支持附加。但是在未来的版本中有计划。

+0

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

+0

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

用于附加到现有 SequenceFiles

支持已被添加到Apache Hadoop的2.6.1和2.7.2版本起,经由增强JIRA: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及更高版本中找到相同的功能。