我一直在尝试使用 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 并维护其格式。由于格式需要,我也不能简单地连接两个 SequenceFile。
我还想避免为此运行 MapReduce 作业,因为对于我添加到 SequenceFile 的少量数据来说,它的开销很高。
有什么想法或解决方法吗?谢谢。
支持追加到现有的SequenceFiles
已通过增强 JIRA 添加到 Apache Hadoop 2.6.1 和 2.7.2 及以上版本中:https://issues.apache.org/jira/browse/HADOOP-7139 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 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 及以后的版本中找到相同的功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)