HDFS:使用HDFS API附加到SequenceFile

Mat*_*t D 4 hadoop hdfs

我一直在尝试使用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();
Run Code Online (Sandbox Code Playgroud)

另一个问题是我无法维护我自己格式的文件,并在一天结束时将数据转换为SequenceFile,因为可以在任何时候使用该数据启动MapReduce作业.

我找不到任何其他API调用来附加到SequenceFile并保持其格式.我也不能简单地连接两个SequenceFiles,因为它们的格式需求.

我还想避免为此运行MapReduce作业,因为它对我添加到SequenceFile的少量数据有很高的开销.

任何想法或解决方法?谢谢.

Har*_*h J 6

SequenceFilesApache 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/阿帕奇/ Hadoop的/ IO/TestSequenceFileAppend.java#L63,L140

CDH5用户可以在CDH 5.7.1版本中找到相同的功能.