我一直在尝试使用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的少量数据有很高的开销.
任何想法或解决方法?谢谢.
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版本中找到相同的功能.
| 归档时间: |
|
| 查看次数: |
4253 次 |
| 最近记录: |