【问题标题】:HDFS: Using HDFS API to append to a SequenceFileHDFS:使用 HDFS API 附加到 SequenceFile
【发布时间】:2011-04-08 17:02:07
【问题描述】:

我一直在尝试使用 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 的少量数据有很高的开销。

有什么想法或解决方法吗?谢谢。

【问题讨论】:

    标签: hadoop hdfs


    【解决方案1】:

    Apache Hadoop 2.6.1 和 2.7.2 以后的版本已通过增强 JIRA:https://issues.apache.org/jira/browse/HADOOP-7139 添加了对附加到现有 SequenceFiles 的支持: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 及更高版本中找到相同的功能。

    【讨论】:

      【解决方案2】:

      抱歉,目前 Hadoop 文件系统不支持追加。但我们计划在未来的版本中使用它。

      【讨论】:

      • 哈哈,这就是我害怕的。不过,感谢您的帮助。
      • 这仍然是真的吗?听起来 CDH3 至少可以做到这一点?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      相关资源
      最近更新 更多